From 7b773bd49fddec4101e42690546d606ae7378ba0 Mon Sep 17 00:00:00 2001 From: Alexey Terentyev Date: Tue, 12 Jun 2018 13:34:56 +0300 Subject: [PATCH 001/124] Fixed drone command in readme (#4222) Signed-off-by: Alexey Terentyev --- integrations/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/README.md b/integrations/README.md index 64041b546..927368818 100644 --- a/integrations/README.md +++ b/integrations/README.md @@ -13,7 +13,7 @@ Make sure to perform a clean build before running tests: ## Run all tests via local drone ``` -drone exec --local --build.event "pull_request" +drone exec --local --build-event "pull_request" ``` ## Run sqlite integrations tests From 0ea18698af39491f38c8bb246b02f2820ec49b4f Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 12 Jun 2018 10:36:20 +0000 Subject: [PATCH 002/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_ru-RU.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index dfe8e9fa2..008895181 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -213,6 +213,7 @@ send_reset_mail=Нажмите сюда, чтобы отправить пись reset_password=Сброс пароля invalid_code=Этот код подтверждения недействителен или истек. reset_password_helper=Нажмите здесь, чтобы сбросить свой пароль +password_too_short=Длина пароля не может быть меньше, чем %d символов. non_local_account=Нелокальные аккаунты не могут изменить пароль через Gitea. verify=Проверить scratch_code=Одноразовый пароль @@ -489,7 +490,7 @@ delete_account_desc=Вы уверены, что хотите навсегда у [repo] owner=Владелец repo_name=Имя репозитория -repo_name_helper=Лучшие названия репозиториев состоят их коротких, легко запоминаемых и уникальных ключевых слов. +repo_name_helper=Лучшие названия репозиториев состоят из коротких, легко запоминаемых и уникальных ключевых слов. visibility=Видимость visiblity_helper=Сделать репозиторий приватным visiblity_helper_forced=Администратор сайта настроил параметр видимости новых репозиториев. Репозиторий приватный по умолчанию. From 0ba165e2ea451c67448d584822ce29ddf62a6c7c Mon Sep 17 00:00:00 2001 From: harry Date: Tue, 12 Jun 2018 19:27:18 +0800 Subject: [PATCH 003/124] Improve wiki content width. (#4195) --- public/css/index.css | 2 +- public/less/_markdown.less | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/public/css/index.css b/public/css/index.css index 607ab3f6a..2ee3e8314 100644 --- a/public/css/index.css +++ b/public/css/index.css @@ -1 +1 @@ -.tribute-container{box-shadow:0 1px 3px 1px #c7c7c7}.tribute-container ul{background:#fff}.tribute-container li{padding:8px 12px;border-bottom:1px solid #dcdcdc}.tribute-container li img{display:inline-block;vertical-align:middle;width:28px;height:28px;margin-right:5px}.tribute-container li span.fullname{font-weight:400;font-size:.8rem;margin-left:3px}.tribute-container li.highlight,.tribute-container li:hover{background:#2185D0;color:#fff}.emoji{width:1.5em;height:1.5em;display:inline-block;background-size:contain}body{font-family:Lato,"Segoe UI","Microsoft YaHei",Arial,Helvetica,sans-serif!important;background-color:#fff;overflow-y:scroll;-webkit-font-smoothing:antialiased}img{border-radius:3px}.rounded{border-radius:.28571429rem!important}code,pre{font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace}code.raw,pre.raw{padding:7px 12px;margin:10px 0;background-color:#f8f8f8;border:1px solid #ddd;border-radius:3px;font-size:13px;line-height:1.5;overflow:auto}code.wrap,pre.wrap{white-space:pre-wrap;-ms-word-break:break-all;word-break:break-all;overflow-wrap:break-word;word-wrap:break-word}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.full.height{padding:0;margin:0 0 -40px 0;min-height:100%}.following.bar{z-index:900;left:0;width:100%;margin:0}.following.bar.light{background-color:#fff;border-bottom:1px solid #DDD;box-shadow:0 2px 3px rgba(0,0,0,.04)}.following.bar .column .menu{margin-top:0}.following.bar .top.menu a.item.brand{padding-left:0}.following.bar .brand .ui.mini.image{width:30px}.following.bar .top.menu .dropdown.item.active,.following.bar .top.menu .dropdown.item:hover,.following.bar .top.menu a.item:hover{background-color:transparent}.following.bar .top.menu a.item:hover{color:rgba(0,0,0,.45)}.following.bar .top.menu .menu{z-index:900}.following.bar .octicon{margin-right:.75em}.following.bar .octicon.fitted{margin-right:0}.following.bar .searchbox{background-color:#f4f4f4!important}.following.bar .searchbox:focus{background-color:#e9e9e9!important}.following.bar .text .octicon{width:16px;text-align:center}@media only screen and (max-width:767px){.following.bar #navbar:not(.shown)>:not(:first-child){display:none}}.right.stackable.menu{margin-left:auto;display:flex;display:-ms-flexbox;-ms-flex-align:inherit;align-items:inherit;-ms-flex-direction:inherit;flex-direction:inherit}.ui.left{float:left}.ui.right{float:right}.ui.button,.ui.menu .item{-moz-user-select:auto;-ms-user-select:auto;-webkit-user-select:auto;user-select:auto}.ui.container.fluid.padded{padding:0 10px 0 10px}.ui.form .ui.button{font-weight:400}.ui.floating.label{z-index:10}.ui.menu,.ui.segment,.ui.vertical.menu{box-shadow:none}.ui .menu:not(.vertical) .item>.button.compact{padding:.58928571em 1.125em}.ui .menu:not(.vertical) .item>.button.small{font-size:.92857143rem}.ui.dropdown .menu>.item>.floating.label{z-index:11}.ui.dropdown .menu .menu>.item>.floating.label{z-index:21}.ui .text.red{color:#d95c5c!important}.ui .text.red a{color:#d95c5c!important}.ui .text.red a:hover{color:#E67777!important}.ui .text.blue{color:#428bca!important}.ui .text.blue a{color:#15c!important}.ui .text.blue a:hover{color:#428bca!important}.ui .text.black{color:#444}.ui .text.black:hover{color:#000}.ui .text.grey{color:#767676!important}.ui .text.grey a{color:#444!important}.ui .text.grey a:hover{color:#000!important}.ui .text.light.grey{color:#888!important}.ui .text.green{color:#6cc644!important}.ui .text.purple{color:#6e5494!important}.ui .text.yellow{color:#FBBD08!important}.ui .text.gold{color:#a1882b!important}.ui .text.left{text-align:left!important}.ui .text.right{text-align:right!important}.ui .text.small{font-size:.75em}.ui .text.normal{font-weight:400}.ui .text.bold{font-weight:700}.ui .text.italic{font-style:italic}.ui .text.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.ui .text.thin{font-weight:400}.ui .text.middle{vertical-align:middle}.ui .message{text-align:center}.ui .header>i+.content{padding-left:.75rem;vertical-align:middle}.ui .warning.header{background-color:#F9EDBE!important;border-color:#F0C36D}.ui .warning.segment{border-color:#F0C36D}.ui .info.segment{border:1px solid #c5d5dd}.ui .info.segment.top{background-color:#e6f1f6!important}.ui .info.segment.top h3,.ui .info.segment.top h4{margin-top:0}.ui .info.segment.top h3:last-child{margin-top:4px}.ui .info.segment.top>:last-child{margin-bottom:0}.ui .normal.header{font-weight:400}.ui .avatar.image{border-radius:3px}.ui .form .fake{display:none!important}.ui .form .sub.field{margin-left:25px}.ui .sha.label{font-family:Consolas,Menlo,Monaco,"Lucida Console",monospace;font-size:13px;padding:6px 10px 4px 10px;font-weight:400;margin:0 6px}.ui.status.buttons .octicon{margin-right:4px}.ui.inline.delete-button{padding:8px 15px;font-weight:400}.ui .background.red{background-color:#d95c5c!important}.ui .background.blue{background-color:#428bca!important}.ui .background.black{background-color:#444}.ui .background.grey{background-color:#767676!important}.ui .background.light.grey{background-color:#888!important}.ui .background.green{background-color:#6cc644!important}.ui .background.purple{background-color:#6e5494!important}.ui .background.yellow{background-color:#FBBD08!important}.ui .background.gold{background-color:#a1882b!important}.ui .branch-tag-choice{line-height:20px}.overflow.menu .items{max-height:300px;overflow-y:auto}.overflow.menu .items .item{position:relative;cursor:pointer;display:block;border:none;height:auto;border-top:none;line-height:1em;color:rgba(0,0,0,.8);padding:.71428571em 1.14285714em!important;font-size:1rem;text-transform:none;font-weight:400;box-shadow:none;-webkit-touch-callout:none}.overflow.menu .items .item.active{font-weight:700}.overflow.menu .items .item:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.8);z-index:13}.scrolling.menu .item.selected{font-weight:700!important}footer{height:40px;background-color:#fff;border-top:1px solid #d6d6d6;clear:both;width:100%;color:#888}footer .container{padding-top:10px}footer .container .fa{width:16px;text-align:center;color:#428bca}footer .container .links>*{border-left:1px solid #d6d6d6;padding-left:8px;margin-left:5px}footer .container .links>:first-child{border-left:none}footer .ui.language .menu{max-height:500px;overflow-y:auto;margin-bottom:7px}.hide{display:none}.center{text-align:center}.img-1{width:2px!important;height:2px!important}.img-2{width:4px!important;height:4px!important}.img-3{width:6px!important;height:6px!important}.img-4{width:8px!important;height:8px!important}.img-5{width:10px!important;height:10px!important}.img-6{width:12px!important;height:12px!important}.img-7{width:14px!important;height:14px!important}.img-8{width:16px!important;height:16px!important}.img-9{width:18px!important;height:18px!important}.img-10{width:20px!important;height:20px!important}.img-11{width:22px!important;height:22px!important}.img-12{width:24px!important;height:24px!important}.img-13{width:26px!important;height:26px!important}.img-14{width:28px!important;height:28px!important}.img-15{width:30px!important;height:30px!important}.img-16{width:32px!important;height:32px!important}@media only screen and (min-width:768px){.mobile-only,.ui.button.mobile-only{display:none}.sr-mobile-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}}@media only screen and (max-width:767px){.not-mobile{display:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}@media only screen and (max-width:991px) and (min-width:768px){.ui.container{width:95%}}.hljs{background:inherit!important;padding:0!important}.ui.menu.new-menu{justify-content:center!important;padding-top:15px!important;margin-top:-15px!important;margin-bottom:15px!important;background-color:#FAFAFA!important;border-width:1px!important}@media only screen and (max-width:1200px){.ui.menu.new-menu{overflow-x:auto!important;justify-content:left!important;padding-bottom:5px}.ui.menu.new-menu::-webkit-scrollbar{height:8px;display:none}.ui.menu.new-menu:hover::-webkit-scrollbar{display:block}.ui.menu.new-menu::-webkit-scrollbar-track{background:rgba(0,0,0,.01)}.ui.menu.new-menu::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2)}.ui.menu.new-menu:after{position:absolute;margin-top:-15px;display:block;background-image:linear-gradient(to right,rgba(255,255,255,0),#fff 100%);content:' ';right:0;height:53px;z-index:1000;width:60px;clear:none;visibility:visible}.ui.menu.new-menu a.item:last-child{padding-right:30px!important}}[v-cloak]{display:none!important}.repos-search{padding-bottom:0!important}.repos-filter{margin-top:0!important;border-bottom-width:0!important;margin-bottom:2px!important}.markdown:not(code){overflow:hidden;font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6!important;word-wrap:break-word}.markdown:not(code).file-view{padding:2em 2em 2em!important}.markdown:not(code)>:first-child{margin-top:0!important}.markdown:not(code)>:last-child{margin-bottom:0!important}.markdown:not(code) a:not([href]){color:inherit;text-decoration:none}.markdown:not(code) .absent{color:#c00}.markdown:not(code) .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown:not(code) .anchor:focus{outline:0}.markdown:not(code) h1,.markdown:not(code) h2,.markdown:not(code) h3,.markdown:not(code) h4,.markdown:not(code) h5,.markdown:not(code) h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown:not(code) h1:first-of-type,.markdown:not(code) h2:first-of-type,.markdown:not(code) h3:first-of-type,.markdown:not(code) h4:first-of-type,.markdown:not(code) h5:first-of-type,.markdown:not(code) h6:first-of-type{margin-top:0!important}.markdown:not(code) h1 .octicon-link,.markdown:not(code) h2 .octicon-link,.markdown:not(code) h3 .octicon-link,.markdown:not(code) h4 .octicon-link,.markdown:not(code) h5 .octicon-link,.markdown:not(code) h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown:not(code) h1:hover .anchor,.markdown:not(code) h2:hover .anchor,.markdown:not(code) h3:hover .anchor,.markdown:not(code) h4:hover .anchor,.markdown:not(code) h5:hover .anchor,.markdown:not(code) h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown:not(code) h1:hover .anchor .octicon-link,.markdown:not(code) h2:hover .anchor .octicon-link,.markdown:not(code) h3:hover .anchor .octicon-link,.markdown:not(code) h4:hover .anchor .octicon-link,.markdown:not(code) h5:hover .anchor .octicon-link,.markdown:not(code) h6:hover .anchor .octicon-link{display:inline-block}.markdown:not(code) h1 code,.markdown:not(code) h1 tt,.markdown:not(code) h2 code,.markdown:not(code) h2 tt,.markdown:not(code) h3 code,.markdown:not(code) h3 tt,.markdown:not(code) h4 code,.markdown:not(code) h4 tt,.markdown:not(code) h5 code,.markdown:not(code) h5 tt,.markdown:not(code) h6 code,.markdown:not(code) h6 tt{font-size:inherit}.markdown:not(code) h1{padding-bottom:.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown:not(code) h1 .anchor{line-height:1}.markdown:not(code) h2{padding-bottom:.3em;font-size:1.75em;line-height:1.225;border-bottom:1px solid #eee}.markdown:not(code) h2 .anchor{line-height:1}.markdown:not(code) h3{font-size:1.5em;line-height:1.43}.markdown:not(code) h3 .anchor{line-height:1.2}.markdown:not(code) h4{font-size:1.25em}.markdown:not(code) h4 .anchor{line-height:1.2}.markdown:not(code) h5{font-size:1em}.markdown:not(code) h5 .anchor{line-height:1.1}.markdown:not(code) h6{font-size:1em;color:#777}.markdown:not(code) h6 .anchor{line-height:1.1}.markdown:not(code) blockquote,.markdown:not(code) dl,.markdown:not(code) ol,.markdown:not(code) p,.markdown:not(code) pre,.markdown:not(code) table,.markdown:not(code) ul{margin-top:0;margin-bottom:16px}.markdown:not(code) blockquote{margin-left:0}.markdown:not(code) hr{height:4px;padding:0;margin:16px 0;background-color:#e7e7e7;border:0 none}.markdown:not(code) ol,.markdown:not(code) ul{padding-left:2em}.markdown:not(code) ol.no-list,.markdown:not(code) ul.no-list{padding:0;list-style-type:none}.markdown:not(code) ol ol,.markdown:not(code) ol ul,.markdown:not(code) ul ol,.markdown:not(code) ul ul{margin-top:0;margin-bottom:0}.markdown:not(code) ol ol,.markdown:not(code) ul ol{list-style-type:lower-roman}.markdown:not(code) li>p{margin-top:0}.markdown:not(code) dl{padding:0}.markdown:not(code) dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown:not(code) dl dd{padding:0 16px;margin-bottom:16px}.markdown:not(code) blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown:not(code) blockquote>:first-child{margin-top:0}.markdown:not(code) blockquote>:last-child{margin-bottom:0}.markdown:not(code) table{width:auto;overflow:auto;word-break:normal;word-break:keep-all}.markdown:not(code) table th{font-weight:700}.markdown:not(code) table td,.markdown:not(code) table th{padding:6px 13px!important;border:1px solid #ddd!important}.markdown:not(code) table tr{background-color:#fff;border-top:1px solid #ccc}.markdown:not(code) table tr:nth-child(2n){background-color:#f8f8f8}.markdown:not(code) img{max-width:100%;box-sizing:border-box}.markdown:not(code) .emoji{max-width:none}.markdown:not(code) span.frame{display:block;overflow:hidden}.markdown:not(code) span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown:not(code) span.frame span img{display:block;float:left}.markdown:not(code) span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown:not(code) span.align-center{display:block;overflow:hidden;clear:both}.markdown:not(code) span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown:not(code) span.align-center span img{margin:0 auto;text-align:center}.markdown:not(code) span.align-right{display:block;overflow:hidden;clear:both}.markdown:not(code) span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown:not(code) span.align-right span img{margin:0;text-align:right}.markdown:not(code) span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown:not(code) span.float-left span{margin:13px 0 0}.markdown:not(code) span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown:not(code) span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown:not(code) code,.markdown:not(code) tt{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown:not(code) code:after,.markdown:not(code) code:before,.markdown:not(code) tt:after,.markdown:not(code) tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown:not(code) code br,.markdown:not(code) tt br{display:none}.markdown:not(code) del code{text-decoration:inherit}.markdown:not(code) pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown:not(code) .highlight{margin-bottom:16px}.markdown:not(code) .highlight pre,.markdown:not(code) pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown:not(code) .highlight pre{margin-bottom:0;word-break:normal}.markdown:not(code) pre{word-wrap:normal}.markdown:not(code) pre code,.markdown:not(code) pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown:not(code) pre code:after,.markdown:not(code) pre code:before,.markdown:not(code) pre tt:after,.markdown:not(code) pre tt:before{content:normal}.markdown:not(code) kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown:not(code) input[type=checkbox]{vertical-align:middle!important}.markdown:not(code) .csv-data td,.markdown:not(code) .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown:not(code) .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown:not(code) .csv-data tr{border-top:0}.markdown:not(code) .csv-data th{font-weight:700;background:#f8f8f8;border-top:0}.markdown:not(code) .ui.list .list,.markdown:not(code) ol.ui.list ol,.markdown:not(code) ul.ui.list ul{padding-left:2em}.home{padding-bottom:80px}.home .logo{max-width:220px}.home .hero h1,.home .hero h2{font-family:'PT Sans Narrow',sans-serif,'Microsoft YaHei'}@media only screen and (max-width:767px){.home .hero h1{font-size:3.5em}.home .hero h2{font-size:2em}}@media only screen and (min-width:768px){.home .hero h1{font-size:5.5em}.home .hero h2{font-size:3em}}.home .hero .octicon{color:#5aa509;font-size:40px;width:50px}.home .hero.header{font-size:20px}.home p.large{font-size:16px}.home .stackable{padding-top:30px}.home a{color:#5aa509}.signup{padding-top:15px;padding-bottom:80px}.install{padding-top:45px;padding-bottom:80px}.install form label{text-align:right;width:320px!important}.install form input{width:35%!important}.install form .field{text-align:left}.install form .field .help{margin-left:335px!important}.install form .field.optional .title{margin-left:38%}.install .ui .checkbox{margin-left:40%!important}.install .ui .checkbox label{width:auto!important}.form .help{color:#999;padding-top:.6em;padding-bottom:.6em;display:inline-block}.ui.attached.header{background:#f0f0f0}.ui.attached.header .right{margin-top:-5px}.ui.attached.header .right .button{padding:8px 10px;font-weight:400}#create-page-form form{margin:auto}#create-page-form form .ui.message{text-align:center}@media only screen and (min-width:768px){#create-page-form form{width:800px!important}#create-page-form form .header{padding-left:280px!important}#create-page-form form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}#create-page-form form .help{margin-left:265px!important}#create-page-form form .optional .title{margin-left:250px!important}#create-page-form form input,#create-page-form form textarea{width:50%!important}}@media only screen and (max-width:767px){#create-page-form form .optional .title{margin-left:15px}#create-page-form form .inline.field>label{display:block}}.signin .oauth2 div{display:inline-block}.signin .oauth2 div p{margin:10px 5px 0 0;float:left}.signin .oauth2 a{margin-right:3px}.signin .oauth2 a:last-child{margin-right:0}.signin .oauth2 img{width:32px;height:32px}.signin .oauth2 img.openidConnect{width:auto}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{margin:auto}.user.activate form .ui.message,.user.forgot.password form .ui.message,.user.reset.password form .ui.message,.user.signin form .ui.message,.user.signup form .ui.message{text-align:center}@media only screen and (min-width:768px){.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{width:800px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.signin form .header,.user.signup form .header{padding-left:280px!important}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.user.activate form .help,.user.forgot.password form .help,.user.reset.password form .help,.user.signin form .help,.user.signup form .help{margin-left:265px!important}.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:250px!important}.user.activate form input,.user.activate form textarea,.user.forgot.password form input,.user.forgot.password form textarea,.user.reset.password form input,.user.reset.password form textarea,.user.signin form input,.user.signin form textarea,.user.signup form input,.user.signup form textarea{width:50%!important}}@media only screen and (max-width:767px){.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:15px}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{display:block}}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{width:700px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.signin form .header,.user.signup form .header{padding-left:0!important;text-align:center}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{width:200px!important}.repository.new.fork form,.repository.new.migrate form,.repository.new.repo form{margin:auto}.repository.new.fork form .ui.message,.repository.new.migrate form .ui.message,.repository.new.repo form .ui.message{text-align:center}@media only screen and (min-width:768px){.repository.new.fork form,.repository.new.migrate form,.repository.new.repo form{width:800px!important}.repository.new.fork form .header,.repository.new.migrate form .header,.repository.new.repo form .header{padding-left:280px!important}.repository.new.fork form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.repo form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.repository.new.fork form .help,.repository.new.migrate form .help,.repository.new.repo form .help{margin-left:265px!important}.repository.new.fork form .optional .title,.repository.new.migrate form .optional .title,.repository.new.repo form .optional .title{margin-left:250px!important}.repository.new.fork form input,.repository.new.fork form textarea,.repository.new.migrate form input,.repository.new.migrate form textarea,.repository.new.repo form input,.repository.new.repo form textarea{width:50%!important}}@media only screen and (max-width:767px){.repository.new.fork form .optional .title,.repository.new.migrate form .optional .title,.repository.new.repo form .optional .title{margin-left:15px}.repository.new.fork form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.repo form .inline.field>label{display:block}}.repository.new.fork form .dropdown .dropdown.icon,.repository.new.migrate form .dropdown .dropdown.icon,.repository.new.repo form .dropdown .dropdown.icon{margin-top:-7px!important}.repository.new.fork form .dropdown .text,.repository.new.migrate form .dropdown .text,.repository.new.repo form .dropdown .text{margin-right:0!important}.repository.new.fork form .dropdown .text i,.repository.new.migrate form .dropdown .text i,.repository.new.repo form .dropdown .text i{margin-right:0!important}.repository.new.fork form .header,.repository.new.migrate form .header,.repository.new.repo form .header{padding-left:0!important;text-align:center}.repository.new.repo .ui.form .selection.dropdown:not(.owner){width:50%!important}@media only screen and (min-width:768px){.repository.new.repo .ui.form #auto-init{margin-left:265px!important}}.new.webhook form .help{margin-left:25px}.new.webhook .events.fields .column{padding-left:40px}.githook textarea{font-family:monospace}.repository{padding-top:15px;padding-bottom:80px}.repository .header-grid{padding-top:5px;padding-bottom:5px}.repository .header-grid .ui.compact.menu{margin-left:1rem}.repository .header-grid .ui.header{margin-top:0}.repository .header-grid .mega-octicon{width:30px;font-size:30px}.repository .header-grid .ui.huge.breadcrumb{font-weight:400;font-size:1.7rem}.repository .header-grid .fork-flag{margin-left:38px;margin-top:3px;display:block;font-size:12px;white-space:nowrap}.repository .header-grid .octicon.octicon-repo-forked{margin-top:-1px;font-size:15px}.repository .header-grid .button{margin-top:2px;margin-bottom:2px}.repository .tabs .navbar{justify-content:initial}.repository .navbar{display:flex;justify-content:space-between}.repository .navbar .ui.label{margin-top:-2px;margin-left:7px;padding:3px 5px}.repository .owner.dropdown{min-width:40%!important}.repository #file-buttons{margin-left:auto!important;font-weight:400}.repository #file-buttons .ui.button{padding:8px 10px;font-weight:400}.repository .metas .menu{max-height:300px;overflow-x:auto}.repository .metas .ui.list .hide{display:none!important}.repository .metas .ui.list .item{padding:0}.repository .metas .ui.list .label.color{padding:0 8px;margin-right:5px}.repository .metas .ui.list a{margin:2px 0}.repository .metas .ui.list a .text{color:#444}.repository .metas .ui.list a .text:hover{color:#000}.repository .header-wrapper{background-color:#FAFAFA;margin-top:-15px;padding-top:15px}.repository .header-wrapper .ui.tabs.divider{border-bottom:none}.repository .header-wrapper .ui.tabular .octicon{margin-right:5px}.repository .filter.menu .label.color{border-radius:3px;margin-left:15px;padding:0 8px}.repository .filter.menu .octicon{float:left;margin:5px -7px 0 -5px;width:16px}.repository .filter.menu .text{margin-left:.9em}.repository .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.repository .filter.menu .dropdown.item{margin:1px;padding-right:0}.repository .select-label .item{max-width:250px;overflow:hidden;text-overflow:ellipsis}.repository .select-label .desc{padding-left:16px}.repository .ui.tabs.container{margin-top:14px;margin-bottom:0}.repository .ui.tabs.container .ui.menu{border-bottom:none}.repository .ui.tabs.divider{margin-top:0;margin-bottom:20px}.repository #clone-panel{width:350px}.repository #clone-panel input{border-radius:0;padding:5px 10px}.repository #clone-panel .clone.button{font-size:13px;padding:0 5px}.repository #clone-panel .clone.button:first-child{border-radius:.28571429rem 0 0 .28571429rem}.repository #clone-panel .icon.button{padding:0 10px}.repository #clone-panel .dropdown .menu{right:0!important;left:auto!important}.repository.file.list .repo-description{display:flex;justify-content:space-between;align-items:center}.repository.file.list #repo-desc{font-size:1.2em}.repository.file.list .choose.reference .header .icon{font-size:1.4em}.repository.file.list .repo-path .divider,.repository.file.list .repo-path .section{display:inline}.repository.file.list #file-buttons{font-weight:400}.repository.file.list #file-buttons .ui.button{padding:8px 10px;font-weight:400}.repository.file.list #repo-files-table thead th{padding-top:8px;padding-bottom:5px;font-weight:400}.repository.file.list #repo-files-table thead th:first-child{display:block;position:relative;width:325%}.repository.file.list #repo-files-table thead .ui.avatar{margin-bottom:5px}.repository.file.list #repo-files-table tbody .octicon{margin-left:3px;margin-right:5px;color:#777}.repository.file.list #repo-files-table tbody .octicon.octicon-mail-reply{margin-right:10px}.repository.file.list #repo-files-table tbody .octicon.octicon-file-directory,.repository.file.list #repo-files-table tbody .octicon.octicon-file-submodule,.repository.file.list #repo-files-table tbody .octicon.octicon-file-symlink-directory{color:#1e70bf}.repository.file.list #repo-files-table td{padding-top:8px;padding-bottom:8px}.repository.file.list #repo-files-table td.message .isSigned{cursor:default}.repository.file.list #repo-files-table tr:hover{background-color:#ffE}.repository.file.list #repo-files-table .jumpable-path{color:#888}.repository.file.list .non-diff-file-content .header .icon{font-size:1em}.repository.file.list .non-diff-file-content .header .file-actions{margin-top:0;margin-bottom:-5px;padding-left:20px}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#767676;vertical-align:middle;background:0 0;border:0;outline:0}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon:hover{color:#4078c0}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon-danger:hover{color:#bd2c00}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon.disabled{color:#bbb;cursor:default}.repository.file.list .non-diff-file-content .header .file-actions #delete-file-form{display:inline-block}.repository.file.list .non-diff-file-content .view-raw{padding:5px}.repository.file.list .non-diff-file-content .view-raw *{max-width:100%}.repository.file.list .non-diff-file-content .view-raw img{padding:5px 5px 0 5px}.repository.file.list .non-diff-file-content .plain-text{padding:1em 2em 1em 2em}.repository.file.list .non-diff-file-content .code-view *{font-size:12px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:20px}.repository.file.list .non-diff-file-content .code-view table{width:100%}.repository.file.list .non-diff-file-content .code-view .lines-num{vertical-align:top;text-align:right;color:#999;background:#f5f5f5;width:1%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}.repository.file.list .non-diff-file-content .code-view .lines-num span{line-height:20px;padding:0 10px;cursor:pointer;display:block}.repository.file.list .non-diff-file-content .code-view .lines-code,.repository.file.list .non-diff-file-content .code-view .lines-num{padding:0}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs,.repository.file.list .non-diff-file-content .code-view .lines-code ol,.repository.file.list .non-diff-file-content .code-view .lines-code pre,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs,.repository.file.list .non-diff-file-content .code-view .lines-num ol,.repository.file.list .non-diff-file-content .code-view .lines-num pre{background-color:#fff;margin:0;padding:0!important}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li,.repository.file.list .non-diff-file-content .code-view .lines-code ol li,.repository.file.list .non-diff-file-content .code-view .lines-code pre li,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li,.repository.file.list .non-diff-file-content .code-view .lines-num ol li,.repository.file.list .non-diff-file-content .code-view .lines-num pre li{display:block;width:100%}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li.active,.repository.file.list .non-diff-file-content .code-view .lines-code ol li.active,.repository.file.list .non-diff-file-content .code-view .lines-code pre li.active,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li.active,.repository.file.list .non-diff-file-content .code-view .lines-num ol li.active,.repository.file.list .non-diff-file-content .code-view .lines-num pre li.active{background:#ffd}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li:before,.repository.file.list .non-diff-file-content .code-view .lines-code ol li:before,.repository.file.list .non-diff-file-content .code-view .lines-code pre li:before,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li:before,.repository.file.list .non-diff-file-content .code-view .lines-num ol li:before,.repository.file.list .non-diff-file-content .code-view .lines-num pre li:before{content:' '}.repository.file.list .non-diff-file-content .code-view .active{background:#ffd}.repository.file.list .sidebar{padding-left:0}.repository.file.list .sidebar .octicon{width:16px}.repository.file.editor .treepath{width:100%}.repository.file.editor .treepath input{vertical-align:middle;box-shadow:rgba(0,0,0,.0745098) 0 1px 2px inset;width:inherit;padding:7px 8px;margin-right:5px}.repository.file.editor .tabular.menu .octicon{margin-right:5px}.repository.file.editor .commit-form-wrapper{padding-left:64px}.repository.file.editor .commit-form-wrapper .commit-avatar{float:left;margin-left:-64px;width:3em;height:auto}.repository.file.editor .commit-form-wrapper .commit-form{position:relative;padding:15px;margin-bottom:10px;border:1px solid #ddd;border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form:after,.repository.file.editor .commit-form-wrapper .commit-form:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.file.editor .commit-form-wrapper .commit-form:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:#fff}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .branch-name{display:inline-block;padding:3px 6px;font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace;color:rgba(0,0,0,.65);background-color:rgba(209,227,237,.45);border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input{position:relative;margin-left:25px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input input{width:240px!important;padding-left:26px!important}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .octicon-git-branch{position:absolute;top:9px;left:10px;color:#b0c4ce}.repository.options #interval{width:100px!important;min-width:100px}.repository.options .danger .item{padding:20px 15px}.repository.options .danger .ui.divider{margin:0}.repository.new.issue .comment.form .comment .avatar{width:3em}.repository.new.issue .comment.form .content{margin-left:4em}.repository.new.issue .comment.form .content:after,.repository.new.issue .comment.form .content:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.new.issue .comment.form .content:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.new.issue .comment.form .content:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.new.issue .comment.form .content:after{border-right-color:#fff}.repository.new.issue .comment.form .content .markdown{font-size:14px}.repository.new.issue .comment.form .metas{min-width:220px}.repository.new.issue .comment.form .metas .filter.menu{max-height:300px;overflow-x:auto}.repository.view.issue .title{padding-bottom:0!important}.repository.view.issue .title h1{font-weight:300;font-size:2.3rem;margin-bottom:5px}.repository.view.issue .title h1 .ui.input{font-size:.5em;vertical-align:top;width:50%;min-width:600px}.repository.view.issue .title h1 .ui.input input{font-size:1.5em;padding:6px 10px}.repository.view.issue .title .index{font-weight:300;color:#aaa;letter-spacing:-1px}.repository.view.issue .title .label{margin-right:10px}.repository.view.issue .title .edit-zone{margin-top:10px}.repository.view.issue .pull-desc code{color:#0166E6}.repository.view.issue .pull.tabular.menu{margin-bottom:10px}.repository.view.issue .pull.tabular.menu .octicon{margin-right:5px}.repository.view.issue .pull.tab.segment{border:none;padding:0;padding-top:10px;box-shadow:none;background-color:inherit}.repository.view.issue .pull .merge.box .avatar{margin-left:10px;margin-top:10px}.repository.view.issue .comment-list:before{display:block;content:"";position:absolute;margin-top:12px;margin-bottom:14px;top:0;bottom:0;left:96px;width:2px;background-color:#f3f3f3;z-index:-1}.repository.view.issue .comment-list .comment .avatar{width:3em}.repository.view.issue .comment-list .comment .tag{color:#767676;margin-top:3px;padding:2px 5px;font-size:12px;border:1px solid rgba(0,0,0,.1);border-radius:3px}.repository.view.issue .comment-list .comment .actions .item{float:left}.repository.view.issue .comment-list .comment .actions .item.tag{margin-right:5px}.repository.view.issue .comment-list .comment .actions .item.action{margin-top:6px;margin-left:10px}.repository.view.issue .comment-list .comment .content{margin-left:4em}.repository.view.issue .comment-list .comment .content>.header{font-weight:400;padding:auto 15px;position:relative;color:#767676;background-color:#f7f7f7;border-bottom:1px solid #eee;border-top-left-radius:3px;border-top-right-radius:3px}.repository.view.issue .comment-list .comment .content>.header:after,.repository.view.issue .comment-list .comment .content>.header:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.view.issue .comment-list .comment .content>.header:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.view.issue .comment-list .comment .content>.header:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.view.issue .comment-list .comment .content>.header .text{max-width:78%;padding-top:10px;padding-bottom:10px}.repository.view.issue .comment-list .comment .content .markdown{font-size:14px}.repository.view.issue .comment-list .comment .content .no-content{color:#767676;font-style:italic}.repository.view.issue .comment-list .comment .content>.bottom.segment{background:#f3f4f5}.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.images::after{clear:both;content:' ';display:block}.repository.view.issue .comment-list .comment .content>.bottom.segment a{display:block;float:left;margin:5px;padding:5px;height:150px;border:solid 1px #eee;border-radius:3px;max-width:150px;background-color:#fff}.repository.view.issue .comment-list .comment .content>.bottom.segment a:before{content:' ';display:inline-block;height:100%;vertical-align:middle}.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.image{max-height:100%;width:auto;margin:0;vertical-align:middle}.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image{font-size:128px;color:#000}.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image:hover{color:#000}.repository.view.issue .comment-list .comment .ui.form .field:first-child{clear:none}.repository.view.issue .comment-list .comment .ui.form .tab.segment{border:none;padding:0;padding-top:10px}.repository.view.issue .comment-list .comment .ui.form textarea{height:200px;font-family:Consolas,monospace}.repository.view.issue .comment-list .comment .edit.buttons{margin-top:10px}.repository.view.issue .comment-list .event{position:relative;margin:15px 0 15px 79px;padding-left:25px}.repository.view.issue .comment-list .event .octicon{width:30px;float:left;text-align:center}.repository.view.issue .comment-list .event .octicon.octicon-circle-slash{margin-top:5px;margin-left:-34.5px;font-size:20px;color:#bd2c00}.repository.view.issue .comment-list .event .octicon.octicon-primitive-dot{margin-left:-28.5px;margin-right:-1px;font-size:30px;color:#6cc644}.repository.view.issue .comment-list .event .octicon.octicon-bookmark{margin-top:3px;margin-left:-31px;margin-right:-1px;font-size:25px}.repository.view.issue .comment-list .event .detail{font-size:.9rem;margin-top:5px;margin-left:35px}.repository.view.issue .comment-list .event .detail .octicon.octicon-git-commit{margin-top:2px}.repository.view.issue .ui.segment.metas{margin-top:-3px}.repository.view.issue .ui.participants img{margin-top:5px;margin-right:5px}.repository .comment.form .ui.comments{margin-top:-12px;max-width:100%}.repository .comment.form .content .field:first-child{clear:none}.repository .comment.form .content .form:after,.repository .comment.form .content .form:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository .comment.form .content .form:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository .comment.form .content .form:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository .comment.form .content .form:after{border-right-color:#fff}.repository .comment.form .content .tab.segment{border:none;padding:0;padding-top:10px}.repository .comment.form .content textarea{height:200px;font-family:Consolas,monospace}.repository .label.list{list-style:none;padding-top:15px}.repository .label.list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .label.list .item a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .label.list .item a:hover{color:#000}.repository .label.list .item a.open-issues{margin-right:30px}.repository .label.list .item .ui.label{font-size:1em}.repository .milestone.list{list-style:none;padding-top:15px}.repository .milestone.list>.item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .milestone.list>.item>a{padding-top:5px;padding-right:10px;color:#000}.repository .milestone.list>.item>a:hover{color:#4078c0}.repository .milestone.list>.item .ui.progress{width:40%;padding:0;border:0;margin:0}.repository .milestone.list>.item .ui.progress .bar{height:20px}.repository .milestone.list>.item .meta{color:#999;padding-top:5px}.repository .milestone.list>.item .meta .issue-stats .octicon{padding-left:5px}.repository .milestone.list>.item .meta .overdue{color:red}.repository .milestone.list>.item .operate{margin-top:-15px}.repository .milestone.list>.item .operate>a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .milestone.list>.item .operate>a:hover{color:#000}.repository .milestone.list>.item .content{padding-top:10px}.repository.new.milestone textarea{height:200px}.repository.new.milestone #deadline{width:150px}.repository.compare.pull .choose.branch .octicon{padding-right:10px}.repository.compare.pull .comment.form .content:after,.repository.compare.pull .comment.form .content:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.compare.pull .comment.form .content:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.compare.pull .comment.form .content:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.compare.pull .comment.form .content:after{border-right-color:#fff}.repository .filter.dropdown .menu{margin-top:1px!important}.repository.commits .header .search input{font-weight:400;padding:5px 10px}.repository #commits-table thead th:first-of-type{padding-left:15px}.repository #commits-table thead .sha{width:140px}.repository #commits-table thead .shatd{text-align:center}.repository #commits-table td.sha .sha.label{margin:0}.repository #commits-table.ui.basic.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,0,.02)!important}.repository #commits-table td.sha .sha.label.isSigned,.repository #repo-files-table .sha.label.isSigned{border:1px solid #BBB}.repository #commits-table td.sha .sha.label.isSigned .detail.icon,.repository #repo-files-table .sha.label.isSigned .detail.icon{background:#FAFAFA;margin:-6px -10px -4px 0;padding:5px 3px 5px 6px;border-left:1px solid #BBB;border-top-left-radius:0;border-bottom-left-radius:0}.repository #commits-table td.sha .sha.label.isSigned.isVerified,.repository #repo-files-table .sha.label.isSigned.isVerified{border:1px solid #21BA45;background:#21BA4518}.repository #commits-table td.sha .sha.label.isSigned.isVerified .detail.icon,.repository #repo-files-table .sha.label.isSigned.isVerified .detail.icon{border-left:1px solid #21BA4580}.repository .diff-detail-box{margin:15px 0;line-height:30px}.repository .diff-detail-box ol{clear:both;padding-left:0;margin-top:5px;margin-bottom:28px}.repository .diff-detail-box ol li{list-style:none;padding-bottom:4px;margin-bottom:4px;border-bottom:1px dashed #DDD;padding-left:6px}.repository .diff-detail-box span.status{display:inline-block;width:12px;height:12px;margin-right:8px;vertical-align:middle}.repository .diff-detail-box span.status.modify{background-color:#f0db88}.repository .diff-detail-box span.status.add{background-color:#b4e2b4}.repository .diff-detail-box span.status.del{background-color:#e9aeae}.repository .diff-detail-box span.status.rename{background-color:#dad8ff}.repository .diff-detail-box .ui.right{margin-bottom:15px}.repository .diff-box .header{display:flex;align-items:center}.repository .diff-box .header .count{margin-right:12px;font-size:13px;flex:0 0 auto}.repository .diff-box .header .count .bar{background-color:#bd2c00;height:12px;width:40px;display:inline-block;margin:2px 4px 0 4px;vertical-align:text-top}.repository .diff-box .header .count .bar .add{background-color:#55a532;height:12px}.repository .diff-box .header .file{flex:1;color:#888;word-break:break-all}.repository .diff-box .header .button{margin:-5px 0 -5px 12px;padding:8px 10px;flex:0 0 auto}.repository .diff-file-box .header{background-color:#f7f7f7}.repository .diff-file-box .file-body.file-code .lines-num{text-align:right;color:#A7A7A7;background:#fafafa;width:1%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;vertical-align:top}.repository .diff-file-box .file-body.file-code .lines-num span.fold{display:block;text-align:center}.repository .diff-file-box .file-body.file-code .lines-num-old{border-right:1px solid #DDD}.repository .diff-file-box .code-diff{font-size:12px}.repository .diff-file-box .code-diff td{padding:0;padding-left:10px;border-top:none}.repository .diff-file-box .code-diff pre{margin:0}.repository .diff-file-box .code-diff .lines-num{border-color:#d4d4d5;border-right-width:1px;border-right-style:solid;padding:0 5px}.repository .diff-file-box .code-diff tbody tr td.halfwidth{width:49%}.repository .diff-file-box .code-diff tbody tr td.tag-code,.repository .diff-file-box .code-diff tbody tr.tag-code td{background-color:#F0F0F0!important;border-color:#D2CECE!important;padding-top:8px;padding-bottom:8px}.repository .diff-file-box .code-diff tbody tr .removed-code{background-color:#f99}.repository .diff-file-box .code-diff tbody tr .added-code{background-color:#9f9}.repository .diff-file-box .code-diff-unified tbody tr.del-code td{background-color:#ffe0e0!important;border-color:#f1c0c0!important}.repository .diff-file-box .code-diff-unified tbody tr.add-code td{background-color:#d6fcd6!important;border-color:#c1e9c1!important}.repository .diff-file-box .code-diff-split table,.repository .diff-file-box .code-diff-split tbody{width:100%}.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(2),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(4){background-color:#fafafa}.repository .diff-file-box .code-diff-split tbody tr td.del-code,.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(2){background-color:#ffe0e0!important;border-color:#f1c0c0!important}.repository .diff-file-box .code-diff-split tbody tr td.add-code,.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(4){background-color:#d6fcd6!important;border-color:#c1e9c1!important}.repository .diff-file-box .code-diff-split tbody tr td:nth-child(3){border-left-width:1px;border-left-style:solid}.repository .diff-file-box.file-content{clear:right}.repository .diff-file-box.file-content img{max-width:100%;padding:5px 5px 0 5px}.repository .code-view{overflow:auto;overflow-x:auto;overflow-y:hidden}.repository .repo-search-result{padding-top:10px;padding-bottom:10px}.repository .repo-search-result .lines-num a{color:inherit}.repository.quickstart .guide .item{padding:1em}.repository.quickstart .guide .item small{font-weight:400}.repository.quickstart .guide .clone.button:first-child{border-radius:.28571429rem 0 0 .28571429rem}.repository.quickstart .guide .ui.action.small.input{width:100%}.repository.quickstart .guide #repo-clone-url{border-radius:0;padding:5px 10px;font-size:1.2em}.repository.release #release-list{border-top:1px solid #DDD;margin-top:20px;padding-top:15px}.repository.release #release-list>li{list-style:none}.repository.release #release-list>li .detail,.repository.release #release-list>li .meta{padding-top:30px;padding-bottom:40px}.repository.release #release-list>li .meta{text-align:right;position:relative}.repository.release #release-list>li .meta .tag:not(.icon){display:block;margin-top:15px}.repository.release #release-list>li .meta .commit{display:block;margin-top:10px}.repository.release #release-list>li .detail{border-left:1px solid #DDD}.repository.release #release-list>li .detail .author img{margin-bottom:-3px}.repository.release #release-list>li .detail .download{margin-top:20px}.repository.release #release-list>li .detail .download>a .octicon{margin-left:5px;margin-right:5px}.repository.release #release-list>li .detail .download .list{padding-left:0;border-top:1px solid #eee}.repository.release #release-list>li .detail .download .list li{list-style:none;display:block;padding-top:8px;padding-bottom:8px;border-bottom:1px solid #eee}.repository.release #release-list>li .detail .dot{width:9px;height:9px;background-color:#ccc;z-index:999;position:absolute;display:block;left:-5px;top:40px;border-radius:6px;border:1px solid #FFF}.repository.new.release .target{min-width:500px}.repository.new.release .target #tag-name{margin-top:-4px}.repository.new.release .target .at{margin-left:-5px;margin-right:5px}.repository.new.release .target .dropdown.icon{margin:0;padding-top:3px}.repository.new.release .target .selection.dropdown{padding-top:10px;padding-bottom:10px}.repository.new.release .prerelease.field{margin-bottom:0}.repository.forks .list{margin-top:0}.repository.forks .list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px solid #DDD}.repository.forks .list .item .ui.avatar{float:left;margin-right:5px}.repository.forks .list .item .link{padding-top:5px}.repository.wiki.start .ui.segment{padding-top:70px;padding-bottom:100px}.repository.wiki.start .ui.segment .mega-octicon{font-size:48px}.repository.wiki.new .CodeMirror .CodeMirror-code{font-family:Consolas,monospace}.repository.wiki.new .CodeMirror .CodeMirror-code .cm-comment{background:inherit}.repository.wiki.new .editor-preview{background-color:#fff}.repository.wiki.view .choose.page{margin-top:-5px}.repository.wiki.view .ui.sub.header{text-transform:none}.repository.wiki.view>.markdown{padding:15px 30px}.repository.wiki.view>.markdown h1:first-of-type,.repository.wiki.view>.markdown h2:first-of-type,.repository.wiki.view>.markdown h3:first-of-type,.repository.wiki.view>.markdown h4:first-of-type,.repository.wiki.view>.markdown h5:first-of-type,.repository.wiki.view>.markdown h6:first-of-type{margin-top:0}@media only screen and (max-width:767px){.repository.wiki .dividing.header .stackable.grid .button{margin-top:2px;margin-bottom:2px}}.repository.settings.collaboration .collaborator.list{padding:0}.repository.settings.collaboration .collaborator.list>.item{margin:0;line-height:2em}.repository.settings.collaboration .collaborator.list>.item:not(:last-child){border-bottom:1px solid #DDD}.repository.settings.collaboration #repo-collab-form #search-user-box .results{left:7px}.repository.settings.collaboration #repo-collab-form .ui.button{margin-left:5px;margin-top:-3px}.repository.settings.branches .protected-branches .selection.dropdown{width:300px}.repository.settings.branches .protected-branches .item{border:1px solid #eaeaea;padding:10px 15px}.repository.settings.branches .protected-branches .item:not(:last-child){border-bottom:0}.repository.settings.branches .branch-protection .help{margin-left:26px;padding-top:0}.repository.settings.branches .branch-protection .fields{margin-left:20px;display:block}.repository.settings.branches .branch-protection .whitelist{margin-left:26px}.repository.settings.branches .branch-protection .whitelist .dropdown img{display:inline-block}.repository.settings.webhook .events .column{padding-bottom:0}.repository.settings.webhook .events .help{font-size:13px;margin-left:26px;padding-top:0}.repository .ui.attached.isSigned.isVerified:not(.positive){border-left:1px solid #A3C293;border-right:1px solid #A3C293}.repository .ui.attached.isSigned.isVerified.top:not(.positive){border-top:1px solid #A3C293}.repository .ui.attached.isSigned.isVerified:not(.positive):last-child{border-bottom:1px solid #A3C293}.repository .ui.segment.sub-menu{padding:7px;line-height:0}.repository .ui.segment.sub-menu .list{width:100%;display:flex}.repository .ui.segment.sub-menu .list .item{width:100%;border-radius:3px}.repository .ui.segment.sub-menu .list .item a{color:#000}.repository .ui.segment.sub-menu .list .item a:hover{color:#666}.repository .ui.segment.sub-menu .list .item.active{background:rgba(0,0,0,.05)}.repository .segment.reactions.dropdown .menu,.repository .select-reaction.dropdown .menu{right:0!important;left:auto!important}.repository .segment.reactions.dropdown .menu>.header,.repository .select-reaction.dropdown .menu>.header{margin:.75rem 0 .5rem}.repository .segment.reactions.dropdown .menu>.item,.repository .select-reaction.dropdown .menu>.item{float:left;padding:.5rem .5rem!important}.repository .segment.reactions.dropdown .menu>.item img.emoji,.repository .select-reaction.dropdown .menu>.item img.emoji{margin-right:0}.repository .segment.reactions{padding:.3em 1em}.repository .segment.reactions .ui.label{padding:.4em}.repository .segment.reactions .ui.label.disabled{cursor:default}.repository .segment.reactions .ui.label>img{height:1.5em!important}.repository .segment.reactions .select-reaction{float:none}.repository .segment.reactions .select-reaction:not(.active) a{display:none}.repository .segment.reactions:hover .select-reaction a{display:block}.user-cards .list{padding:0}.user-cards .list .item{list-style:none;width:32%;margin:10px 10px 10px 0;padding-bottom:14px;float:left}.user-cards .list .item .avatar{width:48px;height:48px;float:left;display:block;margin-right:10px}.user-cards .list .item .name{margin-top:0;margin-bottom:0;font-weight:400}.user-cards .list .item .meta{margin-top:5px}#search-repo-box .results .result .image,#search-user-box .results .result .image{float:left;margin-right:8px;width:2em;height:2em}#search-repo-box .results .result .content,#search-user-box .results .result .content{margin:6px 0}#issue-actions{display:none}.issue.list{list-style:none;padding-top:15px}.issue.list>.item{padding-top:15px;padding-bottom:10px;border-bottom:1px dashed #AAA}.issue.list>.item .title{color:#444;font-size:15px;font-weight:700;margin:0 6px}.issue.list>.item .title:hover{color:#000}.issue.list>.item .comment{padding-right:10px;color:#666}.issue.list>.item .desc{padding-top:5px;color:#999}.issue.list>.item .desc .checklist{padding-left:5px}.issue.list>.item .desc .checklist .progress-bar{margin-left:2px;width:80px;height:6px;display:inline-block;background-color:#eee;overflow:hidden;border-radius:3px;vertical-align:2px!important}.issue.list>.item .desc .checklist .progress-bar .progress{background-color:#ccc;display:block;height:100%}.issue.list>.item .desc a.milestone{padding-left:5px;color:#999!important}.issue.list>.item .desc a.milestone:hover{color:#000!important}.issue.list>.item .desc .assignee{margin-top:-5px;margin-right:5px}.issue.list>.item .desc .overdue{color:red}.page.buttons{padding-top:15px}.ui.form .dropzone{width:100%;margin-bottom:10px;border:2px dashed #0087F7;box-shadow:none!important}.ui.form .dropzone .dz-error-message{top:140px}.settings .content{margin-top:2px}.settings .content .segment,.settings .content>.header{box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.settings .list>.item .green{color:#21BA45!important}.settings .list>.item:not(:first-child){border-top:1px solid #eaeaea;padding:1rem;margin:15px -1rem -1rem -1rem}.settings .list>.item>.mega-octicon{display:table-cell}.settings .list>.item>.mega-octicon+.content{display:table-cell;padding:0 0 0 .5em;vertical-align:top}.settings .list>.item .info{margin-top:10px}.settings .list>.item .info .tab.segment{border:none;padding:10px 0 0}.settings .list.key .meta{padding-top:5px;color:#666}.settings .list.email>.item:not(:first-child){min-height:60px}.settings .list.collaborator>.item{padding:0}.ui.vertical.menu .header.item{font-size:1.1em;background:#f0f0f0}.edit-label.modal .form .column,.new-label.segment .form .column{padding-right:0}.edit-label.modal .form .buttons,.new-label.segment .form .buttons{margin-left:auto;padding-top:15px}.edit-label.modal .form .color.picker.column,.new-label.segment .form .color.picker.column{width:auto}.edit-label.modal .form .color.picker.column .color-picker,.new-label.segment .form .color.picker.column .color-picker{height:35px;width:auto;padding-left:30px}.edit-label.modal .form .minicolors-swatch.minicolors-sprite,.new-label.segment .form .minicolors-swatch.minicolors-sprite{top:10px;left:10px;width:15px;height:15px}.edit-label.modal .form .precolors,.new-label.segment .form .precolors{padding-left:0;padding-right:0;margin:3px 10px auto 10px;width:120px}.edit-label.modal .form .precolors .color,.new-label.segment .form .precolors .color{float:left;width:15px;height:15px}#avatar-arrow:after,#avatar-arrow:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}#avatar-arrow:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}#avatar-arrow:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}#delete-repo-modal .ui.message,#transfer-repo-modal .ui.message{width:100%!important}.tab-size-1{tab-size:1!important;-moz-tab-size:1!important}.tab-size-2{tab-size:2!important;-moz-tab-size:2!important}.tab-size-3{tab-size:3!important;-moz-tab-size:3!important}.tab-size-4{tab-size:4!important;-moz-tab-size:4!important}.tab-size-5{tab-size:5!important;-moz-tab-size:5!important}.tab-size-6{tab-size:6!important;-moz-tab-size:6!important}.tab-size-7{tab-size:7!important;-moz-tab-size:7!important}.tab-size-8{tab-size:8!important;-moz-tab-size:8!important}.tab-size-9{tab-size:9!important;-moz-tab-size:9!important}.tab-size-10{tab-size:10!important;-moz-tab-size:10!important}.tab-size-11{tab-size:11!important;-moz-tab-size:11!important}.tab-size-12{tab-size:12!important;-moz-tab-size:12!important}.tab-size-13{tab-size:13!important;-moz-tab-size:13!important}.tab-size-14{tab-size:14!important;-moz-tab-size:14!important}.tab-size-15{tab-size:15!important;-moz-tab-size:15!important}.tab-size-16{tab-size:16!important;-moz-tab-size:16!important}.stats-table{display:table;width:100%}.stats-table .table-cell{display:table-cell}.stats-table .table-cell.tiny{height:.5em}tbody.commit-list{vertical-align:baseline}.commit-body{white-space:pre-wrap}@media only screen and (max-width:767px){.ui.stackable.menu.mobile--margin-between-items>.item{margin-top:5px;margin-bottom:5px}.ui.stackable.menu.mobile--no-negative-margins{margin-left:0;margin-right:0}}#topic_edit{margin-top:5px;display:none}#repo-topic{margin-top:5px}.CodeMirror{font:14px Consolas,"Liberation Mono",Menlo,Courier,monospace}.CodeMirror.cm-s-default{border-radius:3px;padding:0!important}.CodeMirror .cm-comment{background:inherit!important}.repository.file.editor .tab[data-tab=write]{padding:0!important}.repository.file.editor .tab[data-tab=write] .editor-toolbar{border:none!important}.repository.file.editor .tab[data-tab=write] .CodeMirror{border-left:none;border-right:none;border-bottom:none}.organization{padding-top:15px;padding-bottom:80px}.organization .head .ui.header .text{vertical-align:middle;font-size:1.6rem;margin-left:15px}.organization .head .ui.header .ui.right{margin-top:5px}.organization.new.org form{margin:auto}.organization.new.org form .ui.message{text-align:center}@media only screen and (min-width:768px){.organization.new.org form{width:800px!important}.organization.new.org form .header{padding-left:280px!important}.organization.new.org form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.organization.new.org form .help{margin-left:265px!important}.organization.new.org form .optional .title{margin-left:250px!important}.organization.new.org form input,.organization.new.org form textarea{width:50%!important}}@media only screen and (max-width:767px){.organization.new.org form .optional .title{margin-left:15px}.organization.new.org form .inline.field>label{display:block}}.organization.new.org form .header{padding-left:0!important;text-align:center}.organization.options input{min-width:300px}.organization.profile #org-avatar{width:100px;height:100px;margin-right:15px}.organization.profile #org-info .ui.header{font-size:36px;margin-bottom:0}.organization.profile #org-info .desc{font-size:16px;margin-bottom:10px}.organization.profile #org-info .meta .item{display:inline-block;margin-right:10px}.organization.profile #org-info .meta .item .icon{margin-right:5px}.organization.profile .ui.top.header .ui.right{margin-top:0}.organization.profile .teams .item{padding:10px 15px}.organization.profile .members .ui.avatar,.organization.teams .members .ui.avatar{width:48px;height:48px;margin-right:5px}.organization.invite #invite-box{margin:auto;margin-top:50px;width:500px!important}.organization.invite #invite-box #search-user-box input{margin-left:0;width:300px}.organization.invite #invite-box .ui.button{margin-left:5px;margin-top:-3px}.organization.members .list .item{margin-left:0;margin-right:0;border-bottom:1px solid #eee}.organization.members .list .item .ui.avatar{width:48px;height:48px}.organization.members .list .item .meta{line-height:24px}.organization.teams .detail .item{padding:10px 15px}.organization.teams .detail .item:not(:last-child){border-bottom:1px solid #eee}.organization.teams .members .item,.organization.teams .repositories .item{padding:10px 20px;line-height:32px}.organization.teams .members .item:not(:last-child),.organization.teams .repositories .item:not(:last-child){border-bottom:1px solid #DDD}.organization.teams .members .item .button,.organization.teams .repositories .item .button{padding:9px 10px}.organization.teams #add-member-form input,.organization.teams #add-repo-form input{margin-left:0}.organization.teams #add-member-form .ui.button,.organization.teams #add-repo-form .ui.button{margin-left:5px;margin-top:-3px}.user:not(.icon){padding-top:15px;padding-bottom:80px}.user.profile .ui.card .username{display:block}.user.profile .ui.card .extra.content{padding:0}.user.profile .ui.card .extra.content ul{margin:0;padding:0}.user.profile .ui.card .extra.content ul li{padding:10px;list-style:none}.user.profile .ui.card .extra.content ul li:not(:last-child){border-bottom:1px solid #eaeaea}.user.profile .ui.card .extra.content ul li .octicon{margin-left:1px;margin-right:5px}.user.profile .ui.card .extra.content ul li.follow .ui.button{width:100%}.user.profile .ui.repository.list{margin-top:25px}.user.followers .header.name{font-size:20px;line-height:24px;vertical-align:middle}.user.followers .follow .ui.button{padding:8px 15px}.user.notification .octicon{float:left;font-size:2em}.user.notification .content{float:left;margin-left:7px}.user.notification table form{display:inline-block}.user.notification table button{padding:3px 3px 3px 5px}.user.notification table tr{cursor:pointer}.user.notification .octicon.green{color:#21ba45}.user.notification .octicon.red{color:#d01919}.user.notification .octicon.purple{color:#a333c8}.user.notification .octicon.blue{color:#2185d0}.user.link-account:not(.icon){padding-top:15px;padding-bottom:5px}.user.settings .iconFloat{float:left}.dashboard{padding-top:15px;padding-bottom:80px}.dashboard.feeds .context.user.menu,.dashboard.issues .context.user.menu{z-index:101;min-width:200px}.dashboard.feeds .context.user.menu .ui.header,.dashboard.issues .context.user.menu .ui.header{font-size:1rem;text-transform:none}.dashboard.feeds .filter.menu .item,.dashboard.issues .filter.menu .item{text-align:left}.dashboard.feeds .filter.menu .item .text,.dashboard.issues .filter.menu .item .text{height:16px;vertical-align:middle}.dashboard.feeds .filter.menu .item .text.truncate,.dashboard.issues .filter.menu .item .text.truncate{width:85%}.dashboard.feeds .filter.menu .item .floating.label,.dashboard.issues .filter.menu .item .floating.label{top:7px;left:90%;width:15%}.dashboard.feeds .filter.menu .jump.item,.dashboard.issues .filter.menu .jump.item{margin:1px;padding-right:0}.dashboard.feeds .filter.menu .menu,.dashboard.issues .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.dashboard.feeds .right.stackable.menu>.item.active,.dashboard.issues .right.stackable.menu>.item.active{color:#d9453d}.dashboard .dashboard-repos{margin:0 1px}.feeds .news>.ui.grid{margin-left:auto;margin-right:auto}.feeds .news .ui.avatar{margin-top:13px}.feeds .news p{line-height:1em}.feeds .news .time-since{font-size:13px}.feeds .news .issue.title{width:80%}.feeds .news .push.news .content ul{font-size:13px;list-style:none;padding-left:10px}.feeds .news .push.news .content ul img{margin-bottom:-2px}.feeds .news .push.news .content ul .text.truncate{width:80%;margin-bottom:-5px}.feeds .news .commit-id{font-family:Consolas,monospace}.feeds .news code{padding:1px;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px;word-break:break-all}.feeds .list .header .ui.label{margin-top:-4px;padding:4px 5px;font-weight:400}.feeds .list .header .plus.icon{margin-top:5px}.feeds .list ul{list-style:none;margin:0;padding-left:0}.feeds .list ul li:not(:last-child){border-bottom:1px solid #EAEAEA}.feeds .list ul li.private{background-color:#fcf8e9}.feeds .list ul li a{padding:6px 1.2em;display:block}.feeds .list ul li a .octicon{color:#888}.feeds .list ul li a .octicon.rear{font-size:15px}.feeds .list ul li a .star-num{font-size:12px}.feeds .list .repo-owner-name-list .item-name{max-width:70%;margin-bottom:-4px}.feeds .list #collaborative-repo-list .owner-and-repo{max-width:80%;margin-bottom:-5px}.feeds .list #collaborative-repo-list .owner-name{max-width:120px;margin-bottom:-5px}.admin{padding-top:15px;padding-bottom:80px}.admin .table.segment{padding:0;font-size:13px}.admin .table.segment:not(.striped){padding-top:5px}.admin .table.segment:not(.striped) thead th:last-child{padding-right:5px!important}.admin .table.segment th{padding-top:5px;padding-bottom:5px}.admin .table.segment:not(.select) td:first-of-type,.admin .table.segment:not(.select) th:first-of-type{padding-left:15px!important}.admin .ui.header,.admin .ui.segment{box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.admin.user .email{max-width:200px}.admin dl.admin-dl-horizontal{padding:20px;margin:0}.admin dl.admin-dl-horizontal dd{margin-left:275px}.admin dl.admin-dl-horizontal dt{font-weight:bolder;float:left;width:285px;clear:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin.config #test-mail-btn{margin-left:5px}.explore{padding-top:15px;padding-bottom:80px}.explore .navbar{justify-content:center;padding-top:15px!important;margin-top:-15px!important;margin-bottom:15px!important;background-color:#FAFAFA!important;border-width:1px!important}.explore .navbar .octicon{width:16px;text-align:center;margin-right:5px}.ui.repository.list .item{padding-bottom:25px}.ui.repository.list .item:not(:first-child){border-top:1px solid #eee;padding-top:25px}.ui.repository.list .item .ui.header{font-size:1.5rem;padding-bottom:10px}.ui.repository.list .item .ui.header .name{word-break:break-all}.ui.repository.list .item .ui.header .metas{color:#888;font-size:14px;font-weight:400}.ui.repository.list .item .ui.header .metas span:not(:last-child){margin-right:5px}.ui.repository.list .item .time{font-size:12px;color:grey}.ui.repository.branches .time{font-size:12px;color:grey}.ui.user.list .item{padding-bottom:25px}.ui.user.list .item:not(:first-child){border-top:1px solid #eee;padding-top:25px}.ui.user.list .item .ui.avatar.image{width:40px;height:40px}.ui.user.list .item .description{margin-top:5px}.ui.user.list .item .description .octicon:not(:first-child){margin-left:5px}.ui.user.list .item .description a{color:#333}.ui.user.list .item .description a:hover{text-decoration:underline} \ No newline at end of file +.tribute-container{box-shadow:0 1px 3px 1px #c7c7c7}.tribute-container ul{background:#fff}.tribute-container li{padding:8px 12px;border-bottom:1px solid #dcdcdc}.tribute-container li img{display:inline-block;vertical-align:middle;width:28px;height:28px;margin-right:5px}.tribute-container li span.fullname{font-weight:400;font-size:.8rem;margin-left:3px}.tribute-container li.highlight,.tribute-container li:hover{background:#2185D0;color:#fff}.emoji{width:1.5em;height:1.5em;display:inline-block;background-size:contain}body{font-family:Lato,"Segoe UI","Microsoft YaHei",Arial,Helvetica,sans-serif!important;background-color:#fff;overflow-y:scroll;-webkit-font-smoothing:antialiased}img{border-radius:3px}.rounded{border-radius:.28571429rem!important}code,pre{font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace}code.raw,pre.raw{padding:7px 12px;margin:10px 0;background-color:#f8f8f8;border:1px solid #ddd;border-radius:3px;font-size:13px;line-height:1.5;overflow:auto}code.wrap,pre.wrap{white-space:pre-wrap;-ms-word-break:break-all;word-break:break-all;overflow-wrap:break-word;word-wrap:break-word}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.full.height{padding:0;margin:0 0 -40px 0;min-height:100%}.following.bar{z-index:900;left:0;width:100%;margin:0}.following.bar.light{background-color:#fff;border-bottom:1px solid #DDD;box-shadow:0 2px 3px rgba(0,0,0,.04)}.following.bar .column .menu{margin-top:0}.following.bar .top.menu a.item.brand{padding-left:0}.following.bar .brand .ui.mini.image{width:30px}.following.bar .top.menu .dropdown.item.active,.following.bar .top.menu .dropdown.item:hover,.following.bar .top.menu a.item:hover{background-color:transparent}.following.bar .top.menu a.item:hover{color:rgba(0,0,0,.45)}.following.bar .top.menu .menu{z-index:900}.following.bar .octicon{margin-right:.75em}.following.bar .octicon.fitted{margin-right:0}.following.bar .searchbox{background-color:#f4f4f4!important}.following.bar .searchbox:focus{background-color:#e9e9e9!important}.following.bar .text .octicon{width:16px;text-align:center}@media only screen and (max-width:767px){.following.bar #navbar:not(.shown)>:not(:first-child){display:none}}.right.stackable.menu{margin-left:auto;display:flex;display:-ms-flexbox;-ms-flex-align:inherit;align-items:inherit;-ms-flex-direction:inherit;flex-direction:inherit}.ui.left{float:left}.ui.right{float:right}.ui.button,.ui.menu .item{-moz-user-select:auto;-ms-user-select:auto;-webkit-user-select:auto;user-select:auto}.ui.container.fluid.padded{padding:0 10px 0 10px}.ui.form .ui.button{font-weight:400}.ui.floating.label{z-index:10}.ui.menu,.ui.segment,.ui.vertical.menu{box-shadow:none}.ui .menu:not(.vertical) .item>.button.compact{padding:.58928571em 1.125em}.ui .menu:not(.vertical) .item>.button.small{font-size:.92857143rem}.ui.dropdown .menu>.item>.floating.label{z-index:11}.ui.dropdown .menu .menu>.item>.floating.label{z-index:21}.ui .text.red{color:#d95c5c!important}.ui .text.red a{color:#d95c5c!important}.ui .text.red a:hover{color:#E67777!important}.ui .text.blue{color:#428bca!important}.ui .text.blue a{color:#15c!important}.ui .text.blue a:hover{color:#428bca!important}.ui .text.black{color:#444}.ui .text.black:hover{color:#000}.ui .text.grey{color:#767676!important}.ui .text.grey a{color:#444!important}.ui .text.grey a:hover{color:#000!important}.ui .text.light.grey{color:#888!important}.ui .text.green{color:#6cc644!important}.ui .text.purple{color:#6e5494!important}.ui .text.yellow{color:#FBBD08!important}.ui .text.gold{color:#a1882b!important}.ui .text.left{text-align:left!important}.ui .text.right{text-align:right!important}.ui .text.small{font-size:.75em}.ui .text.normal{font-weight:400}.ui .text.bold{font-weight:700}.ui .text.italic{font-style:italic}.ui .text.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.ui .text.thin{font-weight:400}.ui .text.middle{vertical-align:middle}.ui .message{text-align:center}.ui .header>i+.content{padding-left:.75rem;vertical-align:middle}.ui .warning.header{background-color:#F9EDBE!important;border-color:#F0C36D}.ui .warning.segment{border-color:#F0C36D}.ui .info.segment{border:1px solid #c5d5dd}.ui .info.segment.top{background-color:#e6f1f6!important}.ui .info.segment.top h3,.ui .info.segment.top h4{margin-top:0}.ui .info.segment.top h3:last-child{margin-top:4px}.ui .info.segment.top>:last-child{margin-bottom:0}.ui .normal.header{font-weight:400}.ui .avatar.image{border-radius:3px}.ui .form .fake{display:none!important}.ui .form .sub.field{margin-left:25px}.ui .sha.label{font-family:Consolas,Menlo,Monaco,"Lucida Console",monospace;font-size:13px;padding:6px 10px 4px 10px;font-weight:400;margin:0 6px}.ui.status.buttons .octicon{margin-right:4px}.ui.inline.delete-button{padding:8px 15px;font-weight:400}.ui .background.red{background-color:#d95c5c!important}.ui .background.blue{background-color:#428bca!important}.ui .background.black{background-color:#444}.ui .background.grey{background-color:#767676!important}.ui .background.light.grey{background-color:#888!important}.ui .background.green{background-color:#6cc644!important}.ui .background.purple{background-color:#6e5494!important}.ui .background.yellow{background-color:#FBBD08!important}.ui .background.gold{background-color:#a1882b!important}.ui .branch-tag-choice{line-height:20px}.overflow.menu .items{max-height:300px;overflow-y:auto}.overflow.menu .items .item{position:relative;cursor:pointer;display:block;border:none;height:auto;border-top:none;line-height:1em;color:rgba(0,0,0,.8);padding:.71428571em 1.14285714em!important;font-size:1rem;text-transform:none;font-weight:400;box-shadow:none;-webkit-touch-callout:none}.overflow.menu .items .item.active{font-weight:700}.overflow.menu .items .item:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.8);z-index:13}.scrolling.menu .item.selected{font-weight:700!important}footer{height:40px;background-color:#fff;border-top:1px solid #d6d6d6;clear:both;width:100%;color:#888}footer .container{padding-top:10px}footer .container .fa{width:16px;text-align:center;color:#428bca}footer .container .links>*{border-left:1px solid #d6d6d6;padding-left:8px;margin-left:5px}footer .container .links>:first-child{border-left:none}footer .ui.language .menu{max-height:500px;overflow-y:auto;margin-bottom:7px}.hide{display:none}.center{text-align:center}.img-1{width:2px!important;height:2px!important}.img-2{width:4px!important;height:4px!important}.img-3{width:6px!important;height:6px!important}.img-4{width:8px!important;height:8px!important}.img-5{width:10px!important;height:10px!important}.img-6{width:12px!important;height:12px!important}.img-7{width:14px!important;height:14px!important}.img-8{width:16px!important;height:16px!important}.img-9{width:18px!important;height:18px!important}.img-10{width:20px!important;height:20px!important}.img-11{width:22px!important;height:22px!important}.img-12{width:24px!important;height:24px!important}.img-13{width:26px!important;height:26px!important}.img-14{width:28px!important;height:28px!important}.img-15{width:30px!important;height:30px!important}.img-16{width:32px!important;height:32px!important}@media only screen and (min-width:768px){.mobile-only,.ui.button.mobile-only{display:none}.sr-mobile-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}}@media only screen and (max-width:767px){.not-mobile{display:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}@media only screen and (max-width:991px) and (min-width:768px){.ui.container{width:95%}}.hljs{background:inherit!important;padding:0!important}.ui.menu.new-menu{justify-content:center!important;padding-top:15px!important;margin-top:-15px!important;margin-bottom:15px!important;background-color:#FAFAFA!important;border-width:1px!important}@media only screen and (max-width:1200px){.ui.menu.new-menu{overflow-x:auto!important;justify-content:left!important;padding-bottom:5px}.ui.menu.new-menu::-webkit-scrollbar{height:8px;display:none}.ui.menu.new-menu:hover::-webkit-scrollbar{display:block}.ui.menu.new-menu::-webkit-scrollbar-track{background:rgba(0,0,0,.01)}.ui.menu.new-menu::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2)}.ui.menu.new-menu:after{position:absolute;margin-top:-15px;display:block;background-image:linear-gradient(to right,rgba(255,255,255,0),#fff 100%);content:' ';right:0;height:53px;z-index:1000;width:60px;clear:none;visibility:visible}.ui.menu.new-menu a.item:last-child{padding-right:30px!important}}[v-cloak]{display:none!important}.repos-search{padding-bottom:0!important}.repos-filter{margin-top:0!important;border-bottom-width:0!important;margin-bottom:2px!important}.markdown:not(code){overflow:hidden;font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6!important;word-wrap:break-word}.markdown:not(code).ui.segment{padding:3em}.markdown:not(code).file-view{padding:2em 2em 2em!important}.markdown:not(code)>:first-child{margin-top:0!important}.markdown:not(code)>:last-child{margin-bottom:0!important}.markdown:not(code) a:not([href]){color:inherit;text-decoration:none}.markdown:not(code) .absent{color:#c00}.markdown:not(code) .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown:not(code) .anchor:focus{outline:0}.markdown:not(code) h1,.markdown:not(code) h2,.markdown:not(code) h3,.markdown:not(code) h4,.markdown:not(code) h5,.markdown:not(code) h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown:not(code) h1:first-of-type,.markdown:not(code) h2:first-of-type,.markdown:not(code) h3:first-of-type,.markdown:not(code) h4:first-of-type,.markdown:not(code) h5:first-of-type,.markdown:not(code) h6:first-of-type{margin-top:0!important}.markdown:not(code) h1 .octicon-link,.markdown:not(code) h2 .octicon-link,.markdown:not(code) h3 .octicon-link,.markdown:not(code) h4 .octicon-link,.markdown:not(code) h5 .octicon-link,.markdown:not(code) h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown:not(code) h1:hover .anchor,.markdown:not(code) h2:hover .anchor,.markdown:not(code) h3:hover .anchor,.markdown:not(code) h4:hover .anchor,.markdown:not(code) h5:hover .anchor,.markdown:not(code) h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown:not(code) h1:hover .anchor .octicon-link,.markdown:not(code) h2:hover .anchor .octicon-link,.markdown:not(code) h3:hover .anchor .octicon-link,.markdown:not(code) h4:hover .anchor .octicon-link,.markdown:not(code) h5:hover .anchor .octicon-link,.markdown:not(code) h6:hover .anchor .octicon-link{display:inline-block}.markdown:not(code) h1 code,.markdown:not(code) h1 tt,.markdown:not(code) h2 code,.markdown:not(code) h2 tt,.markdown:not(code) h3 code,.markdown:not(code) h3 tt,.markdown:not(code) h4 code,.markdown:not(code) h4 tt,.markdown:not(code) h5 code,.markdown:not(code) h5 tt,.markdown:not(code) h6 code,.markdown:not(code) h6 tt{font-size:inherit}.markdown:not(code) h1{padding-bottom:.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown:not(code) h1 .anchor{line-height:1}.markdown:not(code) h2{padding-bottom:.3em;font-size:1.75em;line-height:1.225;border-bottom:1px solid #eee}.markdown:not(code) h2 .anchor{line-height:1}.markdown:not(code) h3{font-size:1.5em;line-height:1.43}.markdown:not(code) h3 .anchor{line-height:1.2}.markdown:not(code) h4{font-size:1.25em}.markdown:not(code) h4 .anchor{line-height:1.2}.markdown:not(code) h5{font-size:1em}.markdown:not(code) h5 .anchor{line-height:1.1}.markdown:not(code) h6{font-size:1em;color:#777}.markdown:not(code) h6 .anchor{line-height:1.1}.markdown:not(code) blockquote,.markdown:not(code) dl,.markdown:not(code) ol,.markdown:not(code) p,.markdown:not(code) pre,.markdown:not(code) table,.markdown:not(code) ul{margin-top:0;margin-bottom:16px}.markdown:not(code) blockquote{margin-left:0}.markdown:not(code) hr{height:4px;padding:0;margin:16px 0;background-color:#e7e7e7;border:0 none}.markdown:not(code) ol,.markdown:not(code) ul{padding-left:2em}.markdown:not(code) ol.no-list,.markdown:not(code) ul.no-list{padding:0;list-style-type:none}.markdown:not(code) ol ol,.markdown:not(code) ol ul,.markdown:not(code) ul ol,.markdown:not(code) ul ul{margin-top:0;margin-bottom:0}.markdown:not(code) ol ol,.markdown:not(code) ul ol{list-style-type:lower-roman}.markdown:not(code) li>p{margin-top:0}.markdown:not(code) dl{padding:0}.markdown:not(code) dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown:not(code) dl dd{padding:0 16px;margin-bottom:16px}.markdown:not(code) blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown:not(code) blockquote>:first-child{margin-top:0}.markdown:not(code) blockquote>:last-child{margin-bottom:0}.markdown:not(code) table{width:auto;overflow:auto;word-break:normal;word-break:keep-all}.markdown:not(code) table th{font-weight:700}.markdown:not(code) table td,.markdown:not(code) table th{padding:6px 13px!important;border:1px solid #ddd!important}.markdown:not(code) table tr{background-color:#fff;border-top:1px solid #ccc}.markdown:not(code) table tr:nth-child(2n){background-color:#f8f8f8}.markdown:not(code) img{max-width:100%;box-sizing:border-box}.markdown:not(code) .emoji{max-width:none}.markdown:not(code) span.frame{display:block;overflow:hidden}.markdown:not(code) span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown:not(code) span.frame span img{display:block;float:left}.markdown:not(code) span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown:not(code) span.align-center{display:block;overflow:hidden;clear:both}.markdown:not(code) span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown:not(code) span.align-center span img{margin:0 auto;text-align:center}.markdown:not(code) span.align-right{display:block;overflow:hidden;clear:both}.markdown:not(code) span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown:not(code) span.align-right span img{margin:0;text-align:right}.markdown:not(code) span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown:not(code) span.float-left span{margin:13px 0 0}.markdown:not(code) span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown:not(code) span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown:not(code) code,.markdown:not(code) tt{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown:not(code) code:after,.markdown:not(code) code:before,.markdown:not(code) tt:after,.markdown:not(code) tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown:not(code) code br,.markdown:not(code) tt br{display:none}.markdown:not(code) del code{text-decoration:inherit}.markdown:not(code) pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown:not(code) .highlight{margin-bottom:16px}.markdown:not(code) .highlight pre,.markdown:not(code) pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown:not(code) .highlight pre{margin-bottom:0;word-break:normal}.markdown:not(code) pre{word-wrap:normal}.markdown:not(code) pre code,.markdown:not(code) pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown:not(code) pre code:after,.markdown:not(code) pre code:before,.markdown:not(code) pre tt:after,.markdown:not(code) pre tt:before{content:normal}.markdown:not(code) kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown:not(code) input[type=checkbox]{vertical-align:middle!important}.markdown:not(code) .csv-data td,.markdown:not(code) .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown:not(code) .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown:not(code) .csv-data tr{border-top:0}.markdown:not(code) .csv-data th{font-weight:700;background:#f8f8f8;border-top:0}.markdown:not(code) .ui.list .list,.markdown:not(code) ol.ui.list ol,.markdown:not(code) ul.ui.list ul{padding-left:2em}.home{padding-bottom:80px}.home .logo{max-width:220px}.home .hero h1,.home .hero h2{font-family:'PT Sans Narrow',sans-serif,'Microsoft YaHei'}@media only screen and (max-width:767px){.home .hero h1{font-size:3.5em}.home .hero h2{font-size:2em}}@media only screen and (min-width:768px){.home .hero h1{font-size:5.5em}.home .hero h2{font-size:3em}}.home .hero .octicon{color:#5aa509;font-size:40px;width:50px}.home .hero.header{font-size:20px}.home p.large{font-size:16px}.home .stackable{padding-top:30px}.home a{color:#5aa509}.signup{padding-top:15px;padding-bottom:80px}.install{padding-top:45px;padding-bottom:80px}.install form label{text-align:right;width:320px!important}.install form input{width:35%!important}.install form .field{text-align:left}.install form .field .help{margin-left:335px!important}.install form .field.optional .title{margin-left:38%}.install .ui .checkbox{margin-left:40%!important}.install .ui .checkbox label{width:auto!important}.form .help{color:#999;padding-top:.6em;padding-bottom:.6em;display:inline-block}.ui.attached.header{background:#f0f0f0}.ui.attached.header .right{margin-top:-5px}.ui.attached.header .right .button{padding:8px 10px;font-weight:400}#create-page-form form{margin:auto}#create-page-form form .ui.message{text-align:center}@media only screen and (min-width:768px){#create-page-form form{width:800px!important}#create-page-form form .header{padding-left:280px!important}#create-page-form form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}#create-page-form form .help{margin-left:265px!important}#create-page-form form .optional .title{margin-left:250px!important}#create-page-form form input,#create-page-form form textarea{width:50%!important}}@media only screen and (max-width:767px){#create-page-form form .optional .title{margin-left:15px}#create-page-form form .inline.field>label{display:block}}.signin .oauth2 div{display:inline-block}.signin .oauth2 div p{margin:10px 5px 0 0;float:left}.signin .oauth2 a{margin-right:3px}.signin .oauth2 a:last-child{margin-right:0}.signin .oauth2 img{width:32px;height:32px}.signin .oauth2 img.openidConnect{width:auto}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{margin:auto}.user.activate form .ui.message,.user.forgot.password form .ui.message,.user.reset.password form .ui.message,.user.signin form .ui.message,.user.signup form .ui.message{text-align:center}@media only screen and (min-width:768px){.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{width:800px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.signin form .header,.user.signup form .header{padding-left:280px!important}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.user.activate form .help,.user.forgot.password form .help,.user.reset.password form .help,.user.signin form .help,.user.signup form .help{margin-left:265px!important}.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:250px!important}.user.activate form input,.user.activate form textarea,.user.forgot.password form input,.user.forgot.password form textarea,.user.reset.password form input,.user.reset.password form textarea,.user.signin form input,.user.signin form textarea,.user.signup form input,.user.signup form textarea{width:50%!important}}@media only screen and (max-width:767px){.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:15px}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{display:block}}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{width:700px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.signin form .header,.user.signup form .header{padding-left:0!important;text-align:center}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{width:200px!important}.repository.new.fork form,.repository.new.migrate form,.repository.new.repo form{margin:auto}.repository.new.fork form .ui.message,.repository.new.migrate form .ui.message,.repository.new.repo form .ui.message{text-align:center}@media only screen and (min-width:768px){.repository.new.fork form,.repository.new.migrate form,.repository.new.repo form{width:800px!important}.repository.new.fork form .header,.repository.new.migrate form .header,.repository.new.repo form .header{padding-left:280px!important}.repository.new.fork form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.repo form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.repository.new.fork form .help,.repository.new.migrate form .help,.repository.new.repo form .help{margin-left:265px!important}.repository.new.fork form .optional .title,.repository.new.migrate form .optional .title,.repository.new.repo form .optional .title{margin-left:250px!important}.repository.new.fork form input,.repository.new.fork form textarea,.repository.new.migrate form input,.repository.new.migrate form textarea,.repository.new.repo form input,.repository.new.repo form textarea{width:50%!important}}@media only screen and (max-width:767px){.repository.new.fork form .optional .title,.repository.new.migrate form .optional .title,.repository.new.repo form .optional .title{margin-left:15px}.repository.new.fork form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.repo form .inline.field>label{display:block}}.repository.new.fork form .dropdown .dropdown.icon,.repository.new.migrate form .dropdown .dropdown.icon,.repository.new.repo form .dropdown .dropdown.icon{margin-top:-7px!important}.repository.new.fork form .dropdown .text,.repository.new.migrate form .dropdown .text,.repository.new.repo form .dropdown .text{margin-right:0!important}.repository.new.fork form .dropdown .text i,.repository.new.migrate form .dropdown .text i,.repository.new.repo form .dropdown .text i{margin-right:0!important}.repository.new.fork form .header,.repository.new.migrate form .header,.repository.new.repo form .header{padding-left:0!important;text-align:center}.repository.new.repo .ui.form .selection.dropdown:not(.owner){width:50%!important}@media only screen and (min-width:768px){.repository.new.repo .ui.form #auto-init{margin-left:265px!important}}.new.webhook form .help{margin-left:25px}.new.webhook .events.fields .column{padding-left:40px}.githook textarea{font-family:monospace}.repository{padding-top:15px;padding-bottom:80px}.repository .header-grid{padding-top:5px;padding-bottom:5px}.repository .header-grid .ui.compact.menu{margin-left:1rem}.repository .header-grid .ui.header{margin-top:0}.repository .header-grid .mega-octicon{width:30px;font-size:30px}.repository .header-grid .ui.huge.breadcrumb{font-weight:400;font-size:1.7rem}.repository .header-grid .fork-flag{margin-left:38px;margin-top:3px;display:block;font-size:12px;white-space:nowrap}.repository .header-grid .octicon.octicon-repo-forked{margin-top:-1px;font-size:15px}.repository .header-grid .button{margin-top:2px;margin-bottom:2px}.repository .tabs .navbar{justify-content:initial}.repository .navbar{display:flex;justify-content:space-between}.repository .navbar .ui.label{margin-top:-2px;margin-left:7px;padding:3px 5px}.repository .owner.dropdown{min-width:40%!important}.repository #file-buttons{margin-left:auto!important;font-weight:400}.repository #file-buttons .ui.button{padding:8px 10px;font-weight:400}.repository .metas .menu{max-height:300px;overflow-x:auto}.repository .metas .ui.list .hide{display:none!important}.repository .metas .ui.list .item{padding:0}.repository .metas .ui.list .label.color{padding:0 8px;margin-right:5px}.repository .metas .ui.list a{margin:2px 0}.repository .metas .ui.list a .text{color:#444}.repository .metas .ui.list a .text:hover{color:#000}.repository .header-wrapper{background-color:#FAFAFA;margin-top:-15px;padding-top:15px}.repository .header-wrapper .ui.tabs.divider{border-bottom:none}.repository .header-wrapper .ui.tabular .octicon{margin-right:5px}.repository .filter.menu .label.color{border-radius:3px;margin-left:15px;padding:0 8px}.repository .filter.menu .octicon{float:left;margin:5px -7px 0 -5px;width:16px}.repository .filter.menu .text{margin-left:.9em}.repository .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.repository .filter.menu .dropdown.item{margin:1px;padding-right:0}.repository .select-label .item{max-width:250px;overflow:hidden;text-overflow:ellipsis}.repository .select-label .desc{padding-left:16px}.repository .ui.tabs.container{margin-top:14px;margin-bottom:0}.repository .ui.tabs.container .ui.menu{border-bottom:none}.repository .ui.tabs.divider{margin-top:0;margin-bottom:20px}.repository #clone-panel{width:350px}.repository #clone-panel input{border-radius:0;padding:5px 10px}.repository #clone-panel .clone.button{font-size:13px;padding:0 5px}.repository #clone-panel .clone.button:first-child{border-radius:.28571429rem 0 0 .28571429rem}.repository #clone-panel .icon.button{padding:0 10px}.repository #clone-panel .dropdown .menu{right:0!important;left:auto!important}.repository.file.list .repo-description{display:flex;justify-content:space-between;align-items:center}.repository.file.list #repo-desc{font-size:1.2em}.repository.file.list .choose.reference .header .icon{font-size:1.4em}.repository.file.list .repo-path .divider,.repository.file.list .repo-path .section{display:inline}.repository.file.list #file-buttons{font-weight:400}.repository.file.list #file-buttons .ui.button{padding:8px 10px;font-weight:400}.repository.file.list #repo-files-table thead th{padding-top:8px;padding-bottom:5px;font-weight:400}.repository.file.list #repo-files-table thead th:first-child{display:block;position:relative;width:325%}.repository.file.list #repo-files-table thead .ui.avatar{margin-bottom:5px}.repository.file.list #repo-files-table tbody .octicon{margin-left:3px;margin-right:5px;color:#777}.repository.file.list #repo-files-table tbody .octicon.octicon-mail-reply{margin-right:10px}.repository.file.list #repo-files-table tbody .octicon.octicon-file-directory,.repository.file.list #repo-files-table tbody .octicon.octicon-file-submodule,.repository.file.list #repo-files-table tbody .octicon.octicon-file-symlink-directory{color:#1e70bf}.repository.file.list #repo-files-table td{padding-top:8px;padding-bottom:8px}.repository.file.list #repo-files-table td.message .isSigned{cursor:default}.repository.file.list #repo-files-table tr:hover{background-color:#ffE}.repository.file.list #repo-files-table .jumpable-path{color:#888}.repository.file.list .non-diff-file-content .header .icon{font-size:1em}.repository.file.list .non-diff-file-content .header .file-actions{margin-top:0;margin-bottom:-5px;padding-left:20px}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#767676;vertical-align:middle;background:0 0;border:0;outline:0}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon:hover{color:#4078c0}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon-danger:hover{color:#bd2c00}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon.disabled{color:#bbb;cursor:default}.repository.file.list .non-diff-file-content .header .file-actions #delete-file-form{display:inline-block}.repository.file.list .non-diff-file-content .view-raw{padding:5px}.repository.file.list .non-diff-file-content .view-raw *{max-width:100%}.repository.file.list .non-diff-file-content .view-raw img{padding:5px 5px 0 5px}.repository.file.list .non-diff-file-content .plain-text{padding:1em 2em 1em 2em}.repository.file.list .non-diff-file-content .code-view *{font-size:12px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:20px}.repository.file.list .non-diff-file-content .code-view table{width:100%}.repository.file.list .non-diff-file-content .code-view .lines-num{vertical-align:top;text-align:right;color:#999;background:#f5f5f5;width:1%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}.repository.file.list .non-diff-file-content .code-view .lines-num span{line-height:20px;padding:0 10px;cursor:pointer;display:block}.repository.file.list .non-diff-file-content .code-view .lines-code,.repository.file.list .non-diff-file-content .code-view .lines-num{padding:0}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs,.repository.file.list .non-diff-file-content .code-view .lines-code ol,.repository.file.list .non-diff-file-content .code-view .lines-code pre,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs,.repository.file.list .non-diff-file-content .code-view .lines-num ol,.repository.file.list .non-diff-file-content .code-view .lines-num pre{background-color:#fff;margin:0;padding:0!important}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li,.repository.file.list .non-diff-file-content .code-view .lines-code ol li,.repository.file.list .non-diff-file-content .code-view .lines-code pre li,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li,.repository.file.list .non-diff-file-content .code-view .lines-num ol li,.repository.file.list .non-diff-file-content .code-view .lines-num pre li{display:block;width:100%}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li.active,.repository.file.list .non-diff-file-content .code-view .lines-code ol li.active,.repository.file.list .non-diff-file-content .code-view .lines-code pre li.active,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li.active,.repository.file.list .non-diff-file-content .code-view .lines-num ol li.active,.repository.file.list .non-diff-file-content .code-view .lines-num pre li.active{background:#ffd}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li:before,.repository.file.list .non-diff-file-content .code-view .lines-code ol li:before,.repository.file.list .non-diff-file-content .code-view .lines-code pre li:before,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li:before,.repository.file.list .non-diff-file-content .code-view .lines-num ol li:before,.repository.file.list .non-diff-file-content .code-view .lines-num pre li:before{content:' '}.repository.file.list .non-diff-file-content .code-view .active{background:#ffd}.repository.file.list .sidebar{padding-left:0}.repository.file.list .sidebar .octicon{width:16px}.repository.file.editor .treepath{width:100%}.repository.file.editor .treepath input{vertical-align:middle;box-shadow:rgba(0,0,0,.0745098) 0 1px 2px inset;width:inherit;padding:7px 8px;margin-right:5px}.repository.file.editor .tabular.menu .octicon{margin-right:5px}.repository.file.editor .commit-form-wrapper{padding-left:64px}.repository.file.editor .commit-form-wrapper .commit-avatar{float:left;margin-left:-64px;width:3em;height:auto}.repository.file.editor .commit-form-wrapper .commit-form{position:relative;padding:15px;margin-bottom:10px;border:1px solid #ddd;border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form:after,.repository.file.editor .commit-form-wrapper .commit-form:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.file.editor .commit-form-wrapper .commit-form:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:#fff}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .branch-name{display:inline-block;padding:3px 6px;font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace;color:rgba(0,0,0,.65);background-color:rgba(209,227,237,.45);border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input{position:relative;margin-left:25px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input input{width:240px!important;padding-left:26px!important}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .octicon-git-branch{position:absolute;top:9px;left:10px;color:#b0c4ce}.repository.options #interval{width:100px!important;min-width:100px}.repository.options .danger .item{padding:20px 15px}.repository.options .danger .ui.divider{margin:0}.repository.new.issue .comment.form .comment .avatar{width:3em}.repository.new.issue .comment.form .content{margin-left:4em}.repository.new.issue .comment.form .content:after,.repository.new.issue .comment.form .content:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.new.issue .comment.form .content:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.new.issue .comment.form .content:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.new.issue .comment.form .content:after{border-right-color:#fff}.repository.new.issue .comment.form .content .markdown{font-size:14px}.repository.new.issue .comment.form .metas{min-width:220px}.repository.new.issue .comment.form .metas .filter.menu{max-height:300px;overflow-x:auto}.repository.view.issue .title{padding-bottom:0!important}.repository.view.issue .title h1{font-weight:300;font-size:2.3rem;margin-bottom:5px}.repository.view.issue .title h1 .ui.input{font-size:.5em;vertical-align:top;width:50%;min-width:600px}.repository.view.issue .title h1 .ui.input input{font-size:1.5em;padding:6px 10px}.repository.view.issue .title .index{font-weight:300;color:#aaa;letter-spacing:-1px}.repository.view.issue .title .label{margin-right:10px}.repository.view.issue .title .edit-zone{margin-top:10px}.repository.view.issue .pull-desc code{color:#0166E6}.repository.view.issue .pull.tabular.menu{margin-bottom:10px}.repository.view.issue .pull.tabular.menu .octicon{margin-right:5px}.repository.view.issue .pull.tab.segment{border:none;padding:0;padding-top:10px;box-shadow:none;background-color:inherit}.repository.view.issue .pull .merge.box .avatar{margin-left:10px;margin-top:10px}.repository.view.issue .comment-list:before{display:block;content:"";position:absolute;margin-top:12px;margin-bottom:14px;top:0;bottom:0;left:96px;width:2px;background-color:#f3f3f3;z-index:-1}.repository.view.issue .comment-list .comment .avatar{width:3em}.repository.view.issue .comment-list .comment .tag{color:#767676;margin-top:3px;padding:2px 5px;font-size:12px;border:1px solid rgba(0,0,0,.1);border-radius:3px}.repository.view.issue .comment-list .comment .actions .item{float:left}.repository.view.issue .comment-list .comment .actions .item.tag{margin-right:5px}.repository.view.issue .comment-list .comment .actions .item.action{margin-top:6px;margin-left:10px}.repository.view.issue .comment-list .comment .content{margin-left:4em}.repository.view.issue .comment-list .comment .content>.header{font-weight:400;padding:auto 15px;position:relative;color:#767676;background-color:#f7f7f7;border-bottom:1px solid #eee;border-top-left-radius:3px;border-top-right-radius:3px}.repository.view.issue .comment-list .comment .content>.header:after,.repository.view.issue .comment-list .comment .content>.header:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.view.issue .comment-list .comment .content>.header:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.view.issue .comment-list .comment .content>.header:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.view.issue .comment-list .comment .content>.header .text{max-width:78%;padding-top:10px;padding-bottom:10px}.repository.view.issue .comment-list .comment .content .markdown{font-size:14px}.repository.view.issue .comment-list .comment .content .no-content{color:#767676;font-style:italic}.repository.view.issue .comment-list .comment .content>.bottom.segment{background:#f3f4f5}.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.images::after{clear:both;content:' ';display:block}.repository.view.issue .comment-list .comment .content>.bottom.segment a{display:block;float:left;margin:5px;padding:5px;height:150px;border:solid 1px #eee;border-radius:3px;max-width:150px;background-color:#fff}.repository.view.issue .comment-list .comment .content>.bottom.segment a:before{content:' ';display:inline-block;height:100%;vertical-align:middle}.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.image{max-height:100%;width:auto;margin:0;vertical-align:middle}.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image{font-size:128px;color:#000}.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image:hover{color:#000}.repository.view.issue .comment-list .comment .ui.form .field:first-child{clear:none}.repository.view.issue .comment-list .comment .ui.form .tab.segment{border:none;padding:0;padding-top:10px}.repository.view.issue .comment-list .comment .ui.form textarea{height:200px;font-family:Consolas,monospace}.repository.view.issue .comment-list .comment .edit.buttons{margin-top:10px}.repository.view.issue .comment-list .event{position:relative;margin:15px 0 15px 79px;padding-left:25px}.repository.view.issue .comment-list .event .octicon{width:30px;float:left;text-align:center}.repository.view.issue .comment-list .event .octicon.octicon-circle-slash{margin-top:5px;margin-left:-34.5px;font-size:20px;color:#bd2c00}.repository.view.issue .comment-list .event .octicon.octicon-primitive-dot{margin-left:-28.5px;margin-right:-1px;font-size:30px;color:#6cc644}.repository.view.issue .comment-list .event .octicon.octicon-bookmark{margin-top:3px;margin-left:-31px;margin-right:-1px;font-size:25px}.repository.view.issue .comment-list .event .detail{font-size:.9rem;margin-top:5px;margin-left:35px}.repository.view.issue .comment-list .event .detail .octicon.octicon-git-commit{margin-top:2px}.repository.view.issue .ui.segment.metas{margin-top:-3px}.repository.view.issue .ui.participants img{margin-top:5px;margin-right:5px}.repository .comment.form .ui.comments{margin-top:-12px;max-width:100%}.repository .comment.form .content .field:first-child{clear:none}.repository .comment.form .content .form:after,.repository .comment.form .content .form:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository .comment.form .content .form:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository .comment.form .content .form:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository .comment.form .content .form:after{border-right-color:#fff}.repository .comment.form .content .tab.segment{border:none;padding:0;padding-top:10px}.repository .comment.form .content textarea{height:200px;font-family:Consolas,monospace}.repository .label.list{list-style:none;padding-top:15px}.repository .label.list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .label.list .item a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .label.list .item a:hover{color:#000}.repository .label.list .item a.open-issues{margin-right:30px}.repository .label.list .item .ui.label{font-size:1em}.repository .milestone.list{list-style:none;padding-top:15px}.repository .milestone.list>.item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .milestone.list>.item>a{padding-top:5px;padding-right:10px;color:#000}.repository .milestone.list>.item>a:hover{color:#4078c0}.repository .milestone.list>.item .ui.progress{width:40%;padding:0;border:0;margin:0}.repository .milestone.list>.item .ui.progress .bar{height:20px}.repository .milestone.list>.item .meta{color:#999;padding-top:5px}.repository .milestone.list>.item .meta .issue-stats .octicon{padding-left:5px}.repository .milestone.list>.item .meta .overdue{color:red}.repository .milestone.list>.item .operate{margin-top:-15px}.repository .milestone.list>.item .operate>a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .milestone.list>.item .operate>a:hover{color:#000}.repository .milestone.list>.item .content{padding-top:10px}.repository.new.milestone textarea{height:200px}.repository.new.milestone #deadline{width:150px}.repository.compare.pull .choose.branch .octicon{padding-right:10px}.repository.compare.pull .comment.form .content:after,.repository.compare.pull .comment.form .content:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.compare.pull .comment.form .content:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.compare.pull .comment.form .content:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.compare.pull .comment.form .content:after{border-right-color:#fff}.repository .filter.dropdown .menu{margin-top:1px!important}.repository.commits .header .search input{font-weight:400;padding:5px 10px}.repository #commits-table thead th:first-of-type{padding-left:15px}.repository #commits-table thead .sha{width:140px}.repository #commits-table thead .shatd{text-align:center}.repository #commits-table td.sha .sha.label{margin:0}.repository #commits-table.ui.basic.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,0,.02)!important}.repository #commits-table td.sha .sha.label.isSigned,.repository #repo-files-table .sha.label.isSigned{border:1px solid #BBB}.repository #commits-table td.sha .sha.label.isSigned .detail.icon,.repository #repo-files-table .sha.label.isSigned .detail.icon{background:#FAFAFA;margin:-6px -10px -4px 0;padding:5px 3px 5px 6px;border-left:1px solid #BBB;border-top-left-radius:0;border-bottom-left-radius:0}.repository #commits-table td.sha .sha.label.isSigned.isVerified,.repository #repo-files-table .sha.label.isSigned.isVerified{border:1px solid #21BA45;background:#21BA4518}.repository #commits-table td.sha .sha.label.isSigned.isVerified .detail.icon,.repository #repo-files-table .sha.label.isSigned.isVerified .detail.icon{border-left:1px solid #21BA4580}.repository .diff-detail-box{margin:15px 0;line-height:30px}.repository .diff-detail-box ol{clear:both;padding-left:0;margin-top:5px;margin-bottom:28px}.repository .diff-detail-box ol li{list-style:none;padding-bottom:4px;margin-bottom:4px;border-bottom:1px dashed #DDD;padding-left:6px}.repository .diff-detail-box span.status{display:inline-block;width:12px;height:12px;margin-right:8px;vertical-align:middle}.repository .diff-detail-box span.status.modify{background-color:#f0db88}.repository .diff-detail-box span.status.add{background-color:#b4e2b4}.repository .diff-detail-box span.status.del{background-color:#e9aeae}.repository .diff-detail-box span.status.rename{background-color:#dad8ff}.repository .diff-detail-box .ui.right{margin-bottom:15px}.repository .diff-box .header{display:flex;align-items:center}.repository .diff-box .header .count{margin-right:12px;font-size:13px;flex:0 0 auto}.repository .diff-box .header .count .bar{background-color:#bd2c00;height:12px;width:40px;display:inline-block;margin:2px 4px 0 4px;vertical-align:text-top}.repository .diff-box .header .count .bar .add{background-color:#55a532;height:12px}.repository .diff-box .header .file{flex:1;color:#888;word-break:break-all}.repository .diff-box .header .button{margin:-5px 0 -5px 12px;padding:8px 10px;flex:0 0 auto}.repository .diff-file-box .header{background-color:#f7f7f7}.repository .diff-file-box .file-body.file-code .lines-num{text-align:right;color:#A7A7A7;background:#fafafa;width:1%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;vertical-align:top}.repository .diff-file-box .file-body.file-code .lines-num span.fold{display:block;text-align:center}.repository .diff-file-box .file-body.file-code .lines-num-old{border-right:1px solid #DDD}.repository .diff-file-box .code-diff{font-size:12px}.repository .diff-file-box .code-diff td{padding:0;padding-left:10px;border-top:none}.repository .diff-file-box .code-diff pre{margin:0}.repository .diff-file-box .code-diff .lines-num{border-color:#d4d4d5;border-right-width:1px;border-right-style:solid;padding:0 5px}.repository .diff-file-box .code-diff tbody tr td.halfwidth{width:49%}.repository .diff-file-box .code-diff tbody tr td.tag-code,.repository .diff-file-box .code-diff tbody tr.tag-code td{background-color:#F0F0F0!important;border-color:#D2CECE!important;padding-top:8px;padding-bottom:8px}.repository .diff-file-box .code-diff tbody tr .removed-code{background-color:#f99}.repository .diff-file-box .code-diff tbody tr .added-code{background-color:#9f9}.repository .diff-file-box .code-diff-unified tbody tr.del-code td{background-color:#ffe0e0!important;border-color:#f1c0c0!important}.repository .diff-file-box .code-diff-unified tbody tr.add-code td{background-color:#d6fcd6!important;border-color:#c1e9c1!important}.repository .diff-file-box .code-diff-split table,.repository .diff-file-box .code-diff-split tbody{width:100%}.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(2),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(4){background-color:#fafafa}.repository .diff-file-box .code-diff-split tbody tr td.del-code,.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(2){background-color:#ffe0e0!important;border-color:#f1c0c0!important}.repository .diff-file-box .code-diff-split tbody tr td.add-code,.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(4){background-color:#d6fcd6!important;border-color:#c1e9c1!important}.repository .diff-file-box .code-diff-split tbody tr td:nth-child(3){border-left-width:1px;border-left-style:solid}.repository .diff-file-box.file-content{clear:right}.repository .diff-file-box.file-content img{max-width:100%;padding:5px 5px 0 5px}.repository .code-view{overflow:auto;overflow-x:auto;overflow-y:hidden}.repository .repo-search-result{padding-top:10px;padding-bottom:10px}.repository .repo-search-result .lines-num a{color:inherit}.repository.quickstart .guide .item{padding:1em}.repository.quickstart .guide .item small{font-weight:400}.repository.quickstart .guide .clone.button:first-child{border-radius:.28571429rem 0 0 .28571429rem}.repository.quickstart .guide .ui.action.small.input{width:100%}.repository.quickstart .guide #repo-clone-url{border-radius:0;padding:5px 10px;font-size:1.2em}.repository.release #release-list{border-top:1px solid #DDD;margin-top:20px;padding-top:15px}.repository.release #release-list>li{list-style:none}.repository.release #release-list>li .detail,.repository.release #release-list>li .meta{padding-top:30px;padding-bottom:40px}.repository.release #release-list>li .meta{text-align:right;position:relative}.repository.release #release-list>li .meta .tag:not(.icon){display:block;margin-top:15px}.repository.release #release-list>li .meta .commit{display:block;margin-top:10px}.repository.release #release-list>li .detail{border-left:1px solid #DDD}.repository.release #release-list>li .detail .author img{margin-bottom:-3px}.repository.release #release-list>li .detail .download{margin-top:20px}.repository.release #release-list>li .detail .download>a .octicon{margin-left:5px;margin-right:5px}.repository.release #release-list>li .detail .download .list{padding-left:0;border-top:1px solid #eee}.repository.release #release-list>li .detail .download .list li{list-style:none;display:block;padding-top:8px;padding-bottom:8px;border-bottom:1px solid #eee}.repository.release #release-list>li .detail .dot{width:9px;height:9px;background-color:#ccc;z-index:999;position:absolute;display:block;left:-5px;top:40px;border-radius:6px;border:1px solid #FFF}.repository.new.release .target{min-width:500px}.repository.new.release .target #tag-name{margin-top:-4px}.repository.new.release .target .at{margin-left:-5px;margin-right:5px}.repository.new.release .target .dropdown.icon{margin:0;padding-top:3px}.repository.new.release .target .selection.dropdown{padding-top:10px;padding-bottom:10px}.repository.new.release .prerelease.field{margin-bottom:0}.repository.forks .list{margin-top:0}.repository.forks .list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px solid #DDD}.repository.forks .list .item .ui.avatar{float:left;margin-right:5px}.repository.forks .list .item .link{padding-top:5px}.repository.wiki.start .ui.segment{padding-top:70px;padding-bottom:100px}.repository.wiki.start .ui.segment .mega-octicon{font-size:48px}.repository.wiki.new .CodeMirror .CodeMirror-code{font-family:Consolas,monospace}.repository.wiki.new .CodeMirror .CodeMirror-code .cm-comment{background:inherit}.repository.wiki.new .editor-preview{background-color:#fff}.repository.wiki.view .choose.page{margin-top:-5px}.repository.wiki.view .ui.sub.header{text-transform:none}.repository.wiki.view>.markdown{padding:15px 30px}.repository.wiki.view>.markdown h1:first-of-type,.repository.wiki.view>.markdown h2:first-of-type,.repository.wiki.view>.markdown h3:first-of-type,.repository.wiki.view>.markdown h4:first-of-type,.repository.wiki.view>.markdown h5:first-of-type,.repository.wiki.view>.markdown h6:first-of-type{margin-top:0}@media only screen and (max-width:767px){.repository.wiki .dividing.header .stackable.grid .button{margin-top:2px;margin-bottom:2px}}.repository.settings.collaboration .collaborator.list{padding:0}.repository.settings.collaboration .collaborator.list>.item{margin:0;line-height:2em}.repository.settings.collaboration .collaborator.list>.item:not(:last-child){border-bottom:1px solid #DDD}.repository.settings.collaboration #repo-collab-form #search-user-box .results{left:7px}.repository.settings.collaboration #repo-collab-form .ui.button{margin-left:5px;margin-top:-3px}.repository.settings.branches .protected-branches .selection.dropdown{width:300px}.repository.settings.branches .protected-branches .item{border:1px solid #eaeaea;padding:10px 15px}.repository.settings.branches .protected-branches .item:not(:last-child){border-bottom:0}.repository.settings.branches .branch-protection .help{margin-left:26px;padding-top:0}.repository.settings.branches .branch-protection .fields{margin-left:20px;display:block}.repository.settings.branches .branch-protection .whitelist{margin-left:26px}.repository.settings.branches .branch-protection .whitelist .dropdown img{display:inline-block}.repository.settings.webhook .events .column{padding-bottom:0}.repository.settings.webhook .events .help{font-size:13px;margin-left:26px;padding-top:0}.repository .ui.attached.isSigned.isVerified:not(.positive){border-left:1px solid #A3C293;border-right:1px solid #A3C293}.repository .ui.attached.isSigned.isVerified.top:not(.positive){border-top:1px solid #A3C293}.repository .ui.attached.isSigned.isVerified:not(.positive):last-child{border-bottom:1px solid #A3C293}.repository .ui.segment.sub-menu{padding:7px;line-height:0}.repository .ui.segment.sub-menu .list{width:100%;display:flex}.repository .ui.segment.sub-menu .list .item{width:100%;border-radius:3px}.repository .ui.segment.sub-menu .list .item a{color:#000}.repository .ui.segment.sub-menu .list .item a:hover{color:#666}.repository .ui.segment.sub-menu .list .item.active{background:rgba(0,0,0,.05)}.repository .segment.reactions.dropdown .menu,.repository .select-reaction.dropdown .menu{right:0!important;left:auto!important}.repository .segment.reactions.dropdown .menu>.header,.repository .select-reaction.dropdown .menu>.header{margin:.75rem 0 .5rem}.repository .segment.reactions.dropdown .menu>.item,.repository .select-reaction.dropdown .menu>.item{float:left;padding:.5rem .5rem!important}.repository .segment.reactions.dropdown .menu>.item img.emoji,.repository .select-reaction.dropdown .menu>.item img.emoji{margin-right:0}.repository .segment.reactions{padding:.3em 1em}.repository .segment.reactions .ui.label{padding:.4em}.repository .segment.reactions .ui.label.disabled{cursor:default}.repository .segment.reactions .ui.label>img{height:1.5em!important}.repository .segment.reactions .select-reaction{float:none}.repository .segment.reactions .select-reaction:not(.active) a{display:none}.repository .segment.reactions:hover .select-reaction a{display:block}.user-cards .list{padding:0}.user-cards .list .item{list-style:none;width:32%;margin:10px 10px 10px 0;padding-bottom:14px;float:left}.user-cards .list .item .avatar{width:48px;height:48px;float:left;display:block;margin-right:10px}.user-cards .list .item .name{margin-top:0;margin-bottom:0;font-weight:400}.user-cards .list .item .meta{margin-top:5px}#search-repo-box .results .result .image,#search-user-box .results .result .image{float:left;margin-right:8px;width:2em;height:2em}#search-repo-box .results .result .content,#search-user-box .results .result .content{margin:6px 0}#issue-actions{display:none}.issue.list{list-style:none;padding-top:15px}.issue.list>.item{padding-top:15px;padding-bottom:10px;border-bottom:1px dashed #AAA}.issue.list>.item .title{color:#444;font-size:15px;font-weight:700;margin:0 6px}.issue.list>.item .title:hover{color:#000}.issue.list>.item .comment{padding-right:10px;color:#666}.issue.list>.item .desc{padding-top:5px;color:#999}.issue.list>.item .desc .checklist{padding-left:5px}.issue.list>.item .desc .checklist .progress-bar{margin-left:2px;width:80px;height:6px;display:inline-block;background-color:#eee;overflow:hidden;border-radius:3px;vertical-align:2px!important}.issue.list>.item .desc .checklist .progress-bar .progress{background-color:#ccc;display:block;height:100%}.issue.list>.item .desc a.milestone{padding-left:5px;color:#999!important}.issue.list>.item .desc a.milestone:hover{color:#000!important}.issue.list>.item .desc .assignee{margin-top:-5px;margin-right:5px}.issue.list>.item .desc .overdue{color:red}.page.buttons{padding-top:15px}.ui.form .dropzone{width:100%;margin-bottom:10px;border:2px dashed #0087F7;box-shadow:none!important}.ui.form .dropzone .dz-error-message{top:140px}.settings .content{margin-top:2px}.settings .content .segment,.settings .content>.header{box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.settings .list>.item .green{color:#21BA45!important}.settings .list>.item:not(:first-child){border-top:1px solid #eaeaea;padding:1rem;margin:15px -1rem -1rem -1rem}.settings .list>.item>.mega-octicon{display:table-cell}.settings .list>.item>.mega-octicon+.content{display:table-cell;padding:0 0 0 .5em;vertical-align:top}.settings .list>.item .info{margin-top:10px}.settings .list>.item .info .tab.segment{border:none;padding:10px 0 0}.settings .list.key .meta{padding-top:5px;color:#666}.settings .list.email>.item:not(:first-child){min-height:60px}.settings .list.collaborator>.item{padding:0}.ui.vertical.menu .header.item{font-size:1.1em;background:#f0f0f0}.edit-label.modal .form .column,.new-label.segment .form .column{padding-right:0}.edit-label.modal .form .buttons,.new-label.segment .form .buttons{margin-left:auto;padding-top:15px}.edit-label.modal .form .color.picker.column,.new-label.segment .form .color.picker.column{width:auto}.edit-label.modal .form .color.picker.column .color-picker,.new-label.segment .form .color.picker.column .color-picker{height:35px;width:auto;padding-left:30px}.edit-label.modal .form .minicolors-swatch.minicolors-sprite,.new-label.segment .form .minicolors-swatch.minicolors-sprite{top:10px;left:10px;width:15px;height:15px}.edit-label.modal .form .precolors,.new-label.segment .form .precolors{padding-left:0;padding-right:0;margin:3px 10px auto 10px;width:120px}.edit-label.modal .form .precolors .color,.new-label.segment .form .precolors .color{float:left;width:15px;height:15px}#avatar-arrow:after,#avatar-arrow:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}#avatar-arrow:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}#avatar-arrow:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}#delete-repo-modal .ui.message,#transfer-repo-modal .ui.message{width:100%!important}.tab-size-1{tab-size:1!important;-moz-tab-size:1!important}.tab-size-2{tab-size:2!important;-moz-tab-size:2!important}.tab-size-3{tab-size:3!important;-moz-tab-size:3!important}.tab-size-4{tab-size:4!important;-moz-tab-size:4!important}.tab-size-5{tab-size:5!important;-moz-tab-size:5!important}.tab-size-6{tab-size:6!important;-moz-tab-size:6!important}.tab-size-7{tab-size:7!important;-moz-tab-size:7!important}.tab-size-8{tab-size:8!important;-moz-tab-size:8!important}.tab-size-9{tab-size:9!important;-moz-tab-size:9!important}.tab-size-10{tab-size:10!important;-moz-tab-size:10!important}.tab-size-11{tab-size:11!important;-moz-tab-size:11!important}.tab-size-12{tab-size:12!important;-moz-tab-size:12!important}.tab-size-13{tab-size:13!important;-moz-tab-size:13!important}.tab-size-14{tab-size:14!important;-moz-tab-size:14!important}.tab-size-15{tab-size:15!important;-moz-tab-size:15!important}.tab-size-16{tab-size:16!important;-moz-tab-size:16!important}.stats-table{display:table;width:100%}.stats-table .table-cell{display:table-cell}.stats-table .table-cell.tiny{height:.5em}tbody.commit-list{vertical-align:baseline}.commit-body{white-space:pre-wrap}@media only screen and (max-width:767px){.ui.stackable.menu.mobile--margin-between-items>.item{margin-top:5px;margin-bottom:5px}.ui.stackable.menu.mobile--no-negative-margins{margin-left:0;margin-right:0}}#topic_edit{margin-top:5px;display:none}#repo-topic{margin-top:5px}.CodeMirror{font:14px Consolas,"Liberation Mono",Menlo,Courier,monospace}.CodeMirror.cm-s-default{border-radius:3px;padding:0!important}.CodeMirror .cm-comment{background:inherit!important}.repository.file.editor .tab[data-tab=write]{padding:0!important}.repository.file.editor .tab[data-tab=write] .editor-toolbar{border:none!important}.repository.file.editor .tab[data-tab=write] .CodeMirror{border-left:none;border-right:none;border-bottom:none}.organization{padding-top:15px;padding-bottom:80px}.organization .head .ui.header .text{vertical-align:middle;font-size:1.6rem;margin-left:15px}.organization .head .ui.header .ui.right{margin-top:5px}.organization.new.org form{margin:auto}.organization.new.org form .ui.message{text-align:center}@media only screen and (min-width:768px){.organization.new.org form{width:800px!important}.organization.new.org form .header{padding-left:280px!important}.organization.new.org form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.organization.new.org form .help{margin-left:265px!important}.organization.new.org form .optional .title{margin-left:250px!important}.organization.new.org form input,.organization.new.org form textarea{width:50%!important}}@media only screen and (max-width:767px){.organization.new.org form .optional .title{margin-left:15px}.organization.new.org form .inline.field>label{display:block}}.organization.new.org form .header{padding-left:0!important;text-align:center}.organization.options input{min-width:300px}.organization.profile #org-avatar{width:100px;height:100px;margin-right:15px}.organization.profile #org-info .ui.header{font-size:36px;margin-bottom:0}.organization.profile #org-info .desc{font-size:16px;margin-bottom:10px}.organization.profile #org-info .meta .item{display:inline-block;margin-right:10px}.organization.profile #org-info .meta .item .icon{margin-right:5px}.organization.profile .ui.top.header .ui.right{margin-top:0}.organization.profile .teams .item{padding:10px 15px}.organization.profile .members .ui.avatar,.organization.teams .members .ui.avatar{width:48px;height:48px;margin-right:5px}.organization.invite #invite-box{margin:auto;margin-top:50px;width:500px!important}.organization.invite #invite-box #search-user-box input{margin-left:0;width:300px}.organization.invite #invite-box .ui.button{margin-left:5px;margin-top:-3px}.organization.members .list .item{margin-left:0;margin-right:0;border-bottom:1px solid #eee}.organization.members .list .item .ui.avatar{width:48px;height:48px}.organization.members .list .item .meta{line-height:24px}.organization.teams .detail .item{padding:10px 15px}.organization.teams .detail .item:not(:last-child){border-bottom:1px solid #eee}.organization.teams .members .item,.organization.teams .repositories .item{padding:10px 20px;line-height:32px}.organization.teams .members .item:not(:last-child),.organization.teams .repositories .item:not(:last-child){border-bottom:1px solid #DDD}.organization.teams .members .item .button,.organization.teams .repositories .item .button{padding:9px 10px}.organization.teams #add-member-form input,.organization.teams #add-repo-form input{margin-left:0}.organization.teams #add-member-form .ui.button,.organization.teams #add-repo-form .ui.button{margin-left:5px;margin-top:-3px}.user:not(.icon){padding-top:15px;padding-bottom:80px}.user.profile .ui.card .username{display:block}.user.profile .ui.card .extra.content{padding:0}.user.profile .ui.card .extra.content ul{margin:0;padding:0}.user.profile .ui.card .extra.content ul li{padding:10px;list-style:none}.user.profile .ui.card .extra.content ul li:not(:last-child){border-bottom:1px solid #eaeaea}.user.profile .ui.card .extra.content ul li .octicon{margin-left:1px;margin-right:5px}.user.profile .ui.card .extra.content ul li.follow .ui.button{width:100%}.user.profile .ui.repository.list{margin-top:25px}.user.followers .header.name{font-size:20px;line-height:24px;vertical-align:middle}.user.followers .follow .ui.button{padding:8px 15px}.user.notification .octicon{float:left;font-size:2em}.user.notification .content{float:left;margin-left:7px}.user.notification table form{display:inline-block}.user.notification table button{padding:3px 3px 3px 5px}.user.notification table tr{cursor:pointer}.user.notification .octicon.green{color:#21ba45}.user.notification .octicon.red{color:#d01919}.user.notification .octicon.purple{color:#a333c8}.user.notification .octicon.blue{color:#2185d0}.user.link-account:not(.icon){padding-top:15px;padding-bottom:5px}.user.settings .iconFloat{float:left}.dashboard{padding-top:15px;padding-bottom:80px}.dashboard.feeds .context.user.menu,.dashboard.issues .context.user.menu{z-index:101;min-width:200px}.dashboard.feeds .context.user.menu .ui.header,.dashboard.issues .context.user.menu .ui.header{font-size:1rem;text-transform:none}.dashboard.feeds .filter.menu .item,.dashboard.issues .filter.menu .item{text-align:left}.dashboard.feeds .filter.menu .item .text,.dashboard.issues .filter.menu .item .text{height:16px;vertical-align:middle}.dashboard.feeds .filter.menu .item .text.truncate,.dashboard.issues .filter.menu .item .text.truncate{width:85%}.dashboard.feeds .filter.menu .item .floating.label,.dashboard.issues .filter.menu .item .floating.label{top:7px;left:90%;width:15%}.dashboard.feeds .filter.menu .jump.item,.dashboard.issues .filter.menu .jump.item{margin:1px;padding-right:0}.dashboard.feeds .filter.menu .menu,.dashboard.issues .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.dashboard.feeds .right.stackable.menu>.item.active,.dashboard.issues .right.stackable.menu>.item.active{color:#d9453d}.dashboard .dashboard-repos{margin:0 1px}.feeds .news>.ui.grid{margin-left:auto;margin-right:auto}.feeds .news .ui.avatar{margin-top:13px}.feeds .news p{line-height:1em}.feeds .news .time-since{font-size:13px}.feeds .news .issue.title{width:80%}.feeds .news .push.news .content ul{font-size:13px;list-style:none;padding-left:10px}.feeds .news .push.news .content ul img{margin-bottom:-2px}.feeds .news .push.news .content ul .text.truncate{width:80%;margin-bottom:-5px}.feeds .news .commit-id{font-family:Consolas,monospace}.feeds .news code{padding:1px;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px;word-break:break-all}.feeds .list .header .ui.label{margin-top:-4px;padding:4px 5px;font-weight:400}.feeds .list .header .plus.icon{margin-top:5px}.feeds .list ul{list-style:none;margin:0;padding-left:0}.feeds .list ul li:not(:last-child){border-bottom:1px solid #EAEAEA}.feeds .list ul li.private{background-color:#fcf8e9}.feeds .list ul li a{padding:6px 1.2em;display:block}.feeds .list ul li a .octicon{color:#888}.feeds .list ul li a .octicon.rear{font-size:15px}.feeds .list ul li a .star-num{font-size:12px}.feeds .list .repo-owner-name-list .item-name{max-width:70%;margin-bottom:-4px}.feeds .list #collaborative-repo-list .owner-and-repo{max-width:80%;margin-bottom:-5px}.feeds .list #collaborative-repo-list .owner-name{max-width:120px;margin-bottom:-5px}.admin{padding-top:15px;padding-bottom:80px}.admin .table.segment{padding:0;font-size:13px}.admin .table.segment:not(.striped){padding-top:5px}.admin .table.segment:not(.striped) thead th:last-child{padding-right:5px!important}.admin .table.segment th{padding-top:5px;padding-bottom:5px}.admin .table.segment:not(.select) td:first-of-type,.admin .table.segment:not(.select) th:first-of-type{padding-left:15px!important}.admin .ui.header,.admin .ui.segment{box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.admin.user .email{max-width:200px}.admin dl.admin-dl-horizontal{padding:20px;margin:0}.admin dl.admin-dl-horizontal dd{margin-left:275px}.admin dl.admin-dl-horizontal dt{font-weight:bolder;float:left;width:285px;clear:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin.config #test-mail-btn{margin-left:5px}.explore{padding-top:15px;padding-bottom:80px}.explore .navbar{justify-content:center;padding-top:15px!important;margin-top:-15px!important;margin-bottom:15px!important;background-color:#FAFAFA!important;border-width:1px!important}.explore .navbar .octicon{width:16px;text-align:center;margin-right:5px}.ui.repository.list .item{padding-bottom:25px}.ui.repository.list .item:not(:first-child){border-top:1px solid #eee;padding-top:25px}.ui.repository.list .item .ui.header{font-size:1.5rem;padding-bottom:10px}.ui.repository.list .item .ui.header .name{word-break:break-all}.ui.repository.list .item .ui.header .metas{color:#888;font-size:14px;font-weight:400}.ui.repository.list .item .ui.header .metas span:not(:last-child){margin-right:5px}.ui.repository.list .item .time{font-size:12px;color:grey}.ui.repository.branches .time{font-size:12px;color:grey}.ui.user.list .item{padding-bottom:25px}.ui.user.list .item:not(:first-child){border-top:1px solid #eee;padding-top:25px}.ui.user.list .item .ui.avatar.image{width:40px;height:40px}.ui.user.list .item .description{margin-top:5px}.ui.user.list .item .description .octicon:not(:first-child){margin-left:5px}.ui.user.list .item .description a{color:#333}.ui.user.list .item .description a:hover{text-decoration:underline} \ No newline at end of file diff --git a/public/less/_markdown.less b/public/less/_markdown.less index 9e2734e42..458016d71 100644 --- a/public/less/_markdown.less +++ b/public/less/_markdown.less @@ -5,6 +5,10 @@ line-height: 1.6 !important; word-wrap: break-word; + &.ui.segment { + padding: 3em; + } + &.file-view { padding: 2em 2em 2em !important; } From 908e8942ccae5b7966c7084780b3441e2190d9c1 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Tue, 12 Jun 2018 16:59:22 +0200 Subject: [PATCH 004/124] Fix swagger errors (#4220) Fix all the resting errors to have a valid swagger file. They are still some warnings but nothing blocking. Doing so I found that some request still misses son parameters for some POST/PUT/PATCH request. This means the a client generated from the swagger file will not work completely. Fix #4088 by activating validation in drone Should fix #4010. --- .drone.yml | 1 + public/swagger.v1.json | 476 +++++++++++++--------- routers/api/v1/misc/markdown.go | 9 +- routers/api/v1/org/hook.go | 49 +++ routers/api/v1/org/team.go | 6 +- routers/api/v1/repo/file.go | 2 +- routers/api/v1/repo/hook.go | 7 +- routers/api/v1/repo/issue_comment.go | 4 +- routers/api/v1/repo/issue_tracked_time.go | 8 +- routers/api/v1/repo/milestone.go | 59 +-- routers/api/v1/repo/repo.go | 12 +- routers/api/v1/swagger/options.go | 52 ++- routers/api/v1/swagger/repo.go | 1 + routers/api/v1/user/app.go | 12 + routers/api/v1/user/follower.go | 4 +- 15 files changed, 440 insertions(+), 262 deletions(-) diff --git a/.drone.yml b/.drone.yml index 011d4fefd..6ab40a39d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -75,6 +75,7 @@ pipeline: - make lint - make fmt-check - make swagger-check + - make swagger-validate - make misspell-check - make test-vendor - make build diff --git a/public/swagger.v1.json b/public/swagger.v1.json index 2c263ef1f..1c381a829 100644 --- a/public/swagger.v1.json +++ b/public/swagger.v1.json @@ -321,9 +321,13 @@ "operationId": "renderMarkdownRaw", "parameters": [ { - "type": "string", + "description": "Request body to render", "name": "body", - "in": "body" + "in": "body", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -448,6 +452,15 @@ ], "summary": "List an organization's webhooks", "operationId": "orgListHooks", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + } + ], "responses": { "200": { "$ref": "#/responses/HookList" @@ -468,6 +481,15 @@ ], "summary": "Create a hook", "operationId": "orgCreateHook", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + } + ], "responses": { "201": { "$ref": "#/responses/Hook" @@ -485,6 +507,22 @@ ], "summary": "Get a hook", "operationId": "orgGetHook", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of the hook to get", + "name": "id", + "in": "path", + "required": true + } + ], "responses": { "200": { "$ref": "#/responses/Hook" @@ -500,6 +538,22 @@ ], "summary": "Delete a hook", "operationId": "orgDeleteHook", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of the hook to delete", + "name": "id", + "in": "path", + "required": true + } + ], "responses": { "204": { "$ref": "#/responses/empty" @@ -518,6 +572,22 @@ ], "summary": "Update a hook", "operationId": "orgEditHook", + "parameters": [ + { + "type": "string", + "description": "name of the organization", + "name": "org", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of the hook to update", + "name": "id", + "in": "path", + "required": true + } + ], "responses": { "200": { "$ref": "#/responses/Hook" @@ -994,7 +1064,7 @@ } } }, - "/repos/{owner}/{repo}/archive/{filepath}": { + "/repos/{owner}/{repo}/archive/{archive}": { "get": { "produces": [ "application/json" @@ -1530,6 +1600,47 @@ } } }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Delete a hook in a repository", + "operationId": "repoDeleteHook", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of the hook to delete", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + }, "patch": { "produces": [ "application/json" @@ -1554,6 +1665,13 @@ "in": "path", "required": true }, + { + "type": "integer", + "description": "index of the hook", + "name": "id", + "in": "path", + "required": true + }, { "name": "body", "in": "body", @@ -1825,6 +1943,100 @@ } } }, + "/repos/{owner}/{repo}/issues/{id}/times": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "List an issue's tracked times", + "operationId": "issueTrackedTimes", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "index of the issue", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/TrackedTimeList" + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "issue" + ], + "summary": "Add a tracked time to a issue", + "operationId": "issueAddTime", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "index of the issue to add tracked time to", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/AddTimeOption" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/TrackedTime" + }, + "400": { + "$ref": "#/responses/error" + }, + "403": { + "$ref": "#/responses/error" + } + } + } + }, "/repos/{owner}/{repo}/issues/{index}": { "get": { "produces": [ @@ -1941,7 +2153,7 @@ { "type": "integer", "description": "index of the issue", - "name": "id", + "name": "index", "in": "path", "required": true }, @@ -1988,7 +2200,7 @@ { "type": "integer", "description": "index of the issue", - "name": "id", + "name": "index", "in": "path", "required": true }, @@ -2332,100 +2544,6 @@ } } }, - "/repos/{owner}/{repo}/issues/{index}/times": { - "get": { - "produces": [ - "application/json" - ], - "tags": [ - "issue" - ], - "summary": "List an issue's tracked times", - "operationId": "issueTrackedTimes", - "parameters": [ - { - "type": "string", - "description": "owner of the repo", - "name": "owner", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "name of the repo", - "name": "repo", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "index of the issue", - "name": "repo", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "$ref": "#/responses/TrackedTimeList" - } - } - }, - "post": { - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "issue" - ], - "summary": "Add a tracked time to a issue", - "operationId": "issueAddTime", - "parameters": [ - { - "type": "string", - "description": "owner of the repo", - "name": "owner", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "name of the repo", - "name": "repo", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "index of the issue to add tracked time to", - "name": "id", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/AddTimeOption" - } - } - ], - "responses": { - "200": { - "$ref": "#/responses/TrackedTime" - }, - "400": { - "$ref": "#/responses/error" - }, - "403": { - "$ref": "#/responses/error" - } - } - } - }, "/repos/{owner}/{repo}/keys": { "get": { "produces": [ @@ -2781,7 +2899,7 @@ "issue" ], "summary": "Get all of a repository's milestones", - "operationId": "issueGetMilestones", + "operationId": "issueGetMilestonesList", "parameters": [ { "type": "string", @@ -2796,13 +2914,6 @@ "name": "repo", "in": "path", "required": true - }, - { - "type": "integer", - "description": "id of the milestone to get", - "name": "id", - "in": "path", - "required": true } ], "responses": { @@ -2863,6 +2974,29 @@ ], "summary": "Get a milestone", "operationId": "issueGetMilestone", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "id of the milestone", + "name": "id", + "in": "path", + "required": true + } + ], "responses": { "200": { "$ref": "#/responses/Milestone" @@ -2893,7 +3027,7 @@ { "type": "integer", "description": "id of the milestone to delete", - "name": "body", + "name": "id", "in": "path", "required": true } @@ -2931,6 +3065,13 @@ "in": "path", "required": true }, + { + "type": "integer", + "description": "id of the milestone", + "name": "id", + "in": "path", + "required": true + }, { "name": "body", "in": "body", @@ -3979,7 +4120,7 @@ } } }, - "/repos/{owner}/{repo}/times/{tracker}": { + "/repos/{owner}/{repo}/times/{user}": { "get": { "produces": [ "application/json" @@ -4019,49 +4160,6 @@ } } }, - "/repos/{user}/{repo}/hooks/{id}": { - "delete": { - "produces": [ - "application/json" - ], - "tags": [ - "repository" - ], - "summary": "Delete a hook in a repository", - "operationId": "repoDeleteHook", - "parameters": [ - { - "type": "string", - "description": "owner of the repo", - "name": "owner", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "name of the repo", - "name": "repo", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "id of the hook to delete", - "name": "id", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "$ref": "#/responses/empty" - }, - "404": { - "$ref": "#/responses/notFound" - } - } - } - }, "/repositories/{id}": { "get": { "produces": [ @@ -4238,7 +4336,7 @@ "organization" ], "summary": "Remove a team member", - "operationId": "orgAddTeamMember", + "operationId": "orgRemoveTeamMember", "parameters": [ { "type": "integer", @@ -4297,7 +4395,7 @@ "organization" ], "summary": "Add a repository to a team", - "operationId": "orgAddTeamMember", + "operationId": "orgAddTeamRepository", "parameters": [ { "type": "integer", @@ -4336,7 +4434,7 @@ "organization" ], "summary": "Remove a repository from a team", - "operationId": "orgAddTeamMember", + "operationId": "orgRemoveTeamRepository", "parameters": [ { "type": "integer", @@ -4379,10 +4477,10 @@ "operationId": "topicSearch", "parameters": [ { - "type": "integer", - "description": "id of the repo to get", - "name": "keyword", - "in": "path", + "type": "string", + "description": "keywords to search", + "name": "q", + "in": "query", "required": true } ], @@ -4509,7 +4607,7 @@ } } }, - "/user/following/{followee}": { + "/user/following/{username}": { "get": { "tags": [ "user" @@ -4520,7 +4618,7 @@ { "type": "string", "description": "username of followed user", - "name": "followee", + "name": "username", "in": "path", "required": true } @@ -4533,9 +4631,7 @@ "$ref": "#/responses/notFound" } } - } - }, - "/user/following/{username}": { + }, "put": { "tags": [ "user" @@ -5301,6 +5397,15 @@ ], "summary": "List the authenticated user's access tokens", "operationId": "userGetTokens", + "parameters": [ + { + "type": "string", + "description": "username of user", + "name": "username", + "in": "path", + "required": true + } + ], "responses": { "200": { "$ref": "#/responses/AccessTokenList" @@ -5323,8 +5428,10 @@ { "type": "string", "x-go-name": "Name", - "name": "name", - "in": "query" + "description": "username of user", + "name": "username", + "in": "path", + "required": true } ], "responses": { @@ -7612,9 +7719,6 @@ "description": "SearchResults", "schema": { "$ref": "#/definitions/SearchResults" - }, - "headers": { - "body": {} } }, "ServerVersion": { @@ -7721,40 +7825,6 @@ "description": "parameterBodies", "schema": { "$ref": "#/definitions/EditAttachmentOptions" - }, - "headers": { - "AddCollaboratorOption": {}, - "AddTimeOption": {}, - "CreateEmailOption": {}, - "CreateForkOption": {}, - "CreateHookOption": {}, - "CreateIssueCommentOption": {}, - "CreateIssueOption": {}, - "CreateKeyOption": {}, - "CreateLabelOption": {}, - "CreateMilestoneOption": {}, - "CreateOrgOption": {}, - "CreatePullRequestOption": {}, - "CreateReleaseOption": {}, - "CreateRepoOption": {}, - "CreateStatusOption": {}, - "CreateTeamOption": {}, - "CreateUserOption": {}, - "DeleteEmailOption": {}, - "EditAttachmentOptions": {}, - "EditHookOption": {}, - "EditIssueCommentOption": {}, - "EditIssueOption": {}, - "EditLabelOption": {}, - "EditMilestoneOption": {}, - "EditOrgOption": {}, - "EditPullRequestOption": {}, - "EditReleaseOption": {}, - "EditTeamOption": {}, - "EditUserOption": {}, - "IssueLabelsOption": {}, - "MarkdownOption": {}, - "MigrateRepoForm": {} } }, "redirect": { diff --git a/routers/api/v1/misc/markdown.go b/routers/api/v1/misc/markdown.go index fd7d1489b..633dff98e 100644 --- a/routers/api/v1/misc/markdown.go +++ b/routers/api/v1/misc/markdown.go @@ -62,9 +62,12 @@ func MarkdownRaw(ctx *context.APIContext) { // --- // summary: Render raw markdown as HTML // parameters: - // - name: body - // in: body - // type: string + // - name: body + // in: body + // description: Request body to render + // required: true + // schema: + // type: string // consumes: // - text/plain // produces: diff --git a/routers/api/v1/org/hook.go b/routers/api/v1/org/hook.go index 0a77d795e..83d2a5e5b 100644 --- a/routers/api/v1/org/hook.go +++ b/routers/api/v1/org/hook.go @@ -20,6 +20,12 @@ func ListHooks(ctx *context.APIContext) { // summary: List an organization's webhooks // produces: // - application/json + // parameters: + // - name: org + // in: path + // description: name of the organization + // type: string + // required: true // responses: // "200": // "$ref": "#/responses/HookList" @@ -43,6 +49,17 @@ func GetHook(ctx *context.APIContext) { // summary: Get a hook // produces: // - application/json + // parameters: + // - name: org + // in: path + // description: name of the organization + // type: string + // required: true + // - name: id + // in: path + // description: id of the hook to get + // type: integer + // required: true // responses: // "200": // "$ref": "#/responses/Hook" @@ -64,9 +81,17 @@ func CreateHook(ctx *context.APIContext, form api.CreateHookOption) { // - application/json // produces: // - application/json + // parameters: + // - name: org + // in: path + // description: name of the organization + // type: string + // required: true // responses: // "201": // "$ref": "#/responses/Hook" + + //TODO in body params if !utils.CheckCreateHookOption(ctx, &form) { return } @@ -82,9 +107,22 @@ func EditHook(ctx *context.APIContext, form api.EditHookOption) { // - application/json // produces: // - application/json + // parameters: + // - name: org + // in: path + // description: name of the organization + // type: string + // required: true + // - name: id + // in: path + // description: id of the hook to update + // type: integer + // required: true // responses: // "200": // "$ref": "#/responses/Hook" + + //TODO in body params hookID := ctx.ParamsInt64(":id") utils.EditOrgHook(ctx, &form, hookID) } @@ -96,6 +134,17 @@ func DeleteHook(ctx *context.APIContext) { // summary: Delete a hook // produces: // - application/json + // parameters: + // - name: org + // in: path + // description: name of the organization + // type: string + // required: true + // - name: id + // in: path + // description: id of the hook to delete + // type: integer + // required: true // responses: // "204": // "$ref": "#/responses/empty" diff --git a/routers/api/v1/org/team.go b/routers/api/v1/org/team.go index 408d8921d..b8dd026bf 100644 --- a/routers/api/v1/org/team.go +++ b/routers/api/v1/org/team.go @@ -227,7 +227,7 @@ func AddTeamMember(ctx *context.APIContext) { // RemoveTeamMember api for remove one member from a team func RemoveTeamMember(ctx *context.APIContext) { - // swagger:operation DELETE /teams/{id}/members/{username} organization orgAddTeamMember + // swagger:operation DELETE /teams/{id}/members/{username} organization orgRemoveTeamMember // --- // summary: Remove a team member // produces: @@ -306,7 +306,7 @@ func getRepositoryByParams(ctx *context.APIContext) *models.Repository { // AddTeamRepository api for adding a repository to a team func AddTeamRepository(ctx *context.APIContext) { - // swagger:operation PUT /teams/{id}/repos/{org}/{repo} organization orgAddTeamMember + // swagger:operation PUT /teams/{id}/repos/{org}/{repo} organization orgAddTeamRepository // --- // summary: Add a repository to a team // produces: @@ -350,7 +350,7 @@ func AddTeamRepository(ctx *context.APIContext) { // RemoveTeamRepository api for removing a repository from a team func RemoveTeamRepository(ctx *context.APIContext) { - // swagger:operation DELETE /teams/{id}/repos/{org}/{repo} organization orgAddTeamMember + // swagger:operation DELETE /teams/{id}/repos/{org}/{repo} organization orgRemoveTeamRepository // --- // summary: Remove a repository from a team // description: This does not delete the repository, it only removes the diff --git a/routers/api/v1/repo/file.go b/routers/api/v1/repo/file.go index a3c8309ac..610247bc2 100644 --- a/routers/api/v1/repo/file.go +++ b/routers/api/v1/repo/file.go @@ -64,7 +64,7 @@ func GetRawFile(ctx *context.APIContext) { // GetArchive get archive of a repository func GetArchive(ctx *context.APIContext) { - // swagger:operation GET /repos/{owner}/{repo}/archive/{filepath} repository repoGetArchive + // swagger:operation GET /repos/{owner}/{repo}/archive/{archive} repository repoGetArchive // --- // summary: Get an archive of a repository // produces: diff --git a/routers/api/v1/repo/hook.go b/routers/api/v1/repo/hook.go index e412a7f1f..1f121dfc3 100644 --- a/routers/api/v1/repo/hook.go +++ b/routers/api/v1/repo/hook.go @@ -189,6 +189,11 @@ func EditHook(ctx *context.APIContext, form api.EditHookOption) { // description: name of the repo // type: string // required: true + // - name: id + // in: path + // description: index of the hook + // type: integer + // required: true // - name: body // in: body // schema: @@ -202,7 +207,7 @@ func EditHook(ctx *context.APIContext, form api.EditHookOption) { // DeleteHook delete a hook of a repository func DeleteHook(ctx *context.APIContext) { - // swagger:operation DELETE /repos/{user}/{repo}/hooks/{id} repository repoDeleteHook + // swagger:operation DELETE /repos/{owner}/{repo}/hooks/{id} repository repoDeleteHook // --- // summary: Delete a hook in a repository // produces: diff --git a/routers/api/v1/repo/issue_comment.go b/routers/api/v1/repo/issue_comment.go index 2865ea916..0cbf6493d 100644 --- a/routers/api/v1/repo/issue_comment.go +++ b/routers/api/v1/repo/issue_comment.go @@ -31,7 +31,7 @@ func ListIssueComments(ctx *context.APIContext) { // description: name of the repo // type: string // required: true - // - name: id + // - name: index // in: path // description: index of the issue // type: integer @@ -139,7 +139,7 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti // description: name of the repo // type: string // required: true - // - name: id + // - name: index // in: path // description: index of the issue // type: integer diff --git a/routers/api/v1/repo/issue_tracked_time.go b/routers/api/v1/repo/issue_tracked_time.go index 1111d672a..9be9fee91 100644 --- a/routers/api/v1/repo/issue_tracked_time.go +++ b/routers/api/v1/repo/issue_tracked_time.go @@ -21,7 +21,7 @@ func trackedTimesToAPIFormat(trackedTimes []*models.TrackedTime) []*api.TrackedT // ListTrackedTimes list all the tracked times of an issue func ListTrackedTimes(ctx *context.APIContext) { - // swagger:operation GET /repos/{owner}/{repo}/issues/{index}/times issue issueTrackedTimes + // swagger:operation GET /repos/{owner}/{repo}/issues/{id}/times issue issueTrackedTimes // --- // summary: List an issue's tracked times // produces: @@ -37,7 +37,7 @@ func ListTrackedTimes(ctx *context.APIContext) { // description: name of the repo // type: string // required: true - // - name: repo + // - name: id // in: path // description: index of the issue // type: integer @@ -70,7 +70,7 @@ func ListTrackedTimes(ctx *context.APIContext) { // AddTime adds time manual to the given issue func AddTime(ctx *context.APIContext, form api.AddTimeOption) { - // swagger:operation Post /repos/{owner}/{repo}/issues/{index}/times issue issueAddTime + // swagger:operation Post /repos/{owner}/{repo}/issues/{id}/times issue issueAddTime // --- // summary: Add a tracked time to a issue // consumes: @@ -132,7 +132,7 @@ func AddTime(ctx *context.APIContext, form api.AddTimeOption) { // ListTrackedTimesByUser lists all tracked times of the user func ListTrackedTimesByUser(ctx *context.APIContext) { - // swagger:operation GET /repos/{owner}/{repo}/times/{tracker} user userTrackedTimes + // swagger:operation GET /repos/{owner}/{repo}/times/{user} user userTrackedTimes // --- // summary: List a user's tracked times in a repo // produces: diff --git a/routers/api/v1/repo/milestone.go b/routers/api/v1/repo/milestone.go index 3953b0c3c..a138cb7a6 100644 --- a/routers/api/v1/repo/milestone.go +++ b/routers/api/v1/repo/milestone.go @@ -16,30 +16,7 @@ import ( // ListMilestones list all the milestones for a repository func ListMilestones(ctx *context.APIContext) { - // swagger:operation GET /repos/{owner}/{repo}/milestones/{id} issue issueGetMilestone - // --- - // summary: Get a milestone - // produces: - // - application/json - // responses: - // "200": - // "$ref": "#/responses/Milestone" - milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID) - if err != nil { - ctx.Error(500, "GetMilestonesByRepoID", err) - return - } - - apiMilestones := make([]*api.Milestone, len(milestones)) - for i := range milestones { - apiMilestones[i] = milestones[i].APIFormat() - } - ctx.JSON(200, &apiMilestones) -} - -// GetMilestone get a milestone for a repository -func GetMilestone(ctx *context.APIContext) { - // swagger:operation GET /repos/{owner}/{repo}/milestones issue issueGetMilestones + // swagger:operation GET /repos/{owner}/{repo}/milestones issue issueGetMilestonesList // --- // summary: Get all of a repository's milestones // produces: @@ -55,6 +32,29 @@ func GetMilestone(ctx *context.APIContext) { // description: name of the repo // type: string // required: true + // responses: + // "200": + // "$ref": "#/responses/MilestoneList" + milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID) + if err != nil { + ctx.Error(500, "GetMilestonesByRepoID", err) + return + } + + apiMilestones := make([]*api.Milestone, len(milestones)) + for i := range milestones { + apiMilestones[i] = milestones[i].APIFormat() + } + ctx.JSON(200, &apiMilestones) +} + +// GetMilestone get a milestone for a repository +func GetMilestone(ctx *context.APIContext) { + // swagger:operation GET /repos/{owner}/{repo}/milestones/{id} issue issueGetMilestone + // --- + // summary: Get a milestone + // produces: + // - application/json // parameters: // - name: owner // in: path @@ -68,12 +68,12 @@ func GetMilestone(ctx *context.APIContext) { // required: true // - name: id // in: path - // description: id of the milestone to get + // description: id of the milestone // type: integer // required: true // responses: // "200": - // "$ref": "#/responses/MilestoneList" + // "$ref": "#/responses/Milestone" milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) if err != nil { if models.IsErrMilestoneNotExist(err) { @@ -152,6 +152,11 @@ func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) { // description: name of the repo // type: string // required: true + // - name: id + // in: path + // description: id of the milestone + // type: integer + // required: true // - name: body // in: body // schema: @@ -202,7 +207,7 @@ func DeleteMilestone(ctx *context.APIContext) { // description: name of the repo // type: string // required: true - // - name: body + // - name: id // in: path // description: id of the milestone to delete // type: integer diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 9f64dda61..ccfe0440c 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -508,13 +508,13 @@ func TopicSearch(ctx *context.Context) { // --- // summary: search topics via keyword // produces: - // - application/json + // - application/json // parameters: - // - name: keyword - // in: path - // description: id of the repo to get - // type: integer - // required: true + // - name: q + // in: query + // description: keywords to search + // required: true + // type: string // responses: // "200": // "$ref": "#/responses/Repository" diff --git a/routers/api/v1/swagger/options.go b/routers/api/v1/swagger/options.go index 8d9363fe9..4f2461f46 100644 --- a/routers/api/v1/swagger/options.go +++ b/routers/api/v1/swagger/options.go @@ -15,55 +15,87 @@ import ( // parameterBodies // swagger:response parameterBodies type swaggerParameterBodies struct { + // in:body AddCollaboratorOption api.AddCollaboratorOption + // in:body CreateEmailOption api.CreateEmailOption + // in:body DeleteEmailOption api.DeleteEmailOption + // in:body CreateHookOption api.CreateHookOption - EditHookOption api.EditHookOption + // in:body + EditHookOption api.EditHookOption + // in:body CreateIssueOption api.CreateIssueOption - EditIssueOption api.EditIssueOption + // in:body + EditIssueOption api.EditIssueOption + // in:body CreateIssueCommentOption api.CreateIssueCommentOption - EditIssueCommentOption api.EditIssueCommentOption + // in:body + EditIssueCommentOption api.EditIssueCommentOption + // in:body IssueLabelsOption api.IssueLabelsOption + // in:body CreateKeyOption api.CreateKeyOption + // in:body CreateLabelOption api.CreateLabelOption - EditLabelOption api.EditLabelOption + // in:body + EditLabelOption api.EditLabelOption + // in:body MarkdownOption api.MarkdownOption + // in:body CreateMilestoneOption api.CreateMilestoneOption - EditMilestoneOption api.EditMilestoneOption + // in:body + EditMilestoneOption api.EditMilestoneOption + // in:body CreateOrgOption api.CreateOrgOption - EditOrgOption api.EditOrgOption + // in:body + EditOrgOption api.EditOrgOption + // in:body CreatePullRequestOption api.CreatePullRequestOption - EditPullRequestOption api.EditPullRequestOption + // in:body + EditPullRequestOption api.EditPullRequestOption + // in:body CreateReleaseOption api.CreateReleaseOption - EditReleaseOption api.EditReleaseOption + // in:body + EditReleaseOption api.EditReleaseOption + // in:body CreateRepoOption api.CreateRepoOption + // in:body CreateForkOption api.CreateForkOption + // in:body CreateStatusOption api.CreateStatusOption + // in:body CreateTeamOption api.CreateTeamOption - EditTeamOption api.EditTeamOption + // in:body + EditTeamOption api.EditTeamOption + // in:body AddTimeOption api.AddTimeOption + // in:body CreateUserOption api.CreateUserOption - EditUserOption api.EditUserOption + // in:body + EditUserOption api.EditUserOption + // in:body MigrateRepoForm auth.MigrateRepoForm + // in:body EditAttachmentOptions api.EditAttachmentOptions } diff --git a/routers/api/v1/swagger/repo.go b/routers/api/v1/swagger/repo.go index 97837dfc2..9decc8f58 100644 --- a/routers/api/v1/swagger/repo.go +++ b/routers/api/v1/swagger/repo.go @@ -102,6 +102,7 @@ type swaggerResponseWatchInfo struct { // SearchResults // swagger:response SearchResults type swaggerResponseSearchResults struct { + // in:body Body api.SearchResults `json:"body"` } diff --git a/routers/api/v1/user/app.go b/routers/api/v1/user/app.go index e1f75de68..fc4118649 100644 --- a/routers/api/v1/user/app.go +++ b/routers/api/v1/user/app.go @@ -18,6 +18,12 @@ func ListAccessTokens(ctx *context.APIContext) { // summary: List the authenticated user's access tokens // produces: // - application/json + // parameters: + // - name: username + // in: path + // description: username of user + // type: string + // required: true // responses: // "200": // "$ref": "#/responses/AccessTokenList" @@ -46,6 +52,12 @@ func CreateAccessToken(ctx *context.APIContext, form api.CreateAccessTokenOption // - application/json // produces: // - application/json + // parameters: + // - name: username + // in: path + // description: username of user + // type: string + // required: true // responses: // "200": // "$ref": "#/responses/AccessToken" diff --git a/routers/api/v1/user/follower.go b/routers/api/v1/user/follower.go index 49d13cc38..284b7323c 100644 --- a/routers/api/v1/user/follower.go +++ b/routers/api/v1/user/follower.go @@ -119,11 +119,11 @@ func checkUserFollowing(ctx *context.APIContext, u *models.User, followID int64) // CheckMyFollowing whether the given user is followed by the authenticated user func CheckMyFollowing(ctx *context.APIContext) { - // swagger:operation GET /user/following/{followee} user userCurrentCheckFollowing + // swagger:operation GET /user/following/{username} user userCurrentCheckFollowing // --- // summary: Check whether a user is followed by the authenticated user // parameters: - // - name: followee + // - name: username // in: path // description: username of followed user // type: string From 406031d3ccbf844a400f8382c84c5bee3f46d98b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 13 Jun 2018 00:44:17 +0800 Subject: [PATCH 005/124] fix bug when deleting a release (#4207) --- models/release.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/models/release.go b/models/release.go index 630995a74..e3760e9ef 100644 --- a/models/release.go +++ b/models/release.go @@ -448,6 +448,11 @@ func DeleteReleaseByID(id int64, u *User, delTag bool) error { } } + rel.Repo = repo + if err = rel.LoadAttributes(); err != nil { + return fmt.Errorf("LoadAttributes: %v", err) + } + mode, _ := accessLevel(x, u.ID, rel.Repo) if err := PrepareWebhooks(rel.Repo, HookEventRelease, &api.ReleasePayload{ Action: api.HookReleaseDeleted, From 2b8c0bb5e2010d6691e80919f3e9ea65348162b1 Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Tue, 12 Jun 2018 20:02:51 +0300 Subject: [PATCH 006/124] Delete reactions added to issues and comments when deleting repository (#4232) --- models/repo.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/models/repo.go b/models/repo.go index c95c867f3..f4923cf4a 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1848,6 +1848,9 @@ func DeleteRepository(doer *User, uid, repoID int64) error { if _, err = sess.In("issue_id", issueIDs).Delete(&IssueUser{}); err != nil { return err } + if _, err = sess.In("issue_id", issueIDs).Delete(&Reaction{}); err != nil { + return err + } attachments := make([]*Attachment, 0, 5) if err = sess. From 6efdcaed86565c91a3dc77631372a9cc45a58e89 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Wed, 13 Jun 2018 01:23:00 +0200 Subject: [PATCH 007/124] Fix swagger security parts (#4236) --- public/swagger.v1.json | 16 ++++------------ routers/api/v1/api.go | 8 ++++---- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/public/swagger.v1.json b/public/swagger.v1.json index 1c381a829..e0f2a7589 100644 --- a/public/swagger.v1.json +++ b/public/swagger.v1.json @@ -7864,24 +7864,16 @@ }, "security": [ { - "BasicAuth": [ - "[]" - ] + "BasicAuth": [] }, { - "Token": [ - "[]" - ] + "Token": [] }, { - "AccessToken": [ - "[]" - ] + "AccessToken": [] }, { - "AuthorizationHeaderToken": [ - "[]" - ] + "AuthorizationHeaderToken": [] } ] } \ No newline at end of file diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index eec55cac6..5007a0d56 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -20,10 +20,10 @@ // - text/html // // Security: -// - BasicAuth: [] -// - Token: [] -// - AccessToken: [] -// - AuthorizationHeaderToken: [] +// - BasicAuth : +// - Token : +// - AccessToken : +// - AuthorizationHeaderToken : // // SecurityDefinitions: // BasicAuth: From adba2ad609ca3f1612463a4ac6af22fd30b9e75f Mon Sep 17 00:00:00 2001 From: David Schneiderbauer Date: Fri, 15 Jun 2018 05:42:46 +0200 Subject: [PATCH 008/124] fix not respecting landing page setting (#4209) * fix not respecting landing page setting * fmt * add landing page test --- integrations/setting_test.go | 22 ++++++++++++++++++++++ modules/context/auth.go | 6 ------ routers/home.go | 4 ++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/integrations/setting_test.go b/integrations/setting_test.go index a8d1f01e8..2aac8e90e 100644 --- a/integrations/setting_test.go +++ b/integrations/setting_test.go @@ -68,3 +68,25 @@ func TestSettingShowUserEmailProfile(t *testing.T) { setting.UI.ShowUserEmail = showUserEmail } + +func TestSettingLandingPage(t *testing.T) { + prepareTestEnv(t) + + landingPage := setting.LandingPageURL + + setting.LandingPageURL = setting.LandingPageHome + req := NewRequest(t, "GET", "/") + MakeRequest(t, req, http.StatusOK) + + setting.LandingPageURL = setting.LandingPageExplore + req = NewRequest(t, "GET", "/") + resp := MakeRequest(t, req, http.StatusFound) + assert.Equal(t, "/explore", resp.Header().Get("Location")) + + setting.LandingPageURL = setting.LandingPageOrganizations + req = NewRequest(t, "GET", "/") + resp = MakeRequest(t, req, http.StatusFound) + assert.Equal(t, "/explore/organizations", resp.Header().Get("Location")) + + setting.LandingPageURL = landingPage +} diff --git a/modules/context/auth.go b/modules/context/auth.go index 372bcb187..c38cc3948 100644 --- a/modules/context/auth.go +++ b/modules/context/auth.go @@ -37,12 +37,6 @@ func Toggle(options *ToggleOptions) macaron.Handler { return } - // Check non-logged users landing page. - if !ctx.IsSigned && ctx.Req.RequestURI == "/" && setting.LandingPageURL != setting.LandingPageHome { - ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL)) - return - } - // Redirect to dashboard if user tries to visit any non-login page. if options.SignOutRequired && ctx.IsSigned && ctx.Req.RequestURI != "/" { ctx.Redirect(setting.AppSubURL + "/") diff --git a/routers/home.go b/routers/home.go index 5bb353c7e..0aa907658 100644 --- a/routers/home.go +++ b/routers/home.go @@ -42,6 +42,10 @@ func Home(ctx *context.Context) { user.Dashboard(ctx) } return + // Check non-logged users landing page. + } else if setting.LandingPageURL != setting.LandingPageHome { + ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL)) + return } // Check auto-login. From a75f2511951120c9ba1f954cfe48e4ce73687c72 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Fri, 15 Jun 2018 03:43:54 +0000 Subject: [PATCH 009/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_de-DE.ini | 1 + options/locale/locale_uk-UA.ini | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index 4e56b3028..364308424 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -213,6 +213,7 @@ send_reset_mail=E-Mail zum Passwort-zurücksetzen erneut verschicken reset_password=Passwort zurücksetzen invalid_code=Dein Bestätigungs-Code ist ungültig oder abgelaufen. reset_password_helper=Passwort zurückzusetzen +password_too_short=Das Passwort muss mindestens %d Zeichen lang sein. non_local_account=Benutzer, die nicht von Gitea verwaltet werden können ihre Passwörter nicht über das Web Interface ändern. verify=Verifizieren scratch_code=Einmalpasswort diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 3bc79cdd5..d59851e6a 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -38,6 +38,7 @@ u2f_use_twofa=Використовуйте дво-факторний код з u2f_error=Неможливо прочитати ваш ключ безпеки! u2f_unsupported_browser=Ваш браузер не підтримує U2F ключі. Будь ласка, спробуйте інший браузер. u2f_error_1=Сталася невідома помилка. Спробуйте ще раз. +u2f_error_2=Переконайтеся, що ви використовуєте зашифроване з'єднання (https://) та відвідуєте правильну URL-адресу. u2f_error_3=Сервер не може обробити, ваш запит. u2f_reload=Оновити @@ -398,7 +399,12 @@ generate_token=Згенерувати токен delete_token=Видалити access_token_deletion=Видалити токен доступу +twofa_desc=Двофакторна аутентифікація підвищує безпеку вашого облікового запису. +twofa_is_enrolled=Ваш обліковий запис в даний час використовує двофакторну автентифікацію. twofa_disable=Вимкнути двофакторну автентифікацію +twofa_enroll=Увімкнути двофакторну автентифікацію +twofa_disabled=Двофакторна автентифікація вимкнена. +scan_this_image=Проскануйте це зображення вашим додатком для двуфакторної аутентифікації: or_enter_secret=Або введіть секрет: %s passcode_invalid=Некоректний пароль. Спробуй ще раз. From a7aaacb633a1f391eab6e8f2aa4f57b83d41c66c Mon Sep 17 00:00:00 2001 From: stevegt Date: Fri, 15 Jun 2018 00:47:13 -0700 Subject: [PATCH 010/124] fix CreateIssueCommentOption reference (#4239) * fixes a warning remaining from #4010 and #4220 --- public/swagger.v1.json | 2 +- routers/api/v1/repo/issue_comment.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/swagger.v1.json b/public/swagger.v1.json index e0f2a7589..9fd790281 100644 --- a/public/swagger.v1.json +++ b/public/swagger.v1.json @@ -2208,7 +2208,7 @@ "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/CreateIssueOption" + "$ref": "#/definitions/CreateIssueCommentOption" } } ], diff --git a/routers/api/v1/repo/issue_comment.go b/routers/api/v1/repo/issue_comment.go index 0cbf6493d..af952a070 100644 --- a/routers/api/v1/repo/issue_comment.go +++ b/routers/api/v1/repo/issue_comment.go @@ -147,7 +147,7 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti // - name: body // in: body // schema: - // "$ref": "#/definitions/CreateIssueOption" + // "$ref": "#/definitions/CreateIssueCommentOption" // responses: // "201": // "$ref": "#/responses/Comment" From c919b07a53e837a3aa7a82f8b1530e3b7ee1773d Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Fri, 15 Jun 2018 07:48:26 +0000 Subject: [PATCH 011/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_uk-UA.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index d59851e6a..511e6671f 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -400,7 +400,7 @@ delete_token=Видалити access_token_deletion=Видалити токен доступу twofa_desc=Двофакторна аутентифікація підвищує безпеку вашого облікового запису. -twofa_is_enrolled=Ваш обліковий запис в даний час використовує двофакторну автентифікацію. +twofa_is_enrolled=Ваш обліковий запис на даний час використовує двофакторну автентифікацію. twofa_disable=Вимкнути двофакторну автентифікацію twofa_enroll=Увімкнути двофакторну автентифікацію twofa_disabled=Двофакторна автентифікація вимкнена. From 23ba5c870fc27b59202c4bd90c5d5b38fb018565 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Fri, 15 Jun 2018 14:42:49 +0200 Subject: [PATCH 012/124] markup: escape short wiki link (#4091) --- modules/markup/html.go | 3 +++ modules/markup/html_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/modules/markup/html.go b/modules/markup/html.go index 4f9d02a8f..a4ef86de2 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -469,6 +469,9 @@ func shortLinkProcessorFull(ctx *postProcessCtx, node *html.Node, noLink bool) { } else { link = strings.Replace(link, " ", "-", -1) } + if !strings.Contains(link, "/") { + link = url.PathEscape(link) + } } urlPrefix := ctx.urlPrefix if image { diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index fc11532d1..bf7606e1d 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -82,12 +82,18 @@ func TestRender_ShortLinks(t *testing.T) { rawtree := util.URLJoin(AppSubURL, "raw", "master") url := util.URLJoin(tree, "Link") otherURL := util.URLJoin(tree, "Other-Link") + encodedURL := util.URLJoin(tree, "Link%3F") imgurl := util.URLJoin(rawtree, "Link.jpg") otherImgurl := util.URLJoin(rawtree, "Link+Other.jpg") + encodedImgurl := util.URLJoin(rawtree, "Link+%23.jpg") + notencodedImgurl := util.URLJoin(rawtree, "some", "path", "Link+#.jpg") urlWiki := util.URLJoin(AppSubURL, "wiki", "Link") otherURLWiki := util.URLJoin(AppSubURL, "wiki", "Other-Link") + encodedURLWiki := util.URLJoin(AppSubURL, "wiki", "Link%3F") imgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link.jpg") otherImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+Other.jpg") + encodedImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+%23.jpg") + notencodedImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "some", "path", "Link+#.jpg") favicon := "http://google.com/favicon.ico" test( @@ -134,4 +140,24 @@ func TestRender_ShortLinks(t *testing.T) { "[[Link]] [[Other Link]]", `

Link Other Link

`, `

Link Other Link

`) + test( + "[[Link?]]", + `

Link?

`, + `

Link?

`) + test( + "[[Link]] [[Other Link]] [[Link?]]", + `

Link Other Link Link?

`, + `

Link Other Link Link?

`) + test( + "[[Link #.jpg]]", + `

`, + `

`) + test( + "[[Name|Link #.jpg|alt=\"AltName\"|title='Title']]", + `

AltName

`, + `

AltName

`) + test( + "[[some/path/Link #.jpg]]", + `

`, + `

`) } From 3aafa0400ea3e003baed1e8c8bd1f986730d0253 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Fri, 15 Jun 2018 12:43:56 +0000 Subject: [PATCH 013/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_uk-UA.ini | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 511e6671f..f49b98280 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -68,7 +68,7 @@ activities=Дії pull_requests=Запити на злиття issues=Проблеми -cancel=Відміна +cancel=Відмінити [install] install=Встановлення @@ -318,7 +318,7 @@ update_profile=Оновити профіль update_profile_success=Профіль успішно оновлено. change_username=Ваше Ім'я кристувача було змінено. continue=Продовжити -cancel=Відміна +cancel=Відмінити language=Мова lookup_avatar_by_mail=Знайти Аватар за адресою електронної пошти @@ -532,7 +532,7 @@ editor.commit_message_desc=Додати необов'язковий розшир editor.commit_directly_to_this_branch=Зробіть коміт прямо в гілку %s. editor.create_new_branch=Створити нову гілку для цього коміту та відкрити запит на злиття. editor.new_branch_name_desc=Ім'я нової гілки… -editor.cancel=Відміна +editor.cancel=Відмінити editor.filename_cannot_be_empty=Ім'я файлу не може бути порожнім. editor.branch_already_exists=Гілка '%s' вже присутня в репозиторії. editor.directory_is_a_file=Ім'я каталогу "%s" уже використовується як ім'я файлу в цьому репозиторії. @@ -634,7 +634,7 @@ issues.collaborator=Співавтор issues.owner=Власник issues.sign_in_require_desc=Підпишіться щоб приєднатися до обговорення. issues.edit=Редагувати -issues.cancel=Відміна +issues.cancel=Відмінити issues.save=Зберегти issues.label_title=Назва мітки issues.label_description=Опис мітки @@ -663,11 +663,11 @@ issues.tracking_already_started=`Ви вже почали відстежуват issues.stop_tracking=Стоп issues.add_time=Вручну додати час issues.add_time_short=Додати час -issues.add_time_cancel=Відміна +issues.add_time_cancel=Відмінити issues.add_time_hours=Години issues.add_time_minutes=Хвилини issues.add_time_sum_to_small=Час не введено. -issues.cancel_tracking=Відміна +issues.cancel_tracking=Відмінити issues.cancel_tracking_history=`скасував відстеження часу %s` issues.time_spent_total=Загальний витрачений час issues.time_spent_from_all_authors=`Загальний витрачений час: %s` @@ -718,7 +718,7 @@ milestones.desc=Опис milestones.due_date=Дата завершення (опціонально) milestones.clear=Очистити milestones.edit=Редагувати етап -milestones.cancel=Відміна +milestones.cancel=Відмінити milestones.modify=Оновити етап milestones.deletion=Видалити етап milestones.filter_sort.most_issues=Найбільш проблем @@ -939,7 +939,7 @@ release.preview=Переглянути release.loading=Завантаження… release.prerelease_desc=Позначити як пре-реліз release.prerelease_helper=Позначте цей випуск непридатним для ПРОД використання. -release.cancel=Відміна +release.cancel=Відмінити release.publish=Опублікувати реліз release.save_draft=Зберегти чернетку release.edit_release=Оновити реліз From 85414d8b754639cae1a9c361bbdc0714f06b87c1 Mon Sep 17 00:00:00 2001 From: Jonas Franz Date: Fri, 15 Jun 2018 16:07:48 +0200 Subject: [PATCH 014/124] Show second line by using >= 1 instead of > 1 (#4251) Signed-off-by: Jonas Franz --- modules/templates/helper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/templates/helper.go b/modules/templates/helper.go index bf5c0130b..b6c835ad4 100644 --- a/modules/templates/helper.go +++ b/modules/templates/helper.go @@ -323,7 +323,7 @@ func RenderCommitBody(msg, urlPrefix string, metas map[string]string) template.H // IsMultilineCommitMessage checks to see if a commit message contains multiple lines. func IsMultilineCommitMessage(msg string) bool { - return strings.Count(strings.TrimSpace(msg), "\n") > 1 + return strings.Count(strings.TrimSpace(msg), "\n") >= 1 } // Actioner describes an action From 90ad73ae21b40de98bf1986e550c3d965033dc21 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 18 Jun 2018 19:16:53 +0200 Subject: [PATCH 015/124] Reorganized feature comparison (#4264) --- docs/content/doc/features/comparison.en-us.md | 746 +++--------------- 1 file changed, 90 insertions(+), 656 deletions(-) diff --git a/docs/content/doc/features/comparison.en-us.md b/docs/content/doc/features/comparison.en-us.md index 981365c71..698de4f46 100644 --- a/docs/content/doc/features/comparison.en-us.md +++ b/docs/content/doc/features/comparison.en-us.md @@ -27,659 +27,93 @@ _Symbols used in table:_ * _✘ - unsupported_ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeatureGiteaGogsGitHub EEGitLab CEGitLab EEBitBucketRhodeCode CE
Open source and free
Issue tracker
Pull/Merge requests
Squash merging
Rebase merging
Pull/Merge request inline comments
Pull/Merge request approval
Merge conflict resolution
Restrict push and merge access to certain users
Markdown support
Issues and pull/merge requests templates
Revert specific commits or a merge request
Labels
Time tracking
Multiple assignees for issues
Related issues
Confidential issues
Comment reactions
Lock Discussion
Batch issue handling
Issue Boards
Create new branches from issues
Commit graph
Web code editor
Branch manager
Create new branches
Repository topics
Repository code search
Global code search
Issue search
Global issue search
Git LFS 2.0
Integrated Git-powered wiki
Static Git-powered pages
Group Milestones
Granular user roles (Code, Issues, Wiki etc)
Cherry-picking changes
GPG Signed Commits
Reject unsigned commits
Verified Committer?
Subgroups: groups within groups
Custom Git Hooks
Repository Activity page
Deploy Tokens
Repository Tokens with write rights
Easy upgrade process
Built-in Container Registry
External git mirroring
AD / LDAP integration
Multiple LDAP / AD server support
LDAP user synchronization
OpenId Connect support?
OAuth 2.0 integration (external authorization)?
Act as OAuth 2.0 provider
Two factor authentication (2FA)
FIDO U2F (2FA)
Webhook support
Mattermost/Slack integration
Discord integration
Built-in CI/CD
External CI/CD status display
Multiple database support
Multiple OS support
Low resource usage (RAM/CPU)
+#### General Features + +| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE | +|---------|-------|------|-----------|-----------|-----------|-----------|--------------| +| Open source and free | ✓ | ✓ | ✘| ✓ | ✘ | ✘ | ✓ | +| Low resource usage (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | +| Multiple database support | ✓ | ✓ | ✘ | ⁄ | ⁄ | ✓ | ✓ | +| Multiple OS support | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ | +| Easy upgrade process | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ | +| Markdown support | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Static Git-powered pages | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Integrated Git-powered wiki | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | +| Deploy Tokens | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Repository Tokens with write rights | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✓ | +| Built-in Container Registry | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ | +| External git mirroring | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ | +| FIDO U2F (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ | +| Built-in CI/CD | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ | +| Subgroups: groups within groups | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ | + +#### Code management + +| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE | +|---------|-------|------|-----------|-----------|-----------|-----------|--------------| +| Repository topics | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Repository code search | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Global code search | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Git LFS 2.0 | ✓ | ✘ | ✓ | ✓ | ✓ | ⁄ | ✓ | +| Group Milestones | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ | +| Granular user roles (Code, Issues, Wiki etc) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ | +| Verified Committer | ✘ | ✘ | ? | ✓ | ✓ | ✓ | ✘ | +| GPG Signed Commits | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Reject unsigned commits | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✓ | +| Repository Activity page | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Branch manager | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Create new branches | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Web code editor | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Commit graph | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | + +#### Issue Tracker + +| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE | +|---------|-------|------|-----------|-----------|-----------|-----------|--------------| +| Issue tracker | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | +| Issue templates | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Labels | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Time tracking | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Multiple assignees for issues | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Related issues | ✘ | ✘ | ⁄ | ✘ | ✓ | ✘ | ✘ | +| Confidential issues | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ | +| Comment reactions | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Lock Discussion | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Batch issue handling | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Issue Boards | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ | +| Create new branches from issues | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ | +| Issue search | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ | +| Global issue search | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ | + +#### Pull/Merge requests + +| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE | +|---------|-------|------|-----------|-----------|-----------|-----------|--------------| +| Pull/Merge requests | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Squash merging | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ | +| Rebase merging | ✓ | ✓ | ✓ | ✘ | ⁄ | ✘ | ✓ | +| Pull/Merge request inline comments | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Pull/Merge request approval | ✘ | ✘ | ⁄ | ✓ | ✓ | ✓ | ✓ | +| Merge conflict resolution | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ | +| Restrict push and merge access to certain users | ✓ | ✘ | ✓ | ⁄ | ✓ | ✓ | ✓ | +| Revert specific commits or a merge request | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ | +| Pull/Merge requests templates | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ | +| Cherry-picking changes | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ | + + +#### 3rd-party integrations + +| Feature | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE | +|---------|-------|------|-----------|-----------|-----------|-----------|--------------| +| Webhook support | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Custom Git Hooks | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| AD / LDAP integration | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| Multiple LDAP / AD server support | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ | +| LDAP user synchronization | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | +| OpenId Connect support | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ✘ | +| OAuth 2.0 integration (external authorization) | ✓ | ✘ | ⁄ | ✓ | ✓ | ? | ✓ | +| Act as OAuth 2.0 provider | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ | +| Two factor authentication (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | +| Mattermost/Slack integration | ✓ | ✓ | ⁄ | ✓ | ✓ | ⁄ | ✓ | +| Discord integration | ✓ | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | +| External CI/CD status display | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | From 6e39f3d422155293a06df6430766a40ebc56277c Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Mon, 18 Jun 2018 17:18:22 +0000 Subject: [PATCH 016/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_de-DE.ini | 310 ++++++++++++++++---------------- options/locale/locale_uk-UA.ini | 10 +- 2 files changed, 162 insertions(+), 158 deletions(-) diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index 364308424..d618d2c9a 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -83,12 +83,12 @@ host=Host user=Benutzername password=Passwort db_name=Datenbankname -db_helper=Hinweis für MySQL-Benutzer: Bitte verwende das InnoDB Speichersubsystem und den Zeichensatz "utf8_general_ci". +db_helper=Hinweis für MySQL-Benutzer: Bitte verwende das InnoDB-Speichersubsystem und den Zeichensatz „utf8_general_ci“. ssl_mode=SSL path=Pfad sqlite_helper=Der Dateipfad zur SQLite3- oder TiDB-Datenbank.
Bitte verwende einen absoluten Pfad, wenn Gitea als Service gestartet wird. -err_empty_db_path=Der SQLite3 oder TiDB Datenbankpfad darf nicht leer sein. -err_invalid_tidb_name=Der TiDB Datenbankname darf nicht die Zeichen "." und "-" enthalten. +err_empty_db_path=Der SQLite3- oder TiDB-Datenbankpfad darf nicht leer sein. +err_invalid_tidb_name=Der TiDB-Datenbankname darf nicht die Zeichen „.“ und „-“ enthalten. no_admin_and_disable_registration=Du kannst Selbst-Registrierungen nicht deaktivieren, ohne ein Administratorkonto zu erstellen. err_empty_admin_password=Das Administrator-Passwort darf nicht leer sein. @@ -101,13 +101,13 @@ lfs_path=Git LFS-Wurzelpfad lfs_path_helper=In diesem Verzeichnis werden die Dateien von Git LFS abgespeichert. Leer lassen um LFS zu deaktivieren. run_user=Ausführen als run_user_helper=Gebe den Betriebssystem-Benutzernamen ein, unter welchem Gitea laufen soll. Beachte, dass dieser Nutzer Zugriff auf den Repository-Ordner haben muss. -domain=SSH Server-Domain +domain=SSH-Server-Domain domain_helper=Domain oder Host-Adresse für die SSH-URL. -ssh_port=SSH Server Port +ssh_port=SSH-Server-Port ssh_port_helper=Der Port deines SSH-Servers. Leer lassen um SSH zu deaktivieren. -http_port=Gitea HTTP-Listen-Port -http_port_helper=Port unter dem der Gitea Web Server laufen soll. -app_url=Gitea Basis-URL +http_port=Gitea-HTTP-Listen-Port +http_port_helper=Port, unter dem der Gitea-Webserver laufen soll. +app_url=Gitea-Basis-URL app_url_helper=Adresse für HTTP(S)-Klon-URLs und E-Mail-Benachrichtigungen. log_root_path=Logdateipfad log_root_path_helper=Log-Dateien werden in diesem Verzeichnis gespeichert. @@ -117,8 +117,8 @@ email_title=E-Mail-Einstellungen smtp_host=SMTP-Server smtp_from=E-Mail senden als smtp_from_helper=E-Mail-Adresse, die von Gitea genutzt werden soll. Bitte gib die E-Mail-Adresse im '"Name" '-Format ein. -mailer_user=SMTP Benutzername -mailer_password=SMTP Passwort +mailer_user=SMTP-Benutzername +mailer_password=SMTP-Passwort register_confirm=E-Mail-Bestätigung benötigt zum Registrieren mail_notify=E-Mail-Benachrichtigungen aktivieren server_service_title=Sonstige Server- und Drittserviceeinstellungen @@ -131,9 +131,9 @@ federated_avatar_lookup_popup=Föderierte Profilbilder via Libravatar aktivieren disable_registration=Registrierung deaktivieren disable_registration_popup=Registrierung neuer Benutzer deaktivieren. Nur Administratoren werden neue Benutzerkonten anlegen können. allow_only_external_registration_popup=Registrierung nur über externe Services aktiveren. -openid_signin=OpenID Anmeldung aktivieren +openid_signin=OpenID-Anmeldung aktivieren openid_signin_popup=Benutzeranmeldung via OpenID aktivieren. -openid_signup=OpenID Selbstregistrierung aktivieren +openid_signup=OpenID-Selbstregistrierung aktivieren openid_signup_popup=OpenID-basierte Selbstregistrierung aktivieren. enable_captcha=CAPTCHA aktivieren enable_captcha_popup=Captcha-Eingabe bei der Registrierung erforderlich. @@ -147,10 +147,10 @@ confirm_password=Passwort bestätigen admin_email=E-Mail-Adresse install_btn_confirm=Gitea installieren test_git_failed=Fehler beim Test des 'git' Kommandos: %v -sqlite3_not_available=Diese Gitea-Version unterstützt SQLite3 nicht. Bitte lade die offizielle binäre Version von %s herunter (nicht die 'gobuild'-Version). +sqlite3_not_available=Diese Gitea-Version unterstützt SQLite3 nicht. Bitte lade die offizielle binäre Version von %s herunter (nicht die „gobuild“-Version). invalid_db_setting=Datenbankeinstellungen sind ungültig: %v invalid_repo_path=Repository-Verzeichnis ist ungültig: %v -run_user_not_match=Der "Ausführen als" Benutzer ist nicht der aktuelle Benutzer: %s -> %s +run_user_not_match=Der „Ausführen als“-Benutzername ist nicht der aktuelle Benutzername: %s -> %s save_config_failed=Fehler beim Speichern der Konfiguration: %v invalid_admin_setting=Administrator-Konto Einstellungen sind ungültig: %v install_success=Willkommen! Danke, dass du Gitea gewählt hast. Viel Spaß! @@ -162,7 +162,7 @@ default_allow_create_organization_popup=Neuen Nutzern das Erstellen von Organisa default_enable_timetracking=Zeiterfassung standardmäßig aktivieren default_enable_timetracking_popup=Zeiterfassung standardmäßig für neue Repositories aktivieren. no_reply_address=Versteckte E-Mail-Domain -no_reply_address_helper=Domain-Namen für Benutzer mit einer versteckten Emailadresse. Zum Beispiel wird der Benutzername "Joe" in Git als "joe@noreply.example.org" protokolliert, wenn die versteckte E-Mail-Domäne "noreply.example.org" festgelegt ist. +no_reply_address_helper=Domain-Name für Benutzer mit einer versteckten Emailadresse. Zum Beispiel wird der Benutzername „Joe“ in Git als „joe@noreply.example.org“ protokolliert, wenn die versteckte E-Mail-Domain „noreply.example.org“ festgelegt ist. [home] uname_holder=E-Mail-Adresse oder Benutzername @@ -225,9 +225,9 @@ login_userpass=Anmelden login_openid=OpenID openid_connect_submit=Verbinden openid_connect_title=Mit bestehendem Konto verbinden -openid_connect_desc=Die gewählte OpenID URI ist unbekannt. Ordne sie hier einem neuen Account zu. +openid_connect_desc=Die gewählte OpenID-URI ist unbekannt. Ordne sie hier einem neuen Account zu. openid_register_title=Neues Konto einrichten -openid_register_desc=Die gewählte OpenID URI ist unbekannt. Ordne sie hier einem neuen Account zu. +openid_register_desc=Die gewählte OpenID-URI ist unbekannt. Ordne sie hier einem neuen Account zu. openid_signin_desc=Gib deine OpenID-URI ein. Zum Beispiel: https://anne.me, bob.openid.org.cn oder gnusocial.net/carry. disable_forgot_password_mail=Das Zurücksetzen von Passwörtern wurde deaktiviert. Bitte wende dich an den Administrator. @@ -264,8 +264,8 @@ TreeName=Dateipfad Content=Inhalt require_error=` darf nicht leer sein.` -alpha_dash_error=` sollte nur Buchstaben, Zahlen, Bindestriche ('-') und Unterstriche ('_') enthalten` -alpha_dash_dot_error=` sollte nur Buchstaben, Zahlen, Bindestriche ('-'), Unterstriche ('_') und Punkte ('.') enthalten` +alpha_dash_error=` sollte nur Buchstaben, Zahlen, Bindestriche („-“) und Unterstriche („_“) enthalten.` +alpha_dash_dot_error=` sollte nur Buchstaben, Zahlen, Bindestriche („-“), Unterstriche („_“) und Punkte („.“) enthalten.` git_ref_name_error=` muss ein wohlgeformter Git-Referenzname sein.` size_error=` muss die Größe %s haben.` min_size_error=` muss mindestens %s Zeichen enthalten.` @@ -283,13 +283,13 @@ org_name_been_taken=Der Organisationsname ist bereits vergeben. team_name_been_taken=Der Teamname ist bereits vergeben. team_no_units_error=Das Team muss auf mindestens einen Bereich Zugriff haben. email_been_used=Die E-Mail-Adresse wird bereits verwendet. -openid_been_used=Die OpenID-Adresse "%s" wird bereits verwendet. +openid_been_used=Die OpenID-Adresse „%s“ wird bereits verwendet. username_password_incorrect=Benutzername oder Passwort ist falsch. enterred_invalid_repo_name=Der eingegebenen Repository-Name ist falsch. -enterred_invalid_owner_name=Der Name des neuen Besitzers ist invalid. +enterred_invalid_owner_name=Der Name des neuen Besitzers ist ungültig. enterred_invalid_password=Das eingegebene Passwort ist falsch. user_not_exist=Dieser Benutzer ist nicht vorhanden. -last_org_owner=Du kannst den letzten Benutzer nicht aus dem "Besitzer"-Team entferenen. Es muss mindestens ein Besitzer in einer Organisation geben. +last_org_owner=Du kannst den letzten Benutzer nicht aus dem „Besitzer“-Team entfernen. Es muss mindestens einen Besitzer in einer Organisation geben. cannot_add_org_to_team=Eine Organisation kann nicht als Teammitglied hinzugefügt werden. invalid_ssh_key=Dein SSH-Key kann nicht überprüft werden: %s @@ -349,7 +349,7 @@ continue=Weiter cancel=Abbrechen language=Sprache -lookup_avatar_by_mail=Avatar anhand der E-Mail-Addresse suchen +lookup_avatar_by_mail=Profilbild anhand der E-Mail-Addresse suchen federated_avatar_lookup=Suche nach föderierten Profilbildern enable_custom_avatar=Benutzerdefiniertes Profilbild benutzen choose_new_avatar=Neues Profilbild auswählen @@ -364,7 +364,7 @@ new_password=Neues Passwort retype_new_password=Neues Passwort erneut eingeben password_incorrect=Das aktuelle Passwort ist falsch. change_password_success=Dein Passwort wurde aktualisiert. Bitte verwende dieses beim nächsten Einloggen. -password_change_disabled=Benutzer, die nicht von Gitea verwaltet werden, können ihr Passwort im Web Interface nicht ändern. +password_change_disabled=Benutzer, die nicht von Gitea verwaltet werden, können ihr Passwort im Web-Interface nicht ändern. emails=E-Mail-Adressen manage_emails=E-Mail-Adressen verwalten @@ -383,7 +383,7 @@ add_new_email=Neue E-Mail-Adresse hinzufügen add_new_openid=Neue OpenID-URI hinzufügen add_email=E-Mail-Adresse hinzufügen add_openid=OpenID-URI hinzufügen -add_email_confirmation_sent=Eine Bestätigungs-E-Mail wurde an '%s' gesendet. Bitte überprüfe dein Postfach innerhalb der nächsten %s, um die E-Mail-Adresse zu bestätigen. +add_email_confirmation_sent=Eine Bestätigungs-E-Mail wurde an „%s“ gesendet. Bitte überprüfe dein Postfach innerhalb der nächsten %s, um die E-Mail-Adresse zu bestätigen. add_email_success=Die neue E-Mail-Addresse wurde hinzugefügt. add_openid_success=Die neue OpenID-Adresse wurde hinzugefügt. keep_email_private=E-Mail-Adresse verbergen @@ -394,8 +394,8 @@ manage_ssh_keys=SSH-Schlüssel verwalten manage_gpg_keys=GPG-Schlüssel verwalten add_key=Schlüssel hinzufügen ssh_desc=Diese öffentlichen SSH-Keys sind mit deinem Account verbunden. Der dazugehörigen privaten SSH-Keys geben dir vollen Zugriff auf deine Repositories. -gpg_desc=Diese öffentlichen GPG-Keys sind mit deinem Account verbunden. Halte die dazugehörigen privaten SSH-Keys geheim, da diese deine Commits signieren. -ssh_helper=Brauchst du Hilfe? Hier ist Githubs Anleitung zum Erzeugen von SSH-Schlüsseln oder Lösen einfacher SSH-Probleme. +gpg_desc=Diese öffentlichen GPG-Keys sind mit deinem Account verbunden. Halte die dazugehörigen privaten GPG-Keys geheim, da diese deine Commits signieren. +ssh_helper=Brauchst du Hilfe? Hier ist GitHubs Anleitung zum Erzeugen von SSH-Schlüsseln oder zum Lösen einfacher SSH-Probleme. gpg_helper=Brauchst du Hilfe? Hier ist GitHubs Anleitung über GPG. add_new_key=SSH-Schlüssel hinzufügen add_new_gpg_key=GPG-Schlüssel hinzufügen @@ -407,8 +407,8 @@ subkeys=Unterschlüssel key_id=Schlüssel-ID key_name=Schlüsselname key_content=Inhalt -add_key_success=Der SSH-Schlüssel "%s" wurde hinzugefügt. -add_gpg_key_success=Der GPG-Key "%s" wurde hinzugefügt. +add_key_success=Der SSH-Schlüssel „%s“ wurde hinzugefügt. +add_gpg_key_success=Der GPG-Key „%s“ wurde hinzugefügt. delete_key=Entfernen ssh_key_deletion=SSH-Schlüssel entfernen gpg_key_deletion=GPG-Schlüssel entfernen @@ -511,10 +511,10 @@ create_repo=Repository erstellen default_branch=Standardbranch mirror_prune=Entfernen mirror_prune_desc=Entferne veraltete remote-tracking Referenzen -mirror_interval=Spiegelintervall (gültige Zeiteinheiten sind 'h', 'm', 's') +mirror_interval=Spiegelintervall (gültige Zeiteinheiten sind „h“, „m“, „s“) mirror_interval_invalid=Das Spiegel-Intervall ist ungültig. mirror_address=Klonen via URL -mirror_address_desc=Bitte gebe alle benötigten Zugangsdaten in der URL an. +mirror_address_desc=Bitte gib alle benötigten Zugangsdaten in der URL an. mirror_last_synced=Zuletzt synchronisiert watchers=Beobachter stargazers=Favorisiert von @@ -523,7 +523,7 @@ pick_reaction=Wähle eine Reaktion reactions_more=und %d weitere form.reach_limit_of_creation=Du hast bereits dein Limit von %d Repositories erreicht. -form.name_reserved=Der Repository-Name '%s' ist reserviert. +form.name_reserved=Der Repository-Name „%s“ ist reserviert. form.name_pattern_not_allowed='%s' ist nicht erlaubt für Repository-Namen. need_auth=Authentifizierung zum Klonen benötigt @@ -598,31 +598,31 @@ editor.filename_help=Füge einen Ordner hinzu, indem du seinen Namen und anschli editor.or=oder editor.cancel_lower=Abbrechen editor.commit_changes=Änderungen committen -editor.add_tmpl='%s/' hinzufügen -editor.add='%s' hinzufügen -editor.update='%s' ändern -editor.delete='%s' löschen +editor.add_tmpl=„%s/“ hinzufügen +editor.add=„%s“ hinzufügen +editor.update=„%s“ ändern +editor.delete=„%s“ löschen editor.commit_message_desc=Eine ausführlichere (optionale) Beschreibung hinzufügen… -editor.commit_directly_to_this_branch=Direkt in die %s-Branch einchecken. -editor.create_new_branch=Einen neue Branch für diesen Commit erstellen und einen Pull Request starten. +editor.commit_directly_to_this_branch=Direkt in den Branch „%s“ einchecken. +editor.create_new_branch=Einen neuen Branch für diesen Commit erstellen und einen Pull Request starten. editor.new_branch_name_desc=Neuer Branchname… editor.cancel=Abbrechen editor.filename_cannot_be_empty=Der Dateiname darf nicht leer sein. editor.branch_already_exists=Branch '%s' existiert bereits in diesem Repository. -editor.directory_is_a_file=Der Verzeichnisname '%s' wird bereits als Dateiname in diesem Repository verwendet. +editor.directory_is_a_file=Der Verzeichnisname „%s“ wird bereits als Dateiname in diesem Repository verwendet. editor.file_is_a_symlink='%s' ist ein symolischer Link. Symbolische Links können mit dem Web Editor nicht bearbeitet werden. -editor.filename_is_a_directory=Der Dateiname '%s' wird bereits als Verzeichnisname in diesem Repository verwendet. -editor.file_editing_no_longer_exists=Die bearbeitete Datei '%s' existiert nicht mehr in diesem Repository. -editor.file_changed_while_editing=Der Inhalt der Datei hat sich seit dem Beginn der Bearbeitung geändert. Hier klicken um die Änderungen anzusehen, oder Änderungen erneut comitten um sie zu überschreiben. -editor.file_already_exists=Eine Datei mit dem Namen '%s' ist bereits in diesem Repository vorhanden. +editor.filename_is_a_directory=Der Dateiname „%s“ wird bereits als Verzeichnisname in diesem Repository verwendet. +editor.file_editing_no_longer_exists=Die bearbeitete Datei „%s“ existiert nicht mehr in diesem Repository. +editor.file_changed_while_editing=Der Inhalt der Datei hat sich seit dem Beginn der Bearbeitung geändert. Hier klicken, um die Änderungen anzusehen, oder Änderungen erneut comitten, um sie zu überschreiben. +editor.file_already_exists=Eine Datei mit dem Namen „%s“ ist bereits in diesem Repository vorhanden. editor.no_changes_to_show=Keine Änderungen vorhanden. editor.fail_to_update_file=Fehler beim Ändern/Erstellen der Datei '%s'. Fehler: %v editor.add_subdir=Verzeichnis erstellen… -editor.unable_to_upload_files=Fehler beim Hochladen der Dateien nach '%s'. Fehler: %v +editor.unable_to_upload_files=Fehler beim Hochladen der Dateien nach „%s“. Fehler: %v editor.upload_files_to_dir=Dateien hochladen nach '%s' -editor.cannot_commit_to_protected_branch=Commit in den geschützten Branch '%s' ist nicht möglich. +editor.cannot_commit_to_protected_branch=Commit in den geschützten Branch „%s“ ist nicht möglich. -commits.desc=Durchsuche die Quellcode Änderungshistorie. +commits.desc=Durchsuche die Quellcode-Änderungshistorie. commits.commits=Commits commits.search=Commits durchsuchen… commits.find=Suchen @@ -633,7 +633,7 @@ commits.date=Datum commits.older=Älter commits.newer=Neuer commits.signed_by=Signiert von -commits.gpg_key_id=GPG Schlüssel-ID +commits.gpg_key_id=GPG-Schlüssel-ID ext_issues=Externe Issues ext_issues.desc=Link zu externem Issuetracker. @@ -768,10 +768,10 @@ issues.cancel_tracking_history=hat die Zeiterfassung %s abgebrochen issues.time_spent_total=Zeitaufwand insgesamt issues.time_spent_from_all_authors=`Aufgewendete Zeit: %s` issues.due_date=Fällig am -issues.invalid_due_date_format=Das Fälligkeitsdatum muss das Format 'JJJJ-MM-TT' haben. +issues.invalid_due_date_format=Das Fälligkeitsdatum muss das Format „JJJJ-MM-TT“ haben. issues.error_modifying_due_date=Fehler beim Ändern des Fälligkeitsdatums. issues.error_removing_due_date=Fehler beim Entfernen des Fälligkeitsdatums. -issues.due_date_form=jjjj-mm-tt +issues.due_date_form=JJJJ-MM-TT issues.due_date_form_add=Fälligkeitsdatum hinzufügen issues.due_date_form_update=Fälligkeitsdatum ändern issues.due_date_form_remove=Fälligkeitsdatum löschen @@ -787,7 +787,7 @@ pulls.new=Neuer Pull-Request pulls.compare_changes=Neuer Pull-Request pulls.compare_changes_desc=Wähle die Ziel- und Quellbranch aus. pulls.compare_base=Ziel -pulls.compare_compare=pull von +pulls.compare_compare=pullen von pulls.filter_branch=Branch filtern pulls.no_results=Keine Ergebnisse verfügbar. pulls.nothing_to_compare=Diese Branches sind identisch. Es muss kein Pull-Request erstellt werden. @@ -827,13 +827,13 @@ milestones.title=Titel milestones.desc=Beschreibung milestones.due_date=Fälligkeitsdatum (optional) milestones.clear=Feld leeren -milestones.invalid_due_date_format=Das Fälligkeitsdatum muss das Format 'JJJJ-MM-TT' haben. -milestones.create_success=Der Meilenstein '%s' wurde erstellt. +milestones.invalid_due_date_format=Das Fälligkeitsdatum muss das Format „JJJJ-MM-TT“ haben. +milestones.create_success=Der Meilenstein „%s“ wurde erstellt. milestones.edit=Meilenstein bearbeiten milestones.edit_subheader=Benutze Meilensteine, um Issues zu organisieren und den Fortschritt darzustellen. milestones.cancel=Abbrechen milestones.modify=Meilenstein bearbeiten -milestones.edit_success=Die Änderungen am Meilenstein "%s" wurden gespeichert. +milestones.edit_success=Die Änderungen am Meilenstein „%s“ wurden gespeichert. milestones.deletion=Meilenstein löschen milestones.deletion_desc=Das Löschen des Meilensteins entfernt ihn von allen Issues. Fortfahren? milestones.deletion_success=Der Meilenstein wurde gelöscht. @@ -849,7 +849,7 @@ ext_wiki.desc=Verweis auf externes Wiki. wiki=Wiki wiki.welcome=Willkommen im Wiki. -wiki.welcome_desc=Im Wiki kannst Dokumentation schreiben und mit Mitarbeitern teilen. +wiki.welcome_desc=Im Wiki kannst du Dokumentation schreiben und sie mit Mitarbeitern teilen. wiki.desc=Schreibe und teile Dokumentation mit Mitarbeitern. wiki.create_first_page=Erstelle die erste Seite wiki.page=Seite @@ -861,9 +861,9 @@ wiki.last_commit_info=%s hat diese Seite bearbeitet %s wiki.edit_page_button=Bearbeiten wiki.new_page_button=Neue Seite wiki.delete_page_button=Seite löschen -wiki.delete_page_notice_1=Das Löschen der Wiki-Seite '%s' kann nicht Rückgängig gemacht werden. Fortfahren? +wiki.delete_page_notice_1=Das Löschen der Wiki-Seite „%s“ kann nicht rückgängig gemacht werden. Fortfahren? wiki.page_already_exists=Eine Wiki-Seite mit dem gleichen Namen existiert bereits. -wiki.reserved_page=Der Wiki-Seitenname "%s" ist reserviert. +wiki.reserved_page=Der Wiki-Seitenname „%s“ ist reserviert. wiki.pages=Seiten wiki.last_updated=Zuletzt aktualisiert %s @@ -911,7 +911,7 @@ activity.published_release_label=Veröffentlicht search=Suchen search.search_repo=Repository durchsuchen -search.results=Suchergebnisse für "%s" in %s +search.results=Suchergebnisse für „%s“ in %s settings=Einstellungen settings.desc=In den Einstellungen kannst du die Einstellungen des Repository anpassen @@ -925,28 +925,28 @@ settings.hooks=Webhooks settings.githooks=Git-Hooks settings.basic_settings=Grundeinstellungen settings.mirror_settings=Mirror Einstellungen -settings.sync_mirror=Jetzt Synchronisieren +settings.sync_mirror=Jetzt synchronisieren settings.mirror_sync_in_progress=Mirror-Synchronisierung wird zurzeit ausgeführt. Komm in ein paar Minuten zurück. settings.site=Webseite settings.update_settings=Einstellungen speichern settings.advanced_settings=Erweiterte Einstellungen -settings.wiki_desc=Repository Wiki aktivieren +settings.wiki_desc=Repository-Wiki aktivieren settings.use_internal_wiki=Eingebautes Wiki verwenden settings.use_external_wiki=Externes Wiki verwenden settings.external_wiki_url=Externe Wiki URL settings.external_wiki_url_error=Die externe Wiki-URL ist ungültig. -settings.external_wiki_url_desc=Besucher werden auf die externe Wiki-URL weitergeleitet wenn sie auf das Wiki-Tab klicken. -settings.issues_desc=Repository Issue-Tracker aktivieren +settings.external_wiki_url_desc=Besucher werden auf die externe Wiki-URL weitergeleitet, wenn sie auf das Wiki-Tab klicken. +settings.issues_desc=Repository-Issue-Tracker aktivieren settings.use_internal_issue_tracker=Integrierten Issue-Tracker verwenden settings.use_external_issue_tracker=Externen Issue-Tracker verwenden settings.external_tracker_url=URL eines externen Issue Trackers settings.external_tracker_url_error=Die URL des externen Issue-Trackers ist ungültig. -settings.external_tracker_url_desc=Besucher werden auf die externe Issue-Tracker-URL weitergeleitet wenn sie auf das Issues-Tab klicken. +settings.external_tracker_url_desc=Besucher werden auf die externe Issue-Tracker-URL weitergeleitet, wenn sie auf das Issues-Tab klicken. settings.tracker_url_format=URL-Format des externen Issue-Systems settings.tracker_issue_style=Namenskonvention des externen Issue-Trackers settings.tracker_issue_style.numeric=Numerisch settings.tracker_issue_style.alphanumeric=Alphanumerisch -settings.tracker_url_format_desc=Du kannst die Platzhalter {user}, {repo}, {index} für den Benutzernamen, den Namen des Repositories und die Issue-Nummer verwenden. +settings.tracker_url_format_desc=Du kannst die Platzhalter {user}, {repo}, {index} für den Benutzernamen, den Namen des Repositorys und die Issue-Nummer verwenden. settings.enable_timetracker=Zeiterfassung aktivieren settings.allow_only_contributors_to_track_time=Nur Mitarbeitern erlauben, die Zeiterfassung zu nutzen settings.pulls_desc=Repository-Pull-Requests aktivieren @@ -964,22 +964,22 @@ settings.convert_notices_1=Dieser Vorgang wandelt das Mirror-Repository in ein n settings.convert_confirm=Repository umwandeln settings.convert_succeed=Das Mirror-Repository wurde erfolgreich in ein normales Repository umgewandelt. settings.transfer=Besitz übertragen -settings.transfer_desc=Übertrage dieses Repository auf einen anderen Benutzer oder eine Organisation in der Du Admin-Rechte hast. -settings.transfer_notices_1=- Du wirst keinen Zugriff mehr haben, wenn der neue Besitzer ein individueller Benutzer ist. -settings.transfer_notices_2=- Du wirst weiterhin Zugriff haben, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist. +settings.transfer_desc=Übertrage dieses Repository auf einen anderen Benutzer oder eine Organisation, in der du Admin-Rechte hast. +settings.transfer_notices_1=– Du wirst keinen Zugriff mehr haben, wenn der neue Besitzer ein individueller Benutzer ist. +settings.transfer_notices_2=– Du wirst weiterhin Zugriff haben, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist. settings.transfer_form_title=Gib den Repository-Namen zur Bestätigung ein: settings.wiki_delete=Wiki-Daten löschen settings.wiki_delete_desc=Das Löschen von Wiki-Daten kann nicht rückgängig gemacht werden. Bitte sei vorsichtig. -settings.wiki_delete_notices_1=- Dies löscht und deaktiviert das Wiki für %s. +settings.wiki_delete_notices_1=– Dies löscht und deaktiviert das Wiki für %s. settings.confirm_wiki_delete=Wiki-Daten löschen -settings.wiki_deletion_success=Repository Wiki-Daten wurden gelöscht. +settings.wiki_deletion_success=Repository-Wiki-Daten wurden gelöscht. settings.delete=Dieses Repository löschen settings.delete_desc=Wenn dieses Repository gelöscht wurde, gibt es keinen Weg zurück. Bitte sei vorsichtig. settings.delete_notices_1=- Diese Operation kann NICHT rückgängig gemacht werden. -settings.delete_notices_2=- Die Operation wird das %s-Repository dauerhaft löschen, inklusive der Dateien, Issues, Kommentare und Zugriffseinstellungen. -settings.delete_notices_fork_1=- Nach dem Löschen werden alle Forks unabhängig. +settings.delete_notices_2=– Die Operation wird das %s-Repository dauerhaft löschen, inklusive der Dateien, Issues, Kommentare und Zugriffseinstellungen. +settings.delete_notices_fork_1=– Forks dieses Repositorys werden nach dem Löschen unabhängig. settings.deletion_success=Das Repository wurde gelöscht. -settings.update_settings_success=Repository Einstellungen wurden aktualisiert. +settings.update_settings_success=Repository-Einstellungen wurden aktualisiert. settings.transfer_owner=Neuer Besitzer settings.make_transfer=Transfer durchführen settings.transfer_succeed=Das Repository wurde transferiert. @@ -994,7 +994,7 @@ settings.search_user_placeholder=Benutzer suchen… settings.org_not_allowed_to_be_collaborator=Organisationen können nicht als Mitarbeiter hinzugefügt werden. settings.user_is_org_member=Der Benutzer ist ein Organisationsmitglied und kann nicht als Mitarbeiter hinzugefügt werden. settings.add_webhook=Webhook hinzufügen -settings.hooks_desc=Webhooks senden bei bestimmten Gitea-Events automatisch HTTP POST-Requets an einen Server. Lies mehr in unserer Anleitung zu Webhooks (Englisch). +settings.hooks_desc=Webhooks senden bei bestimmten Gitea-Events automatisch „HTTP POST“-Anfragen an einen Server. Lies mehr in unserer Anleitung zu Webhooks (auf Englisch). settings.webhook_deletion=Webhook löschen settings.webhook_deletion_desc=Das Entfernen eines Webhooks löscht seine Einstellungen und Zustellungsverlauf. Fortfahren? settings.webhook_deletion_success=Webhook wurde entfernt. @@ -1066,18 +1066,18 @@ settings.title=Titel settings.deploy_key_content=Inhalt settings.key_been_used=Ein Deploy-Key mit identischem Inhalt wird bereits verwendet. settings.key_name_used=Ein Deploy-Key mit diesem Namen existiert bereits. -settings.add_key_success=Der Deploy-Key '%s' wurde erfolgreich hinzugefügt. +settings.add_key_success=Der Deploy-Key „%s“ wurde erfolgreich hinzugefügt. settings.deploy_key_deletion=Deploy-Key löschen settings.deploy_key_deletion_desc=Nach dem Löschen wird dieser Deploy-Key keinen Zugriff mehr auf dieses Repository haben. Fortfahren? settings.deploy_key_deletion_success=Der Deploy-Key wurde entfernt. settings.branches=Branches -settings.protected_branch=Branch-Protection +settings.protected_branch=Branch-Schutz settings.protected_branch_can_push=Push erlauben? settings.protected_branch_can_push_yes=Du kannst pushen settings.protected_branch_can_push_no=Du kannst nicht pushen -settings.branch_protection=Branch-Schutz" für Branch '%s' +settings.branch_protection=Branch-Schutz für Branch „%s“ settings.protect_this_branch=Brach-Schutz aktivieren -settings.protect_this_branch_desc=Verhindere Löschen und deaktiviere Git force push auf diese Branch. +settings.protect_this_branch_desc=Verhindere Löschen und deaktiviere das sog. „force pushing” von Git auf diesen Branch. settings.protect_whitelist_committers=Push-Whitelist aktivieren settings.protect_whitelist_committers_desc=Erlaube Nutzern oder Teams auf der Whitelist Push-Beschränkungen zu umgehen. settings.protect_whitelist_users=Nutzer, die pushen dürfen: @@ -1090,12 +1090,12 @@ settings.protect_merge_whitelist_users=Nutzer, die mergen dürfen: settings.protect_merge_whitelist_teams=Teams, die mergen dürfen: settings.add_protected_branch=Schutz aktivieren settings.delete_protected_branch=Schutz deaktivieren -settings.update_protect_branch_success=Branch-protection für die Branch '%s' wurde geändert. -settings.remove_protected_branch_success=Branch-protection für die Branch '%s' wurde deaktiviert. +settings.update_protect_branch_success=Branch-Schutz für den Branch „%s“ wurde geändert. +settings.remove_protected_branch_success=Branch-Schutz für den Branch „%s“ wurde deaktiviert. settings.protected_branch_deletion=Brach-Schutz deaktivieren -settings.protected_branch_deletion_desc=Wenn du die Branch-Protection deaktivierst, können alle Nutzer mit Schreibrechten auf die Branch pushen. Fortfahren? +settings.protected_branch_deletion_desc=Wenn du den Branch-Schutz deaktivierst, können alle Nutzer mit Schreibrechten auf den Branch pushen. Fortfahren? settings.default_branch_desc=Wähle eine Standardbranch für Pull-Requests und Code-Commits: -settings.choose_branch=Wähle eine Branch… +settings.choose_branch=Wähle einen Branch … settings.no_protected_branch=Es gibt keine geschützten Branches. diff.browse_source=Quellcode durchsuchen @@ -1131,7 +1131,7 @@ release.write=Schreiben release.preview=Vorschau release.loading=Laden… release.prerelease_desc=Als Pre-Release kennzeichnen -release.prerelease_helper=Dieses Release als "ungeeignet für den produktiven Einsatz" markieren. +release.prerelease_helper=Dieses Release als „ungeeignet für den produktiven Einsatz“ markieren. release.cancel=Abbrechen release.publish=Release veröffentlichen release.save_draft=Entwurf speichern @@ -1146,24 +1146,24 @@ release.downloads=Downloads branch.name=Branchname branch.search=Branches durchsuchen -branch.already_exists=Eine Branch mit dem Namen '%s' existiert bereits. +branch.already_exists=Ein Branch mit dem Namen „%s“ existiert bereits. branch.delete_head=Löschen -branch.delete=Branch '%s' löschen +branch.delete=Branch „%s“ löschen branch.delete_html=Branch löschen -branch.delete_desc=Das Löschen einer Branch ist permanent. Es KANN NICHT Rückgängig gemacht werden. Fortfahren? -branch.deletion_success=Branch '%s' wurde gelöscht. -branch.deletion_failed=Branch '%s' konnte nicht gelöscht werden. -branch.delete_branch_has_new_commits=Die Branch '%s' kann nicht gelöscht weden, da seit dem letzten Merge neue Commits hinzugefügt wurden. +branch.delete_desc=Das Löschen eines Branches ist permanent. Es KANN NICHT rückgängig gemacht werden. Fortfahren? +branch.deletion_success=Branch „%s“ wurde gelöscht. +branch.deletion_failed=Branch „%s“ konnte nicht gelöscht werden. +branch.delete_branch_has_new_commits=Der Branch „%s“ kann nicht gelöscht weden, da seit dem letzten Merge neue Commits hinzugefügt wurden. branch.create_branch=Erstelle Branch %s branch.create_from=von '%s' -branch.create_success=Branch '%s' wurde erstellt. +branch.create_success=Branch „%s“ wurde erstellt. branch.branch_already_exists=Branch '%s' existiert bereits in diesem Repository. -branch.branch_name_conflict=Der Branch-Name '%s' steht in Konflikt mit der bestehendem Branch '%s'. -branch.tag_collision=Branch '%s' kann nicht erstellt werden, da in diesem Repository bereits ein Tag mit dem selben Namen existiert. +branch.branch_name_conflict=Der Branch-Name „%s“ steht in Konflikt mit dem bestehenden Branch „%s“. +branch.tag_collision=Branch „%s“ kann nicht erstellt werden, da in diesem Repository bereits ein Tag mit dem selben Namen existiert. branch.deleted_by=Von %s gelöscht -branch.restore_success=Branch '%s' wurde wiederhergestellt. -branch.restore_failed=Wiederherstellung der Branch '%s' fehlgeschlagen. -branch.protected_deletion_failed=Branch '%s' ist geschützt und kann nicht gelöscht werden. +branch.restore_success=Branch „%s“ wurde wiederhergestellt. +branch.restore_failed=Wiederherstellung des Branches „%s“ fehlgeschlagen. +branch.protected_deletion_failed=Branch „%s“ ist geschützt und kann nicht gelöscht werden. topic.manage_topics=Themen verwalten topic.done=Fertig @@ -1188,9 +1188,9 @@ team_desc_helper=Beschreibe den Zweck oder die Rolle des Teams. team_permission_desc=Berechtigungen team_unit_desc=Zugriff auf Repositorybereiche erlauben -form.name_reserved=Der Organisationsname '%s' ist reserviert. -form.name_pattern_not_allowed=Das Muster '%s' ist in Organisationsnamen nicht erlaubt. -form.create_org_not_allowed=Du bist nicht berechtigt eine Organisation zu erstellen. +form.name_reserved=Der Organisationsname „%s“ ist reserviert. +form.name_pattern_not_allowed=Das Muster „%s“ ist in Organisationsnamen nicht erlaubt. +form.create_org_not_allowed=Du bist nicht berechtigt, eine Organisation zu erstellen. settings=Einstellungen settings.options=Organisation @@ -1229,7 +1229,7 @@ teams.read_access_helper=Mitglieder können Teamrepositories ansehen und klonen. teams.write_access=Schreibzugriff teams.write_access_helper=Mitglieder können Teamrepositories ansehen und auf sie pushen. teams.admin_access=Administratorzugang -teams.admin_access_helper=Mitglieder können auf Team Repositories "pushen", von ihnen "pullen" und Mitarbeiter hinzufügen. +teams.admin_access_helper=Mitglieder können auf Team-Repositorys pushen, von ihnen pullen und Mitarbeiter hinzufügen. teams.no_desc=Dieses Team hat keine Beschreibung teams.settings=Einstellungen teams.owners_permission_desc=Besitzer haben vollen Zugriff auf alle Repositories und Admin-Rechte für diese Organisation. @@ -1277,12 +1277,12 @@ dashboard.delete_repo_archives=Alle Repository-Archive löschen dashboard.delete_repo_archives_success=Alle Repository-Archive wurden gelöscht. dashboard.delete_missing_repos=Alle Repository-Datensätze mit verlorenen gegangenen Git-Dateien löschen dashboard.delete_missing_repos_success=Alle Repository-Datensätze mit verlorenen Git-Dateien wurden gelöscht. -dashboard.git_gc_repos=Garbage Collection auf Repositories ausführen -dashboard.git_gc_repos_success=Alle Repositories haben Garbage Collection beendet. -dashboard.resync_all_sshkeys='.ssh/authorized_keys'-Datei mit Gitea SSH-Keys neu schreiben. (Wenn Du den eingebauten SSH Server nutzt, musst du das nicht ausführen.) +dashboard.git_gc_repos=Garbage-Collection auf Repositories ausführen +dashboard.git_gc_repos_success=Alle Repositories haben Garbage-Collection beendet. +dashboard.resync_all_sshkeys=„.ssh/authorized_keys“-Datei mit Gitea-SSH-Keys neu schreiben. (Wenn Du den eingebauten SSH-Server nutzt, musst du das nicht ausführen.) dashboard.resync_all_sshkeys_success=Alle von Gitea verwalteten öffentlichen Schlüssel wurden neu geschrieben. -dashboard.resync_all_hooks=Synchronisiere pre-receive, update und post-receive Hooks für alle Repositories. -dashboard.resync_all_hooks_success=Alle pre-receive, update und post-receive Repository-Hooks wurden synchronisiert. +dashboard.resync_all_hooks=Synchronisiere „pre-receive“-, „update“- und „post-receive“-Hooks für alle Repositorys erneut. +dashboard.resync_all_hooks_success=Alle „pre-receive“-, „update“- und „post-receive“-Repository-Hooks wurden erneut synchronisiert. dashboard.reinit_missing_repos=Alle Git-Repositories mit Einträgen neu einlesen dashboard.reinit_missing_repos_success=Alle verlorenen Git-Repositories mit existierenden Einträgen wurden erfolgreich aktualisiert. dashboard.sync_external_users=Externe Benutzerdaten synchronisieren @@ -1305,11 +1305,11 @@ dashboard.heap_memory_released=Freigegebener Heap-Memory dashboard.heap_objects=Heap-Objekte dashboard.bootstrap_stack_usage=Bootstrap-Stack-Auslastung dashboard.stack_memory_obtained=Erhaltener Stack-Memory -dashboard.mspan_structures_usage=MSpan-Structures Auslastung -dashboard.mspan_structures_obtained=MSpan-Structures erhalten -dashboard.mcache_structures_usage=MCache-Structures Auslastung +dashboard.mspan_structures_usage=MSpan-Structures-Auslastung +dashboard.mspan_structures_obtained=Erhaltene MSpan-Structures +dashboard.mcache_structures_usage=MCache-Structures-Auslastung dashboard.mcache_structures_obtained=Erhaltene MCache-Structures -dashboard.profiling_bucket_hash_table_obtained=Analysesatz Hashtabellen erhalten +dashboard.profiling_bucket_hash_table_obtained=Erhaltene Analysesatz-Hashtabellen dashboard.gc_metadata_obtained=Erhaltene GC-Metadata dashboard.other_system_allocation_obtained=Andere erhaltene System-Allokationen dashboard.next_gc_recycle=Nächster GC-Zyklus @@ -1342,7 +1342,7 @@ users.max_repo_creation_desc=(Gib -1 ein, um das globale Standardlimit zu verwen users.is_activated=Account ist aktiviert users.prohibit_login=Anmelden deaktivieren users.is_admin=Ist Administrator -users.allow_git_hook=Darf "Git Hooks" erstellen +users.allow_git_hook=Darf „Git Hooks“ erstellen users.allow_import_local=Darf lokale Repositories importieren users.allow_create_organization=Darf Organisationen erstellen users.update_profile=Benutzerkonto aktualisieren @@ -1384,31 +1384,31 @@ auths.bind_dn=DN binden auths.bind_password=Passwort binden auths.bind_password_helper=Achtung: Das Passwort wird im Klartext gespeichert. Benutze wenn möglich einen Account mit nur Lesezugriff. auths.user_base=Basis für Benutzersuche -auths.user_dn=Benutzer DN -auths.attribute_username=Benutzername Attribut +auths.user_dn=Benutzer-DN +auths.attribute_username=Benutzernamens-Attribut auths.attribute_username_placeholder=Leerlassen, um den in Gitea eingegebenen Benutzernamen zu verwenden. auths.attribute_name=Vornamensattribut auths.attribute_surname=Nachnamensattribut -auths.attribute_mail=E-Mail Attribut -auths.attribute_ssh_public_key=Öffentliches SSH-Schlüssel Attribut +auths.attribute_mail=E-Mail-Attribut +auths.attribute_ssh_public_key=Öffentlicher-SSH-Schlüssel-Attribut auths.attributes_in_bind=Hole Attribute im Bind-Kontext auths.use_paged_search=Seitensuche verwenden auths.search_page_size=Seitengröße auths.filter=Benutzerfilter -auths.admin_filter=Admin Filter -auths.ms_ad_sa=MS AD Suchattribute +auths.admin_filter=Admin-Filter +auths.ms_ad_sa=MS-AD-Suchattribute auths.smtp_auth=SMTP-Authentifizierungstyp auths.smtphost=SMTP-Host auths.smtpport=SMTP-Port auths.allowed_domains=Erlaubte Domains -auths.allowed_domains_helper=Leerlassen, um alle Domains zuzulassen. Trenne mehrere Domänen mit einem Komma (','). +auths.allowed_domains_helper=Leerlassen, um alle Domains zuzulassen. Trenne mehrere Domänen mit einem Komma („,“). auths.enable_tls=TLS-Verschlüsselung aktivieren -auths.skip_tls_verify=TLS Verifikation überspringen -auths.pam_service_name=PAM Dienstname -auths.oauth2_provider=OAuth2 Anbieter +auths.skip_tls_verify=TLS-Verifikation überspringen +auths.pam_service_name=PAM-Dienstname +auths.oauth2_provider=OAuth2-Anbieter auths.oauth2_clientID=Client-ID (Schlüssel) auths.oauth2_clientSecret=Client-Secret -auths.openIdConnectAutoDiscoveryURL=OpenID Connect Auto Discovery URL +auths.openIdConnectAutoDiscoveryURL=OpenID-Connect-Auto-Discovery-URL auths.oauth2_use_custom_url=Benutzerdefinierte URLs anstelle von Standard-URLs verwenden auths.oauth2_tokenURL=Token-URL auths.oauth2_authURL=Authorisierungs-URL @@ -1416,48 +1416,48 @@ auths.oauth2_profileURL=Profil-URL auths.oauth2_emailURL=E-Mail-URL auths.enable_auto_register=Automatische Registrierung aktivieren auths.tips=Tipps -auths.tips.oauth2.general=OAuth2 Authentifizierung -auths.tips.oauth2.general.tip=Beim Registrieren einer neuen OAuth2 Authentifizierung sollte die Callback/Weiterleitungs-URL /user/oauth2//callback sein. -auths.tip.oauth2_provider=OAuth2 Anbieter -auths.tip.bitbucket=Registriere einen neuen OAuth-Consumer unter https://bitbucket.org/account/user//oauth-consumers/new und füge die Berechtigung "Account"-"Read" hinzu. +auths.tips.oauth2.general=OAuth2-Authentifizierung +auths.tips.oauth2.general.tip=Beim Registrieren einer neuen OAuth2-Authentifizierung sollte die Callback-/Weiterleitungs-URL „/user/oauth2//callback“ sein. +auths.tip.oauth2_provider=OAuth2-Anbieter +auths.tip.bitbucket=Registriere einen neuen OAuth-Consumer unter https://bitbucket.org/account/user//oauth-consumers/new und füge die Berechtigung „Account“ – „Read“ hinzu. auths.tip.dropbox=Erstelle eine neue App auf https://www.dropbox.com/developers/apps. -auths.tip.facebook=Erstelle eine neue Anwendung auf https://developers.facebook.com/apps und füge das Produkt "Facebook Login" hinzu. -auths.tip.github=Erstelle unter https://github.com/settings/applications/new eine neue OAuth Anwendung. +auths.tip.facebook=Erstelle eine neue Anwendung auf https://developers.facebook.com/apps und füge das Produkt „Facebook Login“ hinzu. +auths.tip.github=Erstelle unter https://github.com/settings/applications/new eine neue OAuth-Anwendung. auths.tip.gitlab=Erstelle unter https://gitlab.com/profile/applications eine neue Anwendung. -auths.tip.google_plus=Du erhältst die OAuth2 Client Zugangsdaten in der Google API Console unter https://console.developers.google.com/ +auths.tip.google_plus=Du erhältst die OAuth2-Client-Zugangsdaten in der Google-API-Konsole unter https://console.developers.google.com/ auths.tip.openid_connect=Benutze die OpenID Connect Discovery URL (/.well-known/openid-configuration) als Endpunkt. -auths.tip.twitter=Gehe auf https://dev.twitter.com/apps, erstelle eine Anwendung und stelle sicher, dass die Option “Allow this application to be used to Sign in with Twitter” aktiviert ist +auths.tip.twitter=Gehe auf https://dev.twitter.com/apps, erstelle eine Anwendung und stelle sicher, dass die Option „Allow this application to be used to Sign in with Twitter“ aktiviert ist auths.edit=Authentifikationsquelle bearbeiten auths.activated=Diese Authentifikationsquelle ist aktiviert -auths.new_success=Die Authentifizierung "%s" wurde hinzugefügt. +auths.new_success=Die Authentifizierung „%s“ wurde hinzugefügt. auths.update_success=Diese Authentifizierungsquelle wurde aktualisiert. auths.update=Authentifizierungsquelle aktualisieren auths.delete=Authentifikationsquelle löschen auths.delete_auth_title=Authentifizierungsquelle löschen auths.delete_auth_desc=Das Löschen einer Authentifizierungsquelle verhindert, dass Benutzer sich darüber anmelden können. Fortfahren? auths.still_in_used=Diese Authentifizierungsquelle wird noch verwendet. Bearbeite oder lösche zuerst alle Benutzer, die diese Authentifizierungsquelle benutzen. -auths.deletion_success=Die Authentifizierungsquelle '%s' wurde gelöscht. -auths.login_source_exist=Die Authentifizierungsquelle '%s' existiert bereits. +auths.deletion_success=Die Authentifizierungsquelle „%s“ wurde gelöscht. +auths.login_source_exist=Die Authentifizierungsquelle „%s“ existiert bereits. config.server_config=Serverkonfiguration config.app_name=Seitentitel -config.app_ver=Gitea Version -config.app_url=Gitea Basis-URL +config.app_ver=Gitea-Version +config.app_url=Gitea-Basis-URL config.custom_conf=Konfigurations-Datei-Pfad -config.domain=SSH Server-Domain +config.domain=SSH-Server-Domain config.offline_mode=Lokaler Modus config.disable_router_log=Router-Log deaktivieren config.run_user=Ausführen als config.run_mode=Laufzeit-Modus -config.git_version=Git Version -config.repo_root_path=Repository-Verzeichnis +config.git_version=Git-Version +config.repo_root_path=Repository-Wurzelpfad config.lfs_root_path=LFS-Wurzelpfad config.static_file_root_path=Verzeichnis für statische Dateien config.log_file_root_path=Logdateipfad config.script_type=Skript-Typ config.reverse_auth_user=Nutzer bei Reverse-Authentifizierung -config.ssh_config=SSH Konfiguration +config.ssh_config=SSH-Konfiguration config.ssh_enabled=Aktiviert config.ssh_start_builtin_server=Eingebauten Server verwenden config.ssh_domain=Server-Domain @@ -1465,9 +1465,9 @@ config.ssh_port=Port config.ssh_listen_port=Listen-Port config.ssh_root_path=Wurzelverzeichnis config.ssh_key_test_path=Schlüssel-Test-Pfad -config.ssh_keygen_path=Keygen ('ssh-keygen') Pfad +config.ssh_keygen_path=Keygen-Pfad („ssh-keygen“) config.ssh_minimum_key_size_check=Prüfung der Mindestschlüssellänge -config.ssh_minimum_key_sizes=Minimale Schlüssellängen +config.ssh_minimum_key_sizes=Mindestschlüssellängen config.db_config=Datenbankkonfiguration config.db_type=Typ @@ -1481,17 +1481,17 @@ config.service_config=Service-Konfiguration config.register_email_confirm=E-Mail-Bestätigung benötigt zum Registrieren config.disable_register=Selbstegistrierung deaktivieren config.allow_only_external_registration=Registrierung nur über externe Services aktiveren -config.enable_openid_signup=OpenID Selbstregistrierung aktivieren -config.enable_openid_signin=OpenID Anmeldung aktivieren +config.enable_openid_signup=OpenID-Selbstregistrierung aktivieren +config.enable_openid_signin=OpenID-Anmeldung aktivieren config.show_registration_button=Schaltfläche zum Registrieren anzeigen config.require_sign_in_view=Seiten nur für angemeldete Benutzer zugänglich config.mail_notify=E-Mail-Benachrichtigungen aktivieren config.disable_key_size_check=Prüfung der Mindestschlüssellänge deaktiveren config.enable_captcha=CAPTCHA aktivieren -config.active_code_lives=Aktivierungscode Lebensdauer +config.active_code_lives=Aktivierungscode-Lebensdauer config.reset_password_code_lives=Ablaufdatum des Passworts zurücksetzen config.default_keep_email_private=E-Mail-Adressen standardmäßig verbergen -config.default_allow_create_organization=Erstellen von Organisationen standarmäßig erlauben +config.default_allow_create_organization=Erstellen von Organisationen standardmäßig erlauben config.enable_timetracking=Zeiterfassung aktivieren config.default_enable_timetracking=Zeiterfassung standardmäßig aktivieren config.default_allow_only_contributors_to_track_time=Nur Mitarbeitern erlauben, die Zeiterfassung zu nutzen @@ -1500,11 +1500,11 @@ config.no_reply_address=Versteckte E-Mail-Domain config.webhook_config=Webhook-Konfiguration config.queue_length=Warteschlangenlänge config.deliver_timeout=Zeitlimit für Zustellung -config.skip_tls_verify=TLS Verifikation überspringen +config.skip_tls_verify=TLS-Verifikation überspringen -config.mailer_config=SMTP Mailer Konfiguration +config.mailer_config=SMTP-Mailer-Konfiguration config.mailer_enabled=Aktiviert -config.mailer_disable_helo=HELO Deaktivieren +config.mailer_disable_helo=HELO deaktivieren config.mailer_name=Name config.mailer_host=Host config.mailer_user=Benutzer @@ -1512,8 +1512,8 @@ config.mailer_use_sendmail=Sendmail benutzen config.mailer_sendmail_path=Sendmail-Pfad config.mailer_sendmail_args=Zusätzliche Argumente für Sendmail config.send_test_mail=Test-E-Mail senden -config.test_mail_failed=Das Senden der Test-E-Mail an '%s' ist fehlgeschlagen: %v -config.test_mail_sent=Eine Test-E-Mail wurde an '%s' gesendet. +config.test_mail_failed=Das Senden der Test-E-Mail an „%s“ ist fehlgeschlagen: %v +config.test_mail_sent=Eine Test-E-Mail wurde an „%s“ gesendet. config.oauth_config=OAuth-Konfiguration config.oauth_enabled=Aktiviert @@ -1533,16 +1533,16 @@ config.session_life_time=Session-Lebensdauer config.https_only=Nur HTTPS config.cookie_life_time=Cookie-Lebensdauer -config.picture_config=Avatar-Konfiguration +config.picture_config=Bild-und-Profilbild-Konfiguration config.picture_service=Bilderservice config.disable_gravatar=Gravatar deaktivieren config.enable_federated_avatar=Föderierte Profilbilder einschalten -config.git_config=Git Konfiguration -config.git_disable_diff_highlight=Diff Syntaxhervorhebung ausschalten -config.git_max_diff_lines=Max Diff Zeilen (in einer Datei) -config.git_max_diff_line_characters=Max Diff Zeichen (in einer Zeile) -config.git_max_diff_files=Max Diff Dateien (Anzeige) +config.git_config=Git-Konfiguration +config.git_disable_diff_highlight=Diff-Syntaxhervorhebung ausschalten +config.git_max_diff_lines=Max. Diff-Zeilen (in einer Datei) +config.git_max_diff_line_characters=Max. Diff-Zeichen (in einer Zeile) +config.git_max_diff_files=Max. Diff-Dateien (Angezeigte) config.git_gc_args=GC-Argumente config.git_migrate_timeout=Zeitlimit für Migration config.git_mirror_timeout=Zeitlimit für Mirror-Aktualisierung @@ -1638,12 +1638,12 @@ mark_all_as_read=Alle als gelesen markieren [gpg] error.extract_sign=Die Signatur konnte nicht extrahiert werden error.generate_hash=Es konnte kein Hash vom Commit generiert werden -error.no_committer_account=Es ist kein Benutzerkonto mit dieser Commiter-Email verbunden +error.no_committer_account=Es ist kein Benutzerkonto mit der E-Mail-Adresse des Committers verbunden error.no_gpg_keys_found=Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden error.not_signed_commit=Kein signierter Commit error.failed_retrieval_gpg_keys=Fehler beim Abrufen eines Keys des Commiter-Kontos [units] -error.no_unit_allowed_repo=Du hast keine Berechtigung auf einen Bereich dieses Repositories zuzugreifen. -error.unit_not_allowed=Du hast keine Berechtigung auf diesen Repository-Bereich zuzugreifen. +error.no_unit_allowed_repo=Du hast keine Berechtigung, um auf irgendeinen Bereich dieses Repositories zuzugreifen. +error.unit_not_allowed=Du hast keine Berechtigung, um auf diesen Repository-Bereich zuzugreifen. diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index f49b98280..b3e8a2fe0 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -280,12 +280,12 @@ target_branch_not_exist=Цільової гілки не існує. [user] change_avatar=Змінити свій аватар… -join_on=Приєднався +join_on=Приєднався(-лась) repositories=Репозиторії activity=Публічна активність -followers=Підписники +followers=Читачі starred=Обрані Репозиторії -following=Слідкувати +following=Читає follow=Підписатися unfollow=Відписатися @@ -439,6 +439,7 @@ license=Ліцензія license_helper=Виберіть ліцензійний файл. readme=README readme_helper=Виберіть шаблон README. +auto_init=Ініціалізувати репозиторій (Додає .gitignore, LICENSE та README) create_repo=Створити репозиторій default_branch=Головна гілка mirror_prune=Очистити @@ -603,6 +604,8 @@ issues.filter_sort.recentupdate=Нещодавно оновлено issues.filter_sort.leastupdate=Найдавніше оновлені issues.filter_sort.mostcomment=Найбільш коментовані issues.filter_sort.leastcomment=Найменш коментовані +issues.filter_sort.moststars=Найбільш обраних +issues.filter_sort.feweststars=Найменш обраних issues.filter_sort.mostforks=Найбільше форків issues.action_open=Відкрити issues.action_close=Закрити @@ -1232,6 +1235,7 @@ config.default_keep_email_private=Приховати адресу електро config.default_allow_create_organization=Дозволити створення організацій за замовчуванням config.enable_timetracking=Увімкнути відстеження часу config.default_enable_timetracking=Увімкнути відстеження часу за замовчуванням +config.no_reply_address=Прихований домен е-пошти config.webhook_config=Конфігурація web-хуків config.queue_length=Довжина черги From 69bfd81b1cc4b95d6bc49e7b027d2e5ff03167a5 Mon Sep 17 00:00:00 2001 From: David Schneiderbauer Date: Mon, 18 Jun 2018 20:24:45 +0200 Subject: [PATCH 017/124] fix missing data on redirects (#3975) --- routers/user/setting/account.go | 32 ++++++++------- routers/user/setting/applications.go | 24 +++++------ routers/user/setting/keys.go | 54 ++++++++++++------------- routers/user/setting/profile.go | 1 + routers/user/setting/security.go | 44 +++++++++++--------- routers/user/setting/security_openid.go | 21 ++++------ 6 files changed, 90 insertions(+), 86 deletions(-) diff --git a/routers/user/setting/account.go b/routers/user/setting/account.go index 966d96aed..bcf602c5e 100644 --- a/routers/user/setting/account.go +++ b/routers/user/setting/account.go @@ -24,12 +24,7 @@ func Account(ctx *context.Context) { ctx.Data["PageIsSettingsAccount"] = true ctx.Data["Email"] = ctx.User.Email - emails, err := models.GetEmailAddresses(ctx.User.ID) - if err != nil { - ctx.ServerError("GetEmailAddresses", err) - return - } - ctx.Data["Emails"] = emails + loadAccountData(ctx) ctx.HTML(200, tplSettingsAccount) } @@ -40,6 +35,8 @@ func AccountPost(ctx *context.Context, form auth.ChangePasswordForm) { ctx.Data["PageIsSettingsAccount"] = true if ctx.HasError() { + loadAccountData(ctx) + ctx.HTML(200, tplSettingsAccount) return } @@ -85,15 +82,9 @@ func EmailPost(ctx *context.Context, form auth.AddEmailForm) { return } - // Add Email address. - emails, err := models.GetEmailAddresses(ctx.User.ID) - if err != nil { - ctx.ServerError("GetEmailAddresses", err) - return - } - ctx.Data["Emails"] = emails - if ctx.HasError() { + loadAccountData(ctx) + ctx.HTML(200, tplSettingsAccount) return } @@ -105,6 +96,8 @@ func EmailPost(ctx *context.Context, form auth.AddEmailForm) { } if err := models.AddEmailAddress(email); err != nil { if models.IsErrEmailAlreadyUsed(err) { + loadAccountData(ctx) + ctx.RenderWithErr(ctx.Tr("form.email_been_used"), tplSettingsAccount, &form) return } @@ -149,6 +142,8 @@ func DeleteAccount(ctx *context.Context) { if _, err := models.UserSignIn(ctx.User.Name, ctx.Query("password")); err != nil { if models.IsErrUserNotExist(err) { + loadAccountData(ctx) + ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_password"), tplSettingsAccount, nil) } else { ctx.ServerError("UserSignIn", err) @@ -172,3 +167,12 @@ func DeleteAccount(ctx *context.Context) { ctx.Redirect(setting.AppSubURL + "/") } } + +func loadAccountData(ctx *context.Context) { + emails, err := models.GetEmailAddresses(ctx.User.ID) + if err != nil { + ctx.ServerError("GetEmailAddresses", err) + return + } + ctx.Data["Emails"] = emails +} diff --git a/routers/user/setting/applications.go b/routers/user/setting/applications.go index f292b65d7..ac7252469 100644 --- a/routers/user/setting/applications.go +++ b/routers/user/setting/applications.go @@ -22,12 +22,7 @@ func Applications(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("settings") ctx.Data["PageIsSettingsApplications"] = true - tokens, err := models.ListAccessTokens(ctx.User.ID) - if err != nil { - ctx.ServerError("ListAccessTokens", err) - return - } - ctx.Data["Tokens"] = tokens + loadApplicationsData(ctx) ctx.HTML(200, tplSettingsApplications) } @@ -38,12 +33,8 @@ func ApplicationsPost(ctx *context.Context, form auth.NewAccessTokenForm) { ctx.Data["PageIsSettingsApplications"] = true if ctx.HasError() { - tokens, err := models.ListAccessTokens(ctx.User.ID) - if err != nil { - ctx.ServerError("ListAccessTokens", err) - return - } - ctx.Data["Tokens"] = tokens + loadApplicationsData(ctx) + ctx.HTML(200, tplSettingsApplications) return } @@ -75,3 +66,12 @@ func DeleteApplication(ctx *context.Context) { "redirect": setting.AppSubURL + "/user/settings/applications", }) } + +func loadApplicationsData(ctx *context.Context) { + tokens, err := models.ListAccessTokens(ctx.User.ID) + if err != nil { + ctx.ServerError("ListAccessTokens", err) + return + } + ctx.Data["Tokens"] = tokens +} diff --git a/routers/user/setting/keys.go b/routers/user/setting/keys.go index ef986ef8c..c62b117a7 100644 --- a/routers/user/setting/keys.go +++ b/routers/user/setting/keys.go @@ -23,19 +23,7 @@ func Keys(ctx *context.Context) { ctx.Data["PageIsSettingsKeys"] = true ctx.Data["DisableSSH"] = setting.SSH.Disabled - keys, err := models.ListPublicKeys(ctx.User.ID) - if err != nil { - ctx.ServerError("ListPublicKeys", err) - return - } - ctx.Data["Keys"] = keys - - gpgkeys, err := models.ListGPGKeys(ctx.User.ID) - if err != nil { - ctx.ServerError("ListGPGKeys", err) - return - } - ctx.Data["GPGKeys"] = gpgkeys + loadKeysData(ctx) ctx.HTML(200, tplSettingsKeys) } @@ -45,21 +33,9 @@ func KeysPost(ctx *context.Context, form auth.AddKeyForm) { ctx.Data["Title"] = ctx.Tr("settings") ctx.Data["PageIsSettingsKeys"] = true - keys, err := models.ListPublicKeys(ctx.User.ID) - if err != nil { - ctx.ServerError("ListPublicKeys", err) - return - } - ctx.Data["Keys"] = keys - - gpgkeys, err := models.ListGPGKeys(ctx.User.ID) - if err != nil { - ctx.ServerError("ListGPGKeys", err) - return - } - ctx.Data["GPGKeys"] = gpgkeys - if ctx.HasError() { + loadKeysData(ctx) + ctx.HTML(200, tplSettingsKeys) return } @@ -73,9 +49,13 @@ func KeysPost(ctx *context.Context, form auth.AddKeyForm) { ctx.Flash.Error(ctx.Tr("form.invalid_gpg_key", err.Error())) ctx.Redirect(setting.AppSubURL + "/user/settings/keys") case models.IsErrGPGKeyIDAlreadyUsed(err): + loadKeysData(ctx) + ctx.Data["Err_Content"] = true ctx.RenderWithErr(ctx.Tr("settings.gpg_key_id_used"), tplSettingsKeys, &form) case models.IsErrGPGNoEmailFound(err): + loadKeysData(ctx) + ctx.Data["Err_Content"] = true ctx.RenderWithErr(ctx.Tr("settings.gpg_no_key_email_found"), tplSettingsKeys, &form) default: @@ -103,9 +83,13 @@ func KeysPost(ctx *context.Context, form auth.AddKeyForm) { ctx.Data["HasSSHError"] = true switch { case models.IsErrKeyAlreadyExist(err): + loadKeysData(ctx) + ctx.Data["Err_Content"] = true ctx.RenderWithErr(ctx.Tr("settings.ssh_key_been_used"), tplSettingsKeys, &form) case models.IsErrKeyNameAlreadyUsed(err): + loadKeysData(ctx) + ctx.Data["Err_Title"] = true ctx.RenderWithErr(ctx.Tr("settings.ssh_key_name_used"), tplSettingsKeys, &form) default: @@ -147,3 +131,19 @@ func DeleteKey(ctx *context.Context) { "redirect": setting.AppSubURL + "/user/settings/keys", }) } + +func loadKeysData(ctx *context.Context) { + keys, err := models.ListPublicKeys(ctx.User.ID) + if err != nil { + ctx.ServerError("ListPublicKeys", err) + return + } + ctx.Data["Keys"] = keys + + gpgkeys, err := models.ListGPGKeys(ctx.User.ID) + if err != nil { + ctx.ServerError("ListGPGKeys", err) + return + } + ctx.Data["GPGKeys"] = gpgkeys +} diff --git a/routers/user/setting/profile.go b/routers/user/setting/profile.go index cf222d002..22511ab89 100644 --- a/routers/user/setting/profile.go +++ b/routers/user/setting/profile.go @@ -32,6 +32,7 @@ const ( func Profile(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("settings") ctx.Data["PageIsSettingsProfile"] = true + ctx.HTML(200, tplSettingsProfile) } diff --git a/routers/user/setting/security.go b/routers/user/setting/security.go index 860730303..862e4413c 100644 --- a/routers/user/setting/security.go +++ b/routers/user/setting/security.go @@ -22,6 +22,30 @@ func Security(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("settings") ctx.Data["PageIsSettingsSecurity"] = true + if ctx.Query("openid.return_to") != "" { + settingsOpenIDVerify(ctx) + return + } + + loadSecurityData(ctx) + + ctx.HTML(200, tplSettingsSecurity) +} + +// DeleteAccountLink delete a single account link +func DeleteAccountLink(ctx *context.Context) { + if _, err := models.RemoveAccountLink(ctx.User, ctx.QueryInt64("loginSourceID")); err != nil { + ctx.Flash.Error("RemoveAccountLink: " + err.Error()) + } else { + ctx.Flash.Success(ctx.Tr("settings.remove_account_link_success")) + } + + ctx.JSON(200, map[string]interface{}{ + "redirect": setting.AppSubURL + "/user/settings/security", + }) +} + +func loadSecurityData(ctx *context.Context) { enrolled := true _, err := models.GetTwoFactorByUID(ctx.User.ID) if err != nil { @@ -71,30 +95,10 @@ func Security(ctx *context.Context) { } ctx.Data["AccountLinks"] = sources - if ctx.Query("openid.return_to") != "" { - settingsOpenIDVerify(ctx) - return - } - openid, err := models.GetUserOpenIDs(ctx.User.ID) if err != nil { ctx.ServerError("GetUserOpenIDs", err) return } ctx.Data["OpenIDs"] = openid - - ctx.HTML(200, tplSettingsSecurity) -} - -// DeleteAccountLink delete a single account link -func DeleteAccountLink(ctx *context.Context) { - if _, err := models.RemoveAccountLink(ctx.User, ctx.QueryInt64("loginSourceID")); err != nil { - ctx.Flash.Error("RemoveAccountLink: " + err.Error()) - } else { - ctx.Flash.Success(ctx.Tr("settings.remove_account_link_success")) - } - - ctx.JSON(200, map[string]interface{}{ - "redirect": setting.AppSubURL + "/user/settings/security", - }) } diff --git a/routers/user/setting/security_openid.go b/routers/user/setting/security_openid.go index c98dc2cda..6813765f6 100644 --- a/routers/user/setting/security_openid.go +++ b/routers/user/setting/security_openid.go @@ -19,12 +19,8 @@ func OpenIDPost(ctx *context.Context, form auth.AddOpenIDForm) { ctx.Data["PageIsSettingsSecurity"] = true if ctx.HasError() { - openid, err := models.GetUserOpenIDs(ctx.User.ID) - if err != nil { - ctx.ServerError("GetUserOpenIDs", err) - return - } - ctx.Data["OpenIDs"] = openid + loadSecurityData(ctx) + ctx.HTML(200, tplSettingsSecurity) return } @@ -37,6 +33,8 @@ func OpenIDPost(ctx *context.Context, form auth.AddOpenIDForm) { id, err := openid.Normalize(form.Openid) if err != nil { + loadSecurityData(ctx) + ctx.RenderWithErr(err.Error(), tplSettingsSecurity, &form) return } @@ -53,6 +51,8 @@ func OpenIDPost(ctx *context.Context, form auth.AddOpenIDForm) { // Check that the OpenID is not already used for _, obj := range oids { if obj.URI == id { + loadSecurityData(ctx) + ctx.RenderWithErr(ctx.Tr("form.openid_been_used", id), tplSettingsSecurity, &form) return } @@ -61,6 +61,8 @@ func OpenIDPost(ctx *context.Context, form auth.AddOpenIDForm) { redirectTo := setting.AppURL + "user/settings/security" url, err := openid.RedirectURL(id, redirectTo, setting.AppURL) if err != nil { + loadSecurityData(ctx) + ctx.RenderWithErr(err.Error(), tplSettingsSecurity, &form) return } @@ -73,13 +75,6 @@ func settingsOpenIDVerify(ctx *context.Context) { fullURL := setting.AppURL + ctx.Req.Request.URL.String()[1:] log.Trace("Full URL: " + fullURL) - oids, err := models.GetUserOpenIDs(ctx.User.ID) - if err != nil { - ctx.ServerError("GetUserOpenIDs", err) - return - } - ctx.Data["OpenIDs"] = oids - id, err := openid.Verify(fullURL) if err != nil { ctx.RenderWithErr(err.Error(), tplSettingsSecurity, &auth.AddOpenIDForm{ From 8c6b2324a71bd1335d80fac6db6921b0aa6a3009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20M?= Date: Tue, 19 Jun 2018 10:48:50 +0200 Subject: [PATCH 018/124] Fix missing close tags in U2F (#4256) --- custom/conf/app.ini.sample | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index ef88e5c32..f823f68e4 100644 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -601,9 +601,9 @@ ko-KR = ko [U2F] ; Two Factor authentication with security keys ; https://developers.yubico.com/U2F/App_ID.html -APP_ID = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s +APP_ID = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/ ; Comma seperated list of truisted facets -TRUSTED_FACETS = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s +TRUSTED_FACETS = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/ ; Extension mapping to highlight class ; e.g. .toml=ini From 3f2f5752cb7829c8f49bdb0f03704230493347ac Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 19 Jun 2018 08:51:02 +0000 Subject: [PATCH 019/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_uk-UA.ini | 20 ++++++++++++++------ options/locale/locale_zh-CN.ini | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index b3e8a2fe0..8f90f3a3f 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -204,7 +204,7 @@ non_local_account=Нелокальні акаунти не можуть змін verify=Підтвердити scratch_code=Одноразовий пароль use_scratch_code=Використовувати одноразовий пароль -twofa_scratch_used=Ви використовували одноразовий пароль. Ви були перенаправлені на сторінку налаштувань для генерації нового коду або відключення двуфакторной аутентифікації. +twofa_scratch_used=Ви використовували одноразовий пароль. Ви були перенаправлені на сторінку налаштувань для генерації нового коду або відключення двуфакторної автентифікації. twofa_passcode_incorrect=Ваш пароль є невірним. Якщо ви втратили пристрій, використовуйте ваш одноразовий пароль. twofa_scratch_token_incorrect=Невірний одноразовий пароль. login_userpass=Увійти @@ -399,20 +399,25 @@ generate_token=Згенерувати токен delete_token=Видалити access_token_deletion=Видалити токен доступу -twofa_desc=Двофакторна аутентифікація підвищує безпеку вашого облікового запису. +twofa_desc=Двофакторна автентифікація підвищує безпеку вашого облікового запису. twofa_is_enrolled=Ваш обліковий запис на даний час використовує двофакторну автентифікацію. twofa_disable=Вимкнути двофакторну автентифікацію +twofa_scratch_token_regenerate=Перестворити токен одноразового пароля twofa_enroll=Увімкнути двофакторну автентифікацію +twofa_disable_note=При необхідності можна відключити двофакторну автентифікацію. +regenerate_scratch_token_desc=Якщо ви втратили свій токен одноразового пароля або вже використовували його для входу, ви можете скинути його тут. twofa_disabled=Двофакторна автентифікація вимкнена. -scan_this_image=Проскануйте це зображення вашим додатком для двуфакторної аутентифікації: +scan_this_image=Проскануйте це зображення вашим додатком для двуфакторної автентифікації: or_enter_secret=Або введіть секрет: %s passcode_invalid=Некоректний пароль. Спробуй ще раз. +u2f_desc=Ключами безпеки є апаратні пристрої, що містять криптографічні ключі. Вони можуть використовуватися для двофакторної автентифікації. Ключ безпеки повинен підтримувати стандарт FIDO U2F. u2f_register_key=Додати ключ безпеки u2f_nickname=Псевдонім u2f_delete_key=Видалити ключ безпеки manage_account_links=Керування обліковими записами +manage_account_links_desc=Ці зовнішні акаунти прив'язані до вашого аккаунту Gitea. remove_account_link=Видалити облікові записи orgs_none=Ви не є учасником будь-якої організації. @@ -428,6 +433,7 @@ owner=Власник repo_name=Назва репозиторію visibility=Видимість visiblity_helper=Зробити репозиторій приватним +visiblity_fork_helper=(Зміна цього вплине на всі форки.) clone_helper=Потрібна допомога у клонуванні? Відвідайте Допомогу. fork_repo=Форкнути репозиторій fork_from=Форк з @@ -607,6 +613,7 @@ issues.filter_sort.leastcomment=Найменш коментовані issues.filter_sort.moststars=Найбільш обраних issues.filter_sort.feweststars=Найменш обраних issues.filter_sort.mostforks=Найбільше форків +issues.filter_sort.fewestforks=Найменше форків issues.action_open=Відкрити issues.action_close=Закрити issues.action_label=Мітка @@ -971,6 +978,7 @@ topic.done=Готово [org] org_name_holder=Назва організації org_full_name_holder=Повна назва організації +org_name_helper=Назва організації має бути простою та зрозумілою. create_org=Створити організацію repo_updated=Оновлено people=Учасники @@ -1133,7 +1141,7 @@ repos.forks=Форки repos.issues=Проблеми repos.size=Розмір -auths.auth_manage_panel=Керування джерелом аутентифікації +auths.auth_manage_panel=Керування джерелом автентифікації auths.new=Додати джерело автентифікації auths.name=Ім'я auths.type=Тип @@ -1170,8 +1178,8 @@ auths.oauth2_profileURL=URL профілю auths.oauth2_emailURL=URL електронної пошти auths.enable_auto_register=Увімкнути автоматичну реєстрацію auths.tips=Поради -auths.tips.oauth2.general=OAuth2 аутентифікація -auths.tips.oauth2.general.tip=При додаванні нового OAuth2 провайдера, URL адреса переадресації по завершенні аутентифікації повинена виглядати так:/user/oauth2//callback +auths.tips.oauth2.general=OAuth2 автентифікація +auths.tips.oauth2.general.tip=При додаванні нового OAuth2 провайдера, URL адреса переадресації по завершенні автентифікації повинена виглядати так:/user/oauth2//callback auths.tip.oauth2_provider=Постачальник OAuth2 auths.tip.dropbox=Додайте новий додаток на https://www.dropbox.com/developers/apps auths.tip.facebook=Створіть новий додаток на https://developers.facebook.com/apps і додайте модуль "Facebook Login diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 658f133a2..4e59ed08e 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -213,6 +213,7 @@ send_reset_mail=单击此处(重新)发送您的密码重置邮件 reset_password=重置密码 invalid_code=此确认密钥无效或已过期。 reset_password_helper=单击此处重置密码 +password_too_short=密码长度不能少于 %d 位。 non_local_account=非本地帐户不能通过 Gitea 的 web 界面更改密码。 verify=验证 scratch_code=验证口令 From 467ff4d34302f6ecab959d61bf3944a2bdf125d0 Mon Sep 17 00:00:00 2001 From: Jonas Franz Date: Tue, 19 Jun 2018 17:15:11 +0200 Subject: [PATCH 020/124] Fix milestone appliance and permission checks (#4271) * Fix milestone appliance Fix missing permission check Signed-off-by: Jonas Franz * Fix comment * Add Gitea copyright line --- routers/api/v1/repo/issue.go | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index 211d8045a..7be39166d 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -1,4 +1,5 @@ // Copyright 2016 The Gogs Authors. All rights reserved. +// Copyright 2018 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. @@ -165,7 +166,7 @@ func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { // "$ref": "#/responses/Issue" var deadlineUnix util.TimeStamp - if form.Deadline != nil { + if form.Deadline != nil && ctx.Repo.IsWriter() { deadlineUnix = util.TimeStamp(form.Deadline.Unix()) } @@ -178,15 +179,22 @@ func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { DeadlineUnix: deadlineUnix, } - // Get all assignee IDs - assigneeIDs, err := models.MakeIDsFromAPIAssigneesToAdd(form.Assignee, form.Assignees) - if err != nil { - if models.IsErrUserNotExist(err) { - ctx.Error(422, "", fmt.Sprintf("Assignee does not exist: [name: %s]", err)) - } else { - ctx.Error(500, "AddAssigneeByName", err) + var assigneeIDs = make([]int64, 0) + var err error + if ctx.Repo.IsWriter() { + issue.MilestoneID = form.Milestone + assigneeIDs, err = models.MakeIDsFromAPIAssigneesToAdd(form.Assignee, form.Assignees) + if err != nil { + if models.IsErrUserNotExist(err) { + ctx.Error(422, "", fmt.Sprintf("Assignee does not exist: [name: %s]", err)) + } else { + ctx.Error(500, "AddAssigneeByName", err) + } + return } - return + } else { + // setting labels is not allowed if user is not a writer + form.Labels = make([]int64, 0) } if err := models.NewIssue(ctx.Repo.Repository, issue, form.Labels, assigneeIDs, nil); err != nil { From a93f13849cd7f54029f1dc17b642d024b98ee71e Mon Sep 17 00:00:00 2001 From: David Schneiderbauer Date: Tue, 19 Jun 2018 21:44:33 +0200 Subject: [PATCH 021/124] Fix not removed watches on unallowed repositories (#4201) --- models/issue_watch.go | 12 +++ models/migrations/migrations.go | 2 + models/migrations/v67.go | 158 ++++++++++++++++++++++++++++++++ models/org_team.go | 49 ++++++++++ models/repo.go | 3 + models/repo_collaboration.go | 9 ++ 6 files changed, 233 insertions(+) create mode 100644 models/migrations/v67.go diff --git a/models/issue_watch.go b/models/issue_watch.go index 69e218af0..3e7d24821 100644 --- a/models/issue_watch.go +++ b/models/issue_watch.go @@ -71,3 +71,15 @@ func getIssueWatchers(e Engine, issueID int64) (watches []*IssueWatch, err error Find(&watches) return } + +func removeIssueWatchersByRepoID(e Engine, userID int64, repoID int64) error { + iw := &IssueWatch{ + IsWatching: false, + } + _, err := e. + Join("INNER", "issue", "`issue`.id = `issue_watch`.issue_id AND `issue`.repo_id = ?", repoID). + Cols("is_watching", "updated_unix"). + Where("`issue_watch`.user_id = ?", userID). + Update(iw) + return err +} diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 1300065ab..2537e5712 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -186,6 +186,8 @@ var migrations = []Migration{ NewMigration("add u2f", addU2FReg), // v66 -> v67 NewMigration("add login source id column for public_key table", addLoginSourceIDToPublicKeyTable), + // v67 -> v68 + NewMigration("remove stale watches", removeStaleWatches), } // Migrate database to current version diff --git a/models/migrations/v67.go b/models/migrations/v67.go new file mode 100644 index 000000000..278221919 --- /dev/null +++ b/models/migrations/v67.go @@ -0,0 +1,158 @@ +// Copyright 2018 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package migrations + +import ( + "code.gitea.io/gitea/modules/setting" + + "github.com/go-xorm/xorm" +) + +func removeStaleWatches(x *xorm.Engine) error { + type Watch struct { + ID int64 + UserID int64 + RepoID int64 + } + + type IssueWatch struct { + ID int64 + UserID int64 + RepoID int64 + IsWatching bool + } + + type Repository struct { + ID int64 + IsPrivate bool + OwnerID int64 + } + + type Access struct { + UserID int64 + RepoID int64 + Mode int + } + + const ( + // AccessModeNone no access + AccessModeNone int = iota // 0 + // AccessModeRead read access + AccessModeRead // 1 + ) + + accessLevel := func(userID int64, repo *Repository) (int, error) { + mode := AccessModeNone + if !repo.IsPrivate { + mode = AccessModeRead + } + + if userID == 0 { + return mode, nil + } + + if userID == repo.OwnerID { + return 4, nil + } + + a := &Access{UserID: userID, RepoID: repo.ID} + if has, err := x.Get(a); !has || err != nil { + return mode, err + } + return a.Mode, nil + } + + sess := x.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return err + } + + repoCache := make(map[int64]*Repository) + err := x.BufferSize(setting.IterateBufferSize).Iterate(new(Watch), + func(idx int, bean interface{}) error { + watch := bean.(*Watch) + + repo := repoCache[watch.RepoID] + if repo == nil { + repo = &Repository{ + ID: watch.RepoID, + } + if _, err := x.Get(repo); err != nil { + return err + } + repoCache[watch.RepoID] = repo + } + + // Remove watches from now unaccessible repositories + mode, err := accessLevel(watch.UserID, repo) + if err != nil { + return err + } + has := AccessModeRead <= mode + if has { + return nil + } + + if _, err = sess.Delete(&Watch{0, watch.UserID, repo.ID}); err != nil { + return err + } + _, err = sess.Exec("UPDATE `repository` SET num_watches = num_watches - 1 WHERE id = ?", repo.ID) + + return err + }) + if err != nil { + return err + } + + repoCache = make(map[int64]*Repository) + err = x.BufferSize(setting.IterateBufferSize). + Distinct("issue_watch.user_id", "issue.repo_id"). + Join("INNER", "issue", "issue_watch.issue_id = issue.id"). + Where("issue_watch.is_watching = ?", true). + Iterate(new(IssueWatch), + func(idx int, bean interface{}) error { + watch := bean.(*IssueWatch) + + repo := repoCache[watch.RepoID] + if repo == nil { + repo = &Repository{ + ID: watch.RepoID, + } + if _, err := x.Get(repo); err != nil { + return err + } + repoCache[watch.RepoID] = repo + } + + // Remove issue watches from now unaccssible repositories + mode, err := accessLevel(watch.UserID, repo) + if err != nil { + return err + } + has := AccessModeRead <= mode + if has { + return nil + } + + iw := &IssueWatch{ + IsWatching: false, + } + + _, err = sess. + Join("INNER", "issue", "`issue`.id = `issue_watch`.issue_id AND `issue`.repo_id = ?", watch.RepoID). + Cols("is_watching", "updated_unix"). + Where("`issue_watch`.user_id = ?", watch.UserID). + Update(iw) + + return err + + }) + if err != nil { + return err + } + + return sess.Commit() +} diff --git a/models/org_team.go b/models/org_team.go index 9d8a03141..5ea6e76cd 100644 --- a/models/org_team.go +++ b/models/org_team.go @@ -178,6 +178,11 @@ func (t *Team) removeRepository(e Engine, repo *Repository, recalculate bool) (e if err = watchRepo(e, teamUser.UID, repo.ID, false); err != nil { return err } + + // Remove all IssueWatches a user has subscribed to in the repositories + if err := removeIssueWatchersByRepoID(e, teamUser.UID, repo.ID); err != nil { + return err + } } return nil @@ -374,11 +379,34 @@ func DeleteTeam(t *Team) error { return err } + if err := t.getMembers(sess); err != nil { + return err + } + // Delete all accesses. for _, repo := range t.Repos { if err := repo.recalculateTeamAccesses(sess, t.ID); err != nil { return err } + + // Remove watches from all users and now unaccessible repos + for _, user := range t.Members { + has, err := hasAccess(sess, user.ID, repo, AccessModeRead) + if err != nil { + return err + } else if has { + continue + } + + if err = watchRepo(sess, user.ID, repo.ID, false); err != nil { + return err + } + + // Remove all IssueWatches a user has subscribed to in the repositories + if err = removeIssueWatchersByRepoID(sess, user.ID, repo.ID); err != nil { + return err + } + } } // Delete team-repo @@ -518,6 +546,10 @@ func AddTeamMember(team *Team, userID int64) error { if err := repo.recalculateTeamAccesses(sess, 0); err != nil { return err } + + if err = watchRepo(sess, userID, repo.ID, true); err != nil { + return err + } } return sess.Commit() @@ -558,6 +590,23 @@ func removeTeamMember(e *xorm.Session, team *Team, userID int64) error { if err := repo.recalculateTeamAccesses(e, 0); err != nil { return err } + + // Remove watches from now unaccessible + has, err := hasAccess(e, userID, repo, AccessModeRead) + if err != nil { + return err + } else if has { + continue + } + + if err = watchRepo(e, userID, repo.ID, false); err != nil { + return err + } + + // Remove all IssueWatches a user has subscribed to in the repositories + if err := removeIssueWatchersByRepoID(e, userID, repo.ID); err != nil { + return err + } } // Check if the user is a member of any team in the organization. diff --git a/models/repo.go b/models/repo.go index f4923cf4a..7f2be502a 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1851,6 +1851,9 @@ func DeleteRepository(doer *User, uid, repoID int64) error { if _, err = sess.In("issue_id", issueIDs).Delete(&Reaction{}); err != nil { return err } + if _, err = sess.In("issue_id", issueIDs).Delete(&IssueWatch{}); err != nil { + return err + } attachments := make([]*Attachment, 0, 5) if err = sess. diff --git a/models/repo_collaboration.go b/models/repo_collaboration.go index 0448149e6..9d2935d58 100644 --- a/models/repo_collaboration.go +++ b/models/repo_collaboration.go @@ -172,5 +172,14 @@ func (repo *Repository) DeleteCollaboration(uid int64) (err error) { return err } + if err = watchRepo(sess, uid, repo.ID, false); err != nil { + return err + } + + // Remove all IssueWatches a user has subscribed to in the repository + if err := removeIssueWatchersByRepoID(sess, uid, repo.ID); err != nil { + return err + } + return sess.Commit() } From d84da8fe6562d9e7d2b5bb3626631ecefdca854e Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Wed, 20 Jun 2018 01:06:01 -0400 Subject: [PATCH 022/124] Change parsing of postgresql settings (#4275) * Change parsing of postgresql settings Fix #4200 * Add copyright * update postgresql connection string * add tests --- models/models.go | 22 ++++++++++++++-------- models/models_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/models/models.go b/models/models.go index ddf784dee..5743f1862 100644 --- a/models/models.go +++ b/models/models.go @@ -1,4 +1,5 @@ // Copyright 2014 The Gogs Authors. All rights reserved. +// Copyright 2018 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. @@ -184,6 +185,18 @@ func parsePostgreSQLHostPort(info string) (string, string) { return host, port } +func getPostgreSQLConnectionString(DBHost, DBUser, DBPasswd, DBName, DBParam, DBSSLMode string) (connStr string) { + host, port := parsePostgreSQLHostPort(DBHost) + if host[0] == '/' { // looks like a unix socket + connStr = fmt.Sprintf("postgres://%s:%s@:%s/%s%ssslmode=%s&host=%s", + url.PathEscape(DBUser), url.PathEscape(DBPasswd), port, DBName, DBParam, DBSSLMode, host) + } else { + connStr = fmt.Sprintf("postgres://%s:%s@%s:%s/%s%ssslmode=%s", + url.PathEscape(DBUser), url.PathEscape(DBPasswd), host, port, DBName, DBParam, DBSSLMode) + } + return +} + func parseMSSQLHostPort(info string) (string, string) { host, port := "127.0.0.1", "1433" if strings.Contains(info, ":") { @@ -214,14 +227,7 @@ func getEngine() (*xorm.Engine, error) { DbCfg.User, DbCfg.Passwd, DbCfg.Host, DbCfg.Name, Param) } case "postgres": - host, port := parsePostgreSQLHostPort(DbCfg.Host) - if host[0] == '/' { // looks like a unix socket - connStr = fmt.Sprintf("postgres://%s:%s@:%s/%s%ssslmode=%s&host=%s", - url.QueryEscape(DbCfg.User), url.QueryEscape(DbCfg.Passwd), port, DbCfg.Name, Param, DbCfg.SSLMode, host) - } else { - connStr = fmt.Sprintf("postgres://%s:%s@%s:%s/%s%ssslmode=%s", - url.QueryEscape(DbCfg.User), url.QueryEscape(DbCfg.Passwd), host, port, DbCfg.Name, Param, DbCfg.SSLMode) - } + connStr = getPostgreSQLConnectionString(DbCfg.Host, DbCfg.User, DbCfg.Passwd, DbCfg.Name, Param, DbCfg.SSLMode) case "mssql": host, port := parseMSSQLHostPort(DbCfg.Host) connStr = fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", host, port, DbCfg.Name, DbCfg.User, DbCfg.Passwd) diff --git a/models/models_test.go b/models/models_test.go index 649b1e02e..7016fdb4b 100644 --- a/models/models_test.go +++ b/models/models_test.go @@ -1,4 +1,5 @@ // Copyright 2016 The Gogs Authors. All rights reserved. +// Copyright 2018 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. @@ -53,3 +54,42 @@ func Test_parsePostgreSQLHostPort(t *testing.T) { assert.Equal(t, test.Port, port) } } + +func Test_getPostgreSQLConnectionString(t *testing.T) { + tests := []struct { + Host string + Port string + User string + Passwd string + Name string + Param string + SSLMode string + Output string + }{ + { + Host: "/tmp/pg.sock", + Port: "4321", + User: "testuser", + Passwd: "space space !#$%^^%^```-=?=", + Name: "gitea", + Param: "", + SSLMode: "false", + Output: "postgres://testuser:space%20space%20%21%23$%25%5E%5E%25%5E%60%60%60-=%3F=@:5432/giteasslmode=false&host=/tmp/pg.sock", + }, + { + Host: "localhost", + Port: "1234", + User: "pgsqlusername", + Passwd: "I love Gitea!", + Name: "gitea", + Param: "", + SSLMode: "true", + Output: "postgres://pgsqlusername:I%20love%20Gitea%21@localhost:5432/giteasslmode=true", + }, + } + + for _, test := range tests { + connStr := getPostgreSQLConnectionString(test.Host, test.User, test.Passwd, test.Name, test.Param, test.SSLMode) + assert.Equal(t, test.Output, connStr) + } +} From cd29888906d4a0463ec2191113ca5b5399901291 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 20 Jun 2018 18:03:22 +0200 Subject: [PATCH 023/124] Updated drone config to use the "next" git plugin (#4281) --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 6ab40a39d..8e571640b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -4,7 +4,7 @@ workspace: clone: git: - image: plugins/git:1 + image: plugins/git:next depth: 50 tags: true From ac110d1b739bdbbbac3d1156afcfa9817663e891 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Wed, 20 Jun 2018 16:04:23 +0000 Subject: [PATCH 024/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_de-DE.ini | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index d618d2c9a..4b1b85f92 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -588,7 +588,7 @@ editor.edit_file=Datei bearbeiten editor.preview_changes=Vorschau der Änderungen editor.cannot_edit_non_text_files=Binärdateien können nicht im Webinterface bearbeitet werden. editor.edit_this_file=Datei bearbeiten -editor.must_be_on_a_branch=Du musst dich in einer Branch befinden, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen. +editor.must_be_on_a_branch=Du musst dich in einem Branch befinden, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen. editor.fork_before_edit=Du musst dieses Repository forken, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen. editor.delete_this_file=Datei löschen editor.must_have_write_access=Du benötigst Schreibzugriff, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen. @@ -1085,16 +1085,16 @@ settings.protect_whitelist_search_users=Benutzer suchen… settings.protect_whitelist_teams=Teams, die pushen dürfen: settings.protect_whitelist_search_teams=Suche nach Teams… settings.protect_merge_whitelist_committers=Merge-Whitelist aktivieren -settings.protect_merge_whitelist_committers_desc=Erlaube Nutzern oder Teams auf der Whitelist Pull-Requests in diese Branch zu mergen. +settings.protect_merge_whitelist_committers_desc=Erlaube Nutzern oder Teams auf der Whitelist Pull-Requests in diesen Branch zu mergen. settings.protect_merge_whitelist_users=Nutzer, die mergen dürfen: settings.protect_merge_whitelist_teams=Teams, die mergen dürfen: settings.add_protected_branch=Schutz aktivieren settings.delete_protected_branch=Schutz deaktivieren settings.update_protect_branch_success=Branch-Schutz für den Branch „%s“ wurde geändert. settings.remove_protected_branch_success=Branch-Schutz für den Branch „%s“ wurde deaktiviert. -settings.protected_branch_deletion=Brach-Schutz deaktivieren +settings.protected_branch_deletion=Branch-Schutz deaktivieren settings.protected_branch_deletion_desc=Wenn du den Branch-Schutz deaktivierst, können alle Nutzer mit Schreibrechten auf den Branch pushen. Fortfahren? -settings.default_branch_desc=Wähle eine Standardbranch für Pull-Requests und Code-Commits: +settings.default_branch_desc=Wähle einen Standardbranch für Pull-Requests und Code-Commits: settings.choose_branch=Wähle einen Branch … settings.no_protected_branch=Es gibt keine geschützten Branches. @@ -1238,7 +1238,7 @@ teams.update_settings=Einstellungen aktualisieren teams.delete_team=Team löschen teams.add_team_member=Teammitglied hinzufügen teams.delete_team_title=Team löschen -teams.delete_team_desc=Das Löschen eines Teams wiederruft den Repository-Zugriff für seine Mitglieder. Fortfahren? +teams.delete_team_desc=Das Löschen eines Teams widerruft den Repository-Zugriff für seine Mitglieder. Fortfahren? teams.delete_team_success=Das Team wurde gelöscht. teams.read_permission_desc=Dieses Team hat Lesezugriff: Mitglieder können Team-Repositories einsehen und klonen. teams.write_permission_desc=Dieses Team hat Schreibzugriff: Mitglieder können Team-Repositories einsehen und darauf pushen. From 9ae7664df7caa24825cc4cee4e4121e9f1d73e59 Mon Sep 17 00:00:00 2001 From: Russell Aunger Date: Thu, 21 Jun 2018 01:22:03 -0400 Subject: [PATCH 025/124] Fix webhook type conflation. (#4285) - Fix typo that caused Gogs hooks to be created as Gitea hooks. - Fix typo that caused Gogs hooks to be duplicated upon edit (though this bug was masked by the previous one). Signed-off-by: Russell Aunger --- routers/repo/webhook.go | 2 +- routers/routes/routes.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/repo/webhook.go b/routers/repo/webhook.go index 63450ed88..53c1afe66 100644 --- a/routers/repo/webhook.go +++ b/routers/repo/webhook.go @@ -210,7 +210,7 @@ func GogsHooksNewPost(ctx *context.Context, form auth.NewGogshookForm) { Secret: form.Secret, HookEvent: ParseHookEvent(form.WebhookForm), IsActive: form.Active, - HookTaskType: models.GITEA, + HookTaskType: models.GOGS, OrgID: orCtx.OrgID, } if err := w.UpdateEvent(); err != nil { diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 15b91f159..250b98507 100644 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -486,7 +486,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/:id", repo.WebHooksEdit) m.Post("/:id/test", repo.TestWebhook) m.Post("/gitea/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost) - m.Post("/gogs/:id", bindIgnErr(auth.NewGogshookForm{}), repo.GogsHooksNewPost) + m.Post("/gogs/:id", bindIgnErr(auth.NewGogshookForm{}), repo.GogsHooksEditPost) m.Post("/slack/:id", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksEditPost) m.Post("/discord/:id", bindIgnErr(auth.NewDiscordHookForm{}), repo.DiscordHooksEditPost) m.Post("/dingtalk/:id", bindIgnErr(auth.NewDingtalkHookForm{}), repo.DingtalkHooksEditPost) From 46d19c4676efe5201c5de790bcb963bfc93a95c7 Mon Sep 17 00:00:00 2001 From: Alexey Terentyev Date: Thu, 21 Jun 2018 12:09:46 +0300 Subject: [PATCH 026/124] Fix topics addition (Another solution) (#4031) (#4258) * Added topics validation, fixed repo topics duplication (#4031) Signed-off-by: Alexey Terentyev * Added tests Signed-off-by: Alexey Terentyev * Fixed fmt Signed-off-by: Alexey Terentyev * Added comments to exported functions Signed-off-by: Alexey Terentyev * Deleted RemoveDuplicateTopics function Signed-off-by: Alexey Terentyev * Fixed messages Signed-off-by: Alexey Terentyev * Added migration Signed-off-by: Alexey Terentyev * fmt migration file Signed-off-by: Alexey Terentyev * fixed lint Signed-off-by: Alexey Terentyev * Added Copyright Signed-off-by: Alexey Terentyev * Added query solution for duplicates Signed-off-by: Alexey Terentyev * Fixed migration query Signed-off-by: Alexey Terentyev * Changed RegExp. Fixed migration Signed-off-by: Alexey Terentyev * fmt migration file Signed-off-by: Alexey Terentyev * Fixed test for changed regexp Signed-off-by: Alexey Terentyev * Removed validation log messages Signed-off-by: Alexey Terentyev * Renamed migration file Signed-off-by: Alexey Terentyev * Renamed validate function Signed-off-by: Alexey Terentyev --- models/migrations/migrations.go | 2 + models/migrations/v68.go | 160 ++++++++++++++++++++++++++++++++ models/topic.go | 15 +++ models/topic_test.go | 13 +++ options/locale/locale_en-US.ini | 2 + public/js/index.js | 4 +- routers/repo/topic.go | 35 ++++++- routers/routes/routes.go | 2 +- 8 files changed, 229 insertions(+), 4 deletions(-) create mode 100644 models/migrations/v68.go diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 2537e5712..7732e1709 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -188,6 +188,8 @@ var migrations = []Migration{ NewMigration("add login source id column for public_key table", addLoginSourceIDToPublicKeyTable), // v67 -> v68 NewMigration("remove stale watches", removeStaleWatches), + // v68 -> V69 + NewMigration("Reformat and remove incorrect topics", reformatAndRemoveIncorrectTopics), } // Migrate database to current version diff --git a/models/migrations/v68.go b/models/migrations/v68.go new file mode 100644 index 000000000..d6a0d04c5 --- /dev/null +++ b/models/migrations/v68.go @@ -0,0 +1,160 @@ +// Copyright 2018 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package migrations + +import ( + "strings" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/log" + + "github.com/go-xorm/xorm" +) + +func reformatAndRemoveIncorrectTopics(x *xorm.Engine) (err error) { + log.Info("This migration could take up to minutes, please be patient.") + type Topic struct { + ID int64 + Name string `xorm:"unique"` + } + + sess := x.NewSession() + defer sess.Close() + + const batchSize = 100 + touchedRepo := make(map[int64]struct{}) + topics := make([]*Topic, 0, batchSize) + delTopicIDs := make([]int64, 0, batchSize) + ids := make([]int64, 0, 30) + + if err := sess.Begin(); err != nil { + return err + } + log.Info("Validating existed topics...") + for start := 0; ; start += batchSize { + topics = topics[:0] + if err := sess.Asc("id").Limit(batchSize, start).Find(&topics); err != nil { + return err + } + if len(topics) == 0 { + break + } + for _, topic := range topics { + if models.ValidateTopic(topic.Name) { + continue + } + topic.Name = strings.Replace(strings.TrimSpace(strings.ToLower(topic.Name)), " ", "-", -1) + + if err := sess.Table("repo_topic").Cols("repo_id"). + Where("topic_id = ?", topic.ID).Find(&ids); err != nil { + return err + } + for _, id := range ids { + touchedRepo[id] = struct{}{} + } + + if models.ValidateTopic(topic.Name) { + log.Info("Updating topic: id = %v, name = %v", topic.ID, topic.Name) + if _, err := sess.Table("topic").ID(topic.ID). + Update(&Topic{Name: topic.Name}); err != nil { + return err + } + } else { + delTopicIDs = append(delTopicIDs, topic.ID) + } + } + } + + log.Info("Deleting incorrect topics...") + for start := 0; ; start += batchSize { + if (start + batchSize) < len(delTopicIDs) { + ids = delTopicIDs[start:(start + batchSize)] + } else { + ids = delTopicIDs[start:] + } + + log.Info("Deleting 'repo_topic' rows for topics with ids = %v", ids) + if _, err := sess.In("topic_id", ids).Delete(&models.RepoTopic{}); err != nil { + return err + } + + log.Info("Deleting topics with id = %v", ids) + if _, err := sess.In("id", ids).Delete(&Topic{}); err != nil { + return err + } + + if len(ids) < batchSize { + break + } + } + + repoTopics := make([]*models.RepoTopic, 0, batchSize) + delRepoTopics := make([]*models.RepoTopic, 0, batchSize) + tmpRepoTopics := make([]*models.RepoTopic, 0, 30) + + log.Info("Checking the number of topics in the repositories...") + for start := 0; ; start += batchSize { + repoTopics = repoTopics[:0] + if err := sess.Cols("repo_id").Asc("repo_id").Limit(batchSize, start). + GroupBy("repo_id").Having("COUNT(*) > 25").Find(&repoTopics); err != nil { + return err + } + if len(repoTopics) == 0 { + break + } + + log.Info("Number of repositories with more than 25 topics: %v", len(repoTopics)) + for _, repoTopic := range repoTopics { + touchedRepo[repoTopic.RepoID] = struct{}{} + + tmpRepoTopics = tmpRepoTopics[:0] + if err := sess.Where("repo_id = ?", repoTopic.RepoID).Find(&tmpRepoTopics); err != nil { + return err + } + + log.Info("Repository with id = %v has %v topics", repoTopic.RepoID, len(tmpRepoTopics)) + + for i := len(tmpRepoTopics) - 1; i > 24; i-- { + delRepoTopics = append(delRepoTopics, tmpRepoTopics[i]) + } + } + } + + log.Info("Deleting superfluous topics for repositories (more than 25 topics)...") + for _, repoTopic := range delRepoTopics { + log.Info("Deleting 'repo_topic' rows for 'repository' with id = %v. Topic id = %v", + repoTopic.RepoID, repoTopic.TopicID) + + if _, err := sess.Where("repo_id = ? AND topic_id = ?", repoTopic.RepoID, + repoTopic.TopicID).Delete(&models.RepoTopic{}); err != nil { + return err + } + if _, err := sess.Exec( + "UPDATE topic SET repo_count = (SELECT repo_count FROM topic WHERE id = ?) - 1 WHERE id = ?", + repoTopic.TopicID, repoTopic.TopicID); err != nil { + return err + } + } + + topicNames := make([]string, 0, 30) + log.Info("Updating repositories 'topics' fields...") + for repoID := range touchedRepo { + if err := sess.Table("topic").Cols("name"). + Join("INNER", "repo_topic", "topic.id = repo_topic.topic_id"). + Where("repo_topic.repo_id = ?", repoID).Find(&topicNames); err != nil { + return err + } + log.Info("Updating 'topics' field for repository with id = %v", repoID) + if _, err := sess.ID(repoID).Cols("topics"). + Update(&models.Repository{Topics: topicNames}); err != nil { + return err + } + } + if err := sess.Commit(); err != nil { + return err + } + + return nil +} diff --git a/models/topic.go b/models/topic.go index 3b1737f8a..247aac5ff 100644 --- a/models/topic.go +++ b/models/topic.go @@ -6,6 +6,7 @@ package models import ( "fmt" + "regexp" "strings" "code.gitea.io/gitea/modules/util" @@ -20,6 +21,8 @@ func init() { ) } +var topicPattern = regexp.MustCompile(`^[a-z0-9][a-z0-9-]*$`) + // Topic represents a topic of repositories type Topic struct { ID int64 @@ -51,6 +54,11 @@ func (err ErrTopicNotExist) Error() string { return fmt.Sprintf("topic is not exist [name: %s]", err.Name) } +// ValidateTopic checks topics by length and match pattern rules +func ValidateTopic(topic string) bool { + return len(topic) <= 35 && topicPattern.MatchString(topic) +} + // GetTopicByName retrieves topic by name func GetTopicByName(name string) (*Topic, error) { var topic Topic @@ -182,6 +190,13 @@ func SaveTopics(repoID int64, topicNames ...string) error { } } + topicNames = topicNames[:0] + if err := sess.Table("topic").Cols("name"). + Join("INNER", "repo_topic", "topic.id = repo_topic.topic_id"). + Where("repo_topic.repo_id = ?", repoID).Find(&topicNames); err != nil { + return err + } + if _, err := sess.ID(repoID).Cols("topics").Update(&Repository{ Topics: topicNames, }); err != nil { diff --git a/models/topic_test.go b/models/topic_test.go index 472f4e52d..ef374e557 100644 --- a/models/topic_test.go +++ b/models/topic_test.go @@ -55,3 +55,16 @@ func TestAddTopic(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, 2, len(topics)) } + +func TestTopicValidator(t *testing.T) { + assert.True(t, ValidateTopic("12345")) + assert.True(t, ValidateTopic("2-test")) + assert.True(t, ValidateTopic("test-3")) + assert.True(t, ValidateTopic("first")) + assert.True(t, ValidateTopic("second-test-topic")) + assert.True(t, ValidateTopic("third-project-topic-with-max-length")) + + assert.False(t, ValidateTopic("$fourth-test,topic")) + assert.False(t, ValidateTopic("-fifth-test-topic")) + assert.False(t, ValidateTopic("sixth-go-project-topic-with-excess-length")) +} diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 8cf6111c6..21ae775e4 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1167,6 +1167,8 @@ branch.protected_deletion_failed = Branch '%s' is protected. It cannot be delete topic.manage_topics = Manage Topics topic.done = Done +topic.count_prompt = You can't select more than 25 topics +topic.format_prompt = Topics must start with a letter or number, can include hyphens(-) and must be no more than 35 characters long [org] org_name_holder = Organization Name diff --git a/public/js/index.js b/public/js/index.js index e98a3fe6d..823dd8766 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -2336,8 +2336,10 @@ function initTopicbar() { }).done(function() { editDiv.hide(); viewDiv.show(); + }).fail(function(xhr) { + alert(xhr.responseJSON.message) }) - }) + }); $('#topic_edit .dropdown').dropdown({ allowAdditions: true, diff --git a/routers/repo/topic.go b/routers/repo/topic.go index 2a43d53ff..63fcf793f 100644 --- a/routers/repo/topic.go +++ b/routers/repo/topic.go @@ -12,8 +12,8 @@ import ( "code.gitea.io/gitea/modules/log" ) -// TopicPost response for creating repository -func TopicPost(ctx *context.Context) { +// TopicsPost response for creating repository +func TopicsPost(ctx *context.Context) { if ctx.User == nil { ctx.JSON(403, map[string]interface{}{ "message": "Only owners could change the topics.", @@ -27,6 +27,37 @@ func TopicPost(ctx *context.Context) { topics = strings.Split(topicsStr, ",") } + invalidTopics := make([]string, 0) + i := 0 + for _, topic := range topics { + topic = strings.TrimSpace(strings.ToLower(topic)) + // ignore empty string + if len(topic) > 0 { + topics[i] = topic + i++ + } + if !models.ValidateTopic(topic) { + invalidTopics = append(invalidTopics, topic) + } + } + topics = topics[:i] + + if len(topics) > 25 { + ctx.JSON(422, map[string]interface{}{ + "invalidTopics": topics[:0], + "message": ctx.Tr("repo.topic.count_prompt"), + }) + return + } + + if len(invalidTopics) > 0 { + ctx.JSON(422, map[string]interface{}{ + "invalidTopics": invalidTopics, + "message": ctx.Tr("repo.topic.format_prompt"), + }) + return + } + err := models.SaveTopics(ctx.Repo.Repository.ID, topics...) if err != nil { log.Error(2, "SaveTopics failed: %v", err) diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 250b98507..1eefbf1b6 100644 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -626,7 +626,7 @@ func RegisterRoutes(m *macaron.Macaron) { }, context.RepoAssignment(), context.UnitTypes(), context.LoadRepoUnits(), context.CheckUnit(models.UnitTypeReleases)) m.Group("/:username/:reponame", func() { - m.Post("/topics", repo.TopicPost) + m.Post("/topics", repo.TopicsPost) }, context.RepoAssignment(), reqRepoAdmin) m.Group("/:username/:reponame", func() { From 0b3ea428477b9da33f40252e79aafe85b09526f3 Mon Sep 17 00:00:00 2001 From: David Schneiderbauer Date: Thu, 21 Jun 2018 18:00:13 +0200 Subject: [PATCH 027/124] hide issues from org private repos w/o team assignment (#4034) --- integrations/api_repo_test.go | 6 +- models/access_test.go | 16 ++- models/fixtures/repository.yml | 15 ++- models/fixtures/team.yml | 8 +- models/fixtures/team_repo.yml | 10 +- models/fixtures/team_unit.yml | 209 ++++++++++++++++++++++++++++++++ models/fixtures/user.yml | 2 +- models/migrations/migrations.go | 2 + models/migrations/v38.go | 9 +- models/migrations/v69.go | 80 ++++++++++++ models/models.go | 1 + models/notification.go | 10 ++ models/org.go | 17 ++- models/org_team.go | 86 +++++++++++-- models/org_test.go | 12 +- models/repo.go | 18 +-- models/repo_list_test.go | 6 +- models/repo_watch.go | 17 +++ models/user.go | 38 ++++-- models/user_test.go | 22 ++++ routers/org/teams.go | 21 +++- routers/user/home.go | 6 +- routers/user/home_test.go | 4 +- templates/org/team/new.tmpl | 2 +- 24 files changed, 545 insertions(+), 72 deletions(-) create mode 100644 models/fixtures/team_unit.yml create mode 100644 models/migrations/v69.go diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go index b766dd584..12429c88a 100644 --- a/integrations/api_repo_test.go +++ b/integrations/api_repo_test.go @@ -67,9 +67,9 @@ func TestAPISearchRepo(t *testing.T) { expectedResults }{ {name: "RepositoriesMax50", requestURL: "/api/v1/repos/search?limit=50", expectedResults: expectedResults{ - nil: {count: 15}, - user: {count: 15}, - user2: {count: 15}}, + nil: {count: 16}, + user: {count: 16}, + user2: {count: 16}}, }, {name: "RepositoriesMax10", requestURL: "/api/v1/repos/search?limit=10", expectedResults: expectedResults{ nil: {count: 10}, diff --git a/models/access_test.go b/models/access_test.go index 59575acb7..46d6f723e 100644 --- a/models/access_test.go +++ b/models/access_test.go @@ -22,8 +22,12 @@ func TestAccessLevel(t *testing.T) { user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User) - repo1 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 2, IsPrivate: false}).(*Repository) - repo2 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 3, IsPrivate: true}).(*Repository) + // A public repository owned by User 2 + repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository) + assert.False(t, repo1.IsPrivate) + // A private repository owned by Org 3 + repo2 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository) + assert.True(t, repo2.IsPrivate) level, err := AccessLevel(user1.ID, repo1) assert.NoError(t, err) @@ -47,8 +51,12 @@ func TestHasAccess(t *testing.T) { user1 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) user2 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User) - repo1 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 2, IsPrivate: false}).(*Repository) - repo2 := AssertExistsAndLoadBean(t, &Repository{OwnerID: 3, IsPrivate: true}).(*Repository) + // A public repository owned by User 2 + repo1 := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository) + assert.False(t, repo1.IsPrivate) + // A private repository owned by Org 3 + repo2 := AssertExistsAndLoadBean(t, &Repository{ID: 3}).(*Repository) + assert.True(t, repo2.IsPrivate) for _, accessMode := range accessModes { has, err := HasAccess(user1.ID, repo1, accessMode) diff --git a/models/fixtures/repository.yml b/models/fixtures/repository.yml index c7d73fe17..3238b65ea 100644 --- a/models/fixtures/repository.yml +++ b/models/fixtures/repository.yml @@ -351,7 +351,7 @@ is_mirror: true num_forks: 1 is_fork: false - + - id: 29 fork_id: 27 @@ -365,7 +365,7 @@ num_closed_pulls: 0 is_mirror: false is_fork: true - + - id: 30 fork_id: 28 @@ -389,3 +389,14 @@ num_forks: 0 num_issues: 0 is_mirror: false + +- + id: 32 + owner_id: 3 + lower_name: repo21 + name: repo21 + is_private: false + num_stars: 0 + num_forks: 0 + num_issues: 0 + is_mirror: false diff --git a/models/fixtures/team.yml b/models/fixtures/team.yml index 1d242cb5b..4b4a1d798 100644 --- a/models/fixtures/team.yml +++ b/models/fixtures/team.yml @@ -4,9 +4,8 @@ lower_name: owners name: Owners authorize: 4 # owner - num_repos: 2 + num_repos: 3 num_members: 1 - unit_types: '[1,2,3,4,5,6,7]' - id: 2 @@ -16,7 +15,6 @@ authorize: 2 # write num_repos: 1 num_members: 2 - unit_types: '[1,2,3,4,5,6,7]' - id: 3 @@ -26,7 +24,6 @@ authorize: 4 # owner num_repos: 0 num_members: 1 - unit_types: '[1,2,3,4,5,6,7]' - id: 4 @@ -36,7 +33,6 @@ authorize: 4 # owner num_repos: 0 num_members: 1 - unit_types: '[1,2,3,4,5,6,7]' - id: 5 @@ -46,7 +42,6 @@ authorize: 4 # owner num_repos: 2 num_members: 2 - unit_types: '[1,2,3,4,5,6,7]' - id: 6 @@ -56,4 +51,3 @@ authorize: 4 # owner num_repos: 2 num_members: 1 - unit_types: '[1,2,3,4,5,6,7]' \ No newline at end of file diff --git a/models/fixtures/team_repo.yml b/models/fixtures/team_repo.yml index 9e6d74553..b324e0941 100644 --- a/models/fixtures/team_repo.yml +++ b/models/fixtures/team_repo.yml @@ -33,9 +33,15 @@ org_id: 19 team_id: 6 repo_id: 27 - + - id: 7 org_id: 19 team_id: 6 - repo_id: 28 \ No newline at end of file + repo_id: 28 + +- + id: 8 + org_id: 3 + team_id: 1 + repo_id: 32 diff --git a/models/fixtures/team_unit.yml b/models/fixtures/team_unit.yml new file mode 100644 index 000000000..ad5466a5c --- /dev/null +++ b/models/fixtures/team_unit.yml @@ -0,0 +1,209 @@ +- + id: 1 + team_id: 1 + type: 1 + +- + id: 2 + team_id: 1 + type: 2 + +- + id: 3 + team_id: 1 + type: 3 + +- + id: 4 + team_id: 1 + type: 4 + +- + id: 5 + team_id: 1 + type: 5 + +- + id: 6 + team_id: 1 + type: 6 + +- + id: 7 + team_id: 1 + type: 7 + +- + id: 8 + team_id: 2 + type: 1 + +- + id: 9 + team_id: 2 + type: 2 + +- + id: 10 + team_id: 2 + type: 3 + +- + id: 11 + team_id: 2 + type: 4 + +- + id: 12 + team_id: 2 + type: 5 + +- + id: 13 + team_id: 2 + type: 6 + +- + id: 14 + team_id: 2 + type: 7 + +- + id: 15 + team_id: 3 + type: 1 + +- + id: 16 + team_id: 3 + type: 2 + +- + id: 17 + team_id: 3 + type: 3 + +- + id: 18 + team_id: 3 + type: 4 + +- + id: 19 + team_id: 3 + type: 5 + +- + id: 20 + team_id: 3 + type: 6 + +- + id: 21 + team_id: 3 + type: 7 + +- + id: 22 + team_id: 4 + type: 1 + +- + id: 23 + team_id: 4 + type: 2 + +- + id: 24 + team_id: 4 + type: 3 + +- + id: 25 + team_id: 4 + type: 4 + +- + id: 26 + team_id: 4 + type: 5 + +- + id: 27 + team_id: 4 + type: 6 + +- + id: 28 + team_id: 4 + type: 7 + +- + id: 29 + team_id: 5 + type: 1 + +- + id: 30 + team_id: 5 + type: 2 + +- + id: 31 + team_id: 5 + type: 3 + +- + id: 32 + team_id: 5 + type: 4 + +- + id: 33 + team_id: 5 + type: 5 + +- + id: 34 + team_id: 5 + type: 6 + +- + id: 35 + team_id: 5 + type: 7 + +- + id: 36 + team_id: 6 + type: 1 + +- + id: 37 + team_id: 6 + type: 2 + +- + id: 38 + team_id: 6 + type: 3 + +- + id: 39 + team_id: 6 + type: 4 + +- + id: 40 + team_id: 6 + type: 5 + +- + id: 41 + team_id: 6 + type: 6 + +- + id: 42 + team_id: 6 + type: 7 diff --git a/models/fixtures/user.yml b/models/fixtures/user.yml index 7ad48f7fb..a2e3b88d7 100644 --- a/models/fixtures/user.yml +++ b/models/fixtures/user.yml @@ -45,7 +45,7 @@ is_admin: false avatar: avatar3 avatar_email: user3@example.com - num_repos: 2 + num_repos: 3 num_members: 2 num_teams: 2 diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 7732e1709..cc262d810 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -190,6 +190,8 @@ var migrations = []Migration{ NewMigration("remove stale watches", removeStaleWatches), // v68 -> V69 NewMigration("Reformat and remove incorrect topics", reformatAndRemoveIncorrectTopics), + // v69 -> v70 + NewMigration("move team units to team_unit table", moveTeamUnitsToTeamUnitTable), } // Migrate database to current version diff --git a/models/migrations/v38.go b/models/migrations/v38.go index 6f66484b0..eb90f9fbf 100644 --- a/models/migrations/v38.go +++ b/models/migrations/v38.go @@ -25,10 +25,15 @@ func removeCommitsUnitType(x *xorm.Engine) (err error) { Created time.Time `xorm:"-"` } + type Team struct { + ID int64 + UnitTypes []int `xorm:"json"` + } + // Update team unit types const batchSize = 100 for start := 0; ; start += batchSize { - teams := make([]*models.Team, 0, batchSize) + teams := make([]*Team, 0, batchSize) if err := x.Limit(batchSize, start).Find(&teams); err != nil { return err } @@ -36,7 +41,7 @@ func removeCommitsUnitType(x *xorm.Engine) (err error) { break } for _, team := range teams { - ut := make([]models.UnitType, 0, len(team.UnitTypes)) + ut := make([]int, 0, len(team.UnitTypes)) for _, u := range team.UnitTypes { if u < V16UnitTypeCommits { ut = append(ut, u) diff --git a/models/migrations/v69.go b/models/migrations/v69.go new file mode 100644 index 000000000..8d964688a --- /dev/null +++ b/models/migrations/v69.go @@ -0,0 +1,80 @@ +// Copyright 2018 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package migrations + +import ( + "fmt" + + "github.com/go-xorm/xorm" +) + +func moveTeamUnitsToTeamUnitTable(x *xorm.Engine) error { + // Team see models/team.go + type Team struct { + ID int64 + OrgID int64 + UnitTypes []int `xorm:"json"` + } + + // TeamUnit see models/org_team.go + type TeamUnit struct { + ID int64 `xorm:"pk autoincr"` + OrgID int64 `xorm:"INDEX"` + TeamID int64 `xorm:"UNIQUE(s)"` + Type int `xorm:"UNIQUE(s)"` + } + + if err := x.Sync2(new(TeamUnit)); err != nil { + return fmt.Errorf("Sync2: %v", err) + } + + sess := x.NewSession() + defer sess.Close() + + if err := sess.Begin(); err != nil { + return err + } + + // Update team unit types + const batchSize = 100 + for start := 0; ; start += batchSize { + teams := make([]*Team, 0, batchSize) + if err := x.Limit(batchSize, start).Find(&teams); err != nil { + return err + } + if len(teams) == 0 { + break + } + + for _, team := range teams { + var unitTypes []int + if len(team.UnitTypes) == 0 { + unitTypes = allUnitTypes + } else { + unitTypes = team.UnitTypes + } + + // insert units for team + var units = make([]TeamUnit, 0, len(unitTypes)) + for _, tp := range unitTypes { + units = append(units, TeamUnit{ + OrgID: team.OrgID, + TeamID: team.ID, + Type: tp, + }) + } + + if _, err := sess.Insert(&units); err != nil { + return fmt.Errorf("Insert team units: %v", err) + } + + } + } + + if err := dropTableColumns(sess, "team", "unit_types"); err != nil { + return err + } + return sess.Commit() +} diff --git a/models/models.go b/models/models.go index 5743f1862..aaf1370fd 100644 --- a/models/models.go +++ b/models/models.go @@ -122,6 +122,7 @@ func init() { new(Reaction), new(IssueAssignees), new(U2FRegistration), + new(TeamUnit), ) gonicNames := []string{"SSL", "UID"} diff --git a/models/notification.go b/models/notification.go index c8376a857..8c36c0c5c 100644 --- a/models/notification.go +++ b/models/notification.go @@ -119,7 +119,17 @@ func createOrUpdateIssueNotifications(e Engine, issue *Issue, notificationAuthor } } + issue.loadRepo(e) + for _, watch := range watches { + issue.Repo.Units = nil + if issue.IsPull && !issue.Repo.CheckUnitUser(watch.UserID, false, UnitTypePullRequests) { + continue + } + if !issue.IsPull && !issue.Repo.CheckUnitUser(watch.UserID, false, UnitTypeIssues) { + continue + } + if err := notifyUser(watch.UserID); err != nil { return err } diff --git a/models/org.go b/models/org.go index ed0d58306..23f6c58bf 100644 --- a/models/org.go +++ b/models/org.go @@ -154,12 +154,26 @@ func CreateOrganization(org, owner *User) (err error) { Name: ownerTeamName, Authorize: AccessModeOwner, NumMembers: 1, - UnitTypes: allRepUnitTypes, } if _, err = sess.Insert(t); err != nil { return fmt.Errorf("insert owner team: %v", err) } + // insert units for team + var units = make([]TeamUnit, 0, len(allRepUnitTypes)) + for _, tp := range allRepUnitTypes { + units = append(units, TeamUnit{ + OrgID: org.ID, + TeamID: t.ID, + Type: tp, + }) + } + + if _, err = sess.Insert(&units); err != nil { + sess.Rollback() + return err + } + if _, err = sess.Insert(&TeamUser{ UID: owner.ID, OrgID: org.ID, @@ -238,6 +252,7 @@ func deleteOrg(e *xorm.Session, u *User) error { &Team{OrgID: u.ID}, &OrgUser{OrgID: u.ID}, &TeamUser{OrgID: u.ID}, + &TeamUnit{OrgID: u.ID}, ); err != nil { return fmt.Errorf("deleteBeans: %v", err) } diff --git a/models/org_team.go b/models/org_team.go index 5ea6e76cd..3b37f936f 100644 --- a/models/org_team.go +++ b/models/org_team.go @@ -1,3 +1,4 @@ +// Copyright 2018 The Gitea Authors. All rights reserved. // Copyright 2016 The Gogs Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. @@ -10,7 +11,6 @@ import ( "strings" "code.gitea.io/gitea/modules/log" - "github.com/go-xorm/xorm" ) @@ -28,15 +28,16 @@ type Team struct { Members []*User `xorm:"-"` NumRepos int NumMembers int - UnitTypes []UnitType `xorm:"json"` + Units []*TeamUnit `xorm:"-"` } -// GetUnitTypes returns unit types the team owned, empty means all the unit types -func (t *Team) GetUnitTypes() []UnitType { - if len(t.UnitTypes) == 0 { - return allRepUnitTypes +func (t *Team) getUnits(e Engine) (err error) { + if t.Units != nil { + return nil } - return t.UnitTypes + + t.Units, err = getUnitsByTeamID(e, t.ID) + return err } // HasWriteAccess returns true if team has at least write level access mode. @@ -214,11 +215,12 @@ func (t *Team) RemoveRepository(repoID int64) error { // UnitEnabled returns if the team has the given unit type enabled func (t *Team) UnitEnabled(tp UnitType) bool { - if len(t.UnitTypes) == 0 { - return true + if err := t.getUnits(x); err != nil { + log.Warn("Error loading repository (ID: %d) units: %s", t.ID, err.Error()) } - for _, u := range t.UnitTypes { - if u == tp { + + for _, unit := range t.Units { + if unit.Type == tp { return true } } @@ -275,6 +277,17 @@ func NewTeam(t *Team) (err error) { return err } + // insert units for team + if len(t.Units) > 0 { + for _, unit := range t.Units { + unit.TeamID = t.ID + } + if _, err = sess.Insert(&t.Units); err != nil { + sess.Rollback() + return err + } + } + // Update organization number of teams. if _, err = sess.Exec("UPDATE `user` SET num_teams=num_teams+1 WHERE id = ?", t.OrgID); err != nil { sess.Rollback() @@ -424,6 +437,13 @@ func DeleteTeam(t *Team) error { return err } + // Delete team-unit. + if _, err := sess. + Where("team_id=?", t.ID). + Delete(new(TeamUnit)); err != nil { + return err + } + // Delete team. if _, err := sess.ID(t.ID).Delete(new(Team)); err != nil { return err @@ -695,3 +715,47 @@ func GetTeamsWithAccessToRepo(orgID, repoID int64, mode AccessMode) ([]*Team, er And("team_repo.repo_id = ?", repoID). Find(&teams) } + +// ___________ ____ ___ .__ __ +// \__ ___/___ _____ _____ | | \____ |__|/ |_ +// | |_/ __ \\__ \ / \| | / \| \ __\ +// | |\ ___/ / __ \| Y Y \ | / | \ || | +// |____| \___ >____ /__|_| /______/|___| /__||__| +// \/ \/ \/ \/ + +// TeamUnit describes all units of a repository +type TeamUnit struct { + ID int64 `xorm:"pk autoincr"` + OrgID int64 `xorm:"INDEX"` + TeamID int64 `xorm:"UNIQUE(s)"` + Type UnitType `xorm:"UNIQUE(s)"` +} + +// Unit returns Unit +func (t *TeamUnit) Unit() Unit { + return Units[t.Type] +} + +func getUnitsByTeamID(e Engine, teamID int64) (units []*TeamUnit, err error) { + return units, e.Where("team_id = ?", teamID).Find(&units) +} + +// UpdateTeamUnits updates a teams's units +func UpdateTeamUnits(team *Team, units []TeamUnit) (err error) { + sess := x.NewSession() + defer sess.Close() + if err = sess.Begin(); err != nil { + return err + } + + if _, err = sess.Where("team_id = ?", team.ID).Delete(new(TeamUnit)); err != nil { + return err + } + + if _, err = sess.Insert(units); err != nil { + sess.Rollback() + return err + } + + return sess.Commit() +} diff --git a/models/org_test.go b/models/org_test.go index 42ab4a2a4..c54e7a93b 100644 --- a/models/org_test.go +++ b/models/org_test.go @@ -489,8 +489,8 @@ func TestAccessibleReposEnv_CountRepos(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, expectedCount, count) } - testSuccess(2, 2) - testSuccess(4, 1) + testSuccess(2, 3) + testSuccess(4, 2) } func TestAccessibleReposEnv_RepoIDs(t *testing.T) { @@ -503,8 +503,8 @@ func TestAccessibleReposEnv_RepoIDs(t *testing.T) { assert.NoError(t, err) assert.Equal(t, expectedRepoIDs, repoIDs) } - testSuccess(2, 1, 100, []int64{3, 5}) - testSuccess(4, 0, 100, []int64{3}) + testSuccess(2, 1, 100, []int64{3, 5, 32}) + testSuccess(4, 0, 100, []int64{3, 32}) } func TestAccessibleReposEnv_Repos(t *testing.T) { @@ -522,8 +522,8 @@ func TestAccessibleReposEnv_Repos(t *testing.T) { } assert.Equal(t, expectedRepos, repos) } - testSuccess(2, []int64{3, 5}) - testSuccess(4, []int64{3}) + testSuccess(2, []int64{3, 5, 32}) + testSuccess(4, []int64{3, 32}) } func TestAccessibleReposEnv_MirrorRepos(t *testing.T) { diff --git a/models/repo.go b/models/repo.go index 7f2be502a..d1cc290c4 100644 --- a/models/repo.go +++ b/models/repo.go @@ -365,22 +365,14 @@ func (repo *Repository) getUnitsByUserID(e Engine, userID int64, isAdmin bool) ( return err } - var allTypes = make(map[UnitType]struct{}, len(allRepUnitTypes)) - for _, team := range teams { - // Administrators can not be limited - if team.Authorize >= AccessModeAdmin { - return nil - } - for _, unitType := range team.UnitTypes { - allTypes[unitType] = struct{}{} - } - } - // unique var newRepoUnits = make([]*RepoUnit, 0, len(repo.Units)) for _, u := range repo.Units { - if _, ok := allTypes[u.Type]; ok { - newRepoUnits = append(newRepoUnits, u) + for _, team := range teams { + if team.UnitEnabled(u.Type) { + newRepoUnits = append(newRepoUnits, u) + break + } } } diff --git a/models/repo_list_test.go b/models/repo_list_test.go index 3bccb1aeb..164bc19bf 100644 --- a/models/repo_list_test.go +++ b/models/repo_list_test.go @@ -147,10 +147,10 @@ func TestSearchRepositoryByName(t *testing.T) { count: 14}, {name: "AllPublic/PublicRepositoriesOfUserIncludingCollaborative", opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, AllPublic: true}, - count: 15}, + count: 16}, {name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborative", opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true}, - count: 19}, + count: 20}, {name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborativeByName", opts: &SearchRepoOptions{Keyword: "test", Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true}, count: 13}, @@ -159,7 +159,7 @@ func TestSearchRepositoryByName(t *testing.T) { count: 11}, {name: "AllPublic/PublicRepositoriesOfOrganization", opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 17, AllPublic: true, Collaborate: util.OptionalBoolFalse}, - count: 15}, + count: 16}, } for _, testCase := range testCases { diff --git a/models/repo_watch.go b/models/repo_watch.go index fb89a55a1..8019027c1 100644 --- a/models/repo_watch.go +++ b/models/repo_watch.go @@ -109,6 +109,23 @@ func notifyWatchers(e Engine, act *Action) error { act.ID = 0 act.UserID = watches[i].UserID + act.Repo.Units = nil + + switch act.OpType { + case ActionCommitRepo, ActionPushTag, ActionDeleteTag, ActionDeleteBranch: + if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypeCode) { + continue + } + case ActionCreateIssue, ActionCommentIssue, ActionCloseIssue, ActionReopenIssue: + if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypeIssues) { + continue + } + case ActionCreatePullRequest, ActionMergePullRequest, ActionClosePullRequest, ActionReopenPullRequest: + if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypePullRequests) { + continue + } + } + if _, err = e.InsertOne(act); err != nil { return fmt.Errorf("insert new action: %v", err) } diff --git a/models/user.go b/models/user.go index 1497eef44..653e99426 100644 --- a/models/user.go +++ b/models/user.go @@ -546,28 +546,46 @@ func (u *User) GetRepositories(page, pageSize int) (err error) { return err } -// GetRepositoryIDs returns repositories IDs where user owned -func (u *User) GetRepositoryIDs() ([]int64, error) { +// GetRepositoryIDs returns repositories IDs where user owned and has unittypes +func (u *User) GetRepositoryIDs(units ...UnitType) ([]int64, error) { var ids []int64 - return ids, x.Table("repository").Cols("id").Where("owner_id = ?", u.ID).Find(&ids) + + sess := x.Table("repository").Cols("repository.id") + + if len(units) > 0 { + sess = sess.Join("INNER", "repo_unit", "repository.id = repo_unit.repo_id") + sess = sess.In("repo_unit.type", units) + } + + return ids, sess.Where("owner_id = ?", u.ID).Find(&ids) } -// GetOrgRepositoryIDs returns repositories IDs where user's team owned -func (u *User) GetOrgRepositoryIDs() ([]int64, error) { +// GetOrgRepositoryIDs returns repositories IDs where user's team owned and has unittypes +func (u *User) GetOrgRepositoryIDs(units ...UnitType) ([]int64, error) { var ids []int64 - return ids, x.Table("repository"). + + sess := x.Table("repository"). Cols("repository.id"). - Join("INNER", "team_user", "repository.owner_id = team_user.org_id AND team_user.uid = ?", u.ID). + Join("INNER", "team_user", "repository.owner_id = team_user.org_id"). + Join("INNER", "team_repo", "repository.is_private != ? OR (team_user.team_id = team_repo.team_id AND repository.id = team_repo.repo_id)", true) + + if len(units) > 0 { + sess = sess.Join("INNER", "team_unit", "team_unit.team_id = team_user.team_id") + sess = sess.In("team_unit.type", units) + } + + return ids, sess. + Where("team_user.uid = ?", u.ID). GroupBy("repository.id").Find(&ids) } // GetAccessRepoIDs returns all repositories IDs where user's or user is a team member organizations -func (u *User) GetAccessRepoIDs() ([]int64, error) { - ids, err := u.GetRepositoryIDs() +func (u *User) GetAccessRepoIDs(units ...UnitType) ([]int64, error) { + ids, err := u.GetRepositoryIDs(units...) if err != nil { return nil, err } - ids2, err := u.GetOrgRepositoryIDs() + ids2, err := u.GetOrgRepositoryIDs(units...) if err != nil { return nil, err } diff --git a/models/user_test.go b/models/user_test.go index 4fd0bc0fa..20de1a64b 100644 --- a/models/user_test.go +++ b/models/user_test.go @@ -159,3 +159,25 @@ func BenchmarkHashPassword(b *testing.B) { u.HashPassword(pass) } } + +func TestGetOrgRepositoryIDs(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + user2 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) + user4 := AssertExistsAndLoadBean(t, &User{ID: 4}).(*User) + user5 := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User) + + accessibleRepos, err := user2.GetOrgRepositoryIDs() + assert.NoError(t, err) + // User 2's team has access to private repos 3, 5, repo 32 is a public repo of the organization + assert.Equal(t, []int64{3, 5, 32}, accessibleRepos) + + accessibleRepos, err = user4.GetOrgRepositoryIDs() + assert.NoError(t, err) + // User 4's team has access to private repo 3, repo 32 is a public repo of the organization + assert.Equal(t, []int64{3, 32}, accessibleRepos) + + accessibleRepos, err = user5.GetOrgRepositoryIDs() + assert.NoError(t, err) + // User 5's team has no access to any repo + assert.Len(t, accessibleRepos, 0) +} diff --git a/routers/org/teams.go b/routers/org/teams.go index d894c8661..87bfb8596 100644 --- a/routers/org/teams.go +++ b/routers/org/teams.go @@ -182,7 +182,14 @@ func NewTeamPost(ctx *context.Context, form auth.CreateTeamForm) { Authorize: models.ParseAccessMode(form.Permission), } if t.Authorize < models.AccessModeAdmin { - t.UnitTypes = form.Units + var units = make([]*models.TeamUnit, 0, len(form.Units)) + for _, tp := range form.Units { + units = append(units, &models.TeamUnit{ + OrgID: ctx.Org.Organization.ID, + Type: tp, + }) + } + t.Units = units } ctx.Data["Team"] = t @@ -264,9 +271,17 @@ func EditTeamPost(ctx *context.Context, form auth.CreateTeamForm) { } t.Description = form.Description if t.Authorize < models.AccessModeAdmin { - t.UnitTypes = form.Units + var units = make([]models.TeamUnit, 0, len(form.Units)) + for _, tp := range form.Units { + units = append(units, models.TeamUnit{ + OrgID: t.OrgID, + TeamID: t.ID, + Type: tp, + }) + } + models.UpdateTeamUnits(t, units) } else { - t.UnitTypes = nil + models.UpdateTeamUnits(t, nil) } if ctx.HasError() { diff --git a/routers/user/home.go b/routers/user/home.go index 2a193bbde..0c84b2498 100644 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -203,7 +203,11 @@ func Issues(ctx *context.Context) { return } } else { - userRepoIDs, err = ctxUser.GetAccessRepoIDs() + unitType := models.UnitTypeIssues + if isPullList { + unitType = models.UnitTypePullRequests + } + userRepoIDs, err = ctxUser.GetAccessRepoIDs(unitType) if err != nil { ctx.ServerError("ctxUser.GetAccessRepoIDs", err) return diff --git a/routers/user/home_test.go b/routers/user/home_test.go index a9b146b76..8a3d9b9f5 100644 --- a/routers/user/home_test.go +++ b/routers/user/home_test.go @@ -26,8 +26,8 @@ func TestIssues(t *testing.T) { Issues(ctx) assert.EqualValues(t, http.StatusOK, ctx.Resp.Status()) - assert.EqualValues(t, map[int64]int64{1: 1, 2: 1}, ctx.Data["Counts"]) + assert.EqualValues(t, map[int64]int64{1: 1}, ctx.Data["Counts"]) assert.EqualValues(t, true, ctx.Data["IsShowClosed"]) assert.Len(t, ctx.Data["Issues"], 1) - assert.Len(t, ctx.Data["Repos"], 2) + assert.Len(t, ctx.Data["Repos"], 1) } diff --git a/templates/org/team/new.tmpl b/templates/org/team/new.tmpl index ec1a3dd72..12cdd697c 100644 --- a/templates/org/team/new.tmpl +++ b/templates/org/team/new.tmpl @@ -57,7 +57,7 @@ {{range $t, $unit := $.Units}}
- + {{$.i18n.Tr $unit.DescKey}}
From e2721b619098b887e6e27675450f3a4663716f59 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Thu, 21 Jun 2018 17:12:56 -0400 Subject: [PATCH 028/124] Remove call to update certs (#4296) --- docker/etc/s6/gitea/setup | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker/etc/s6/gitea/setup b/docker/etc/s6/gitea/setup index 500cca584..03758ed81 100755 --- a/docker/etc/s6/gitea/setup +++ b/docker/etc/s6/gitea/setup @@ -1,7 +1,5 @@ #!/bin/bash -/usr/sbin/update-ca-certificates - if [ ! -d /data/git/.ssh ]; then mkdir -p /data/git/.ssh chmod 700 /data/git/.ssh From 212fef08666e30419e0a94397d18e99c1222b0ca Mon Sep 17 00:00:00 2001 From: Richard Coleman Date: Sun, 24 Jun 2018 03:55:48 +0100 Subject: [PATCH 029/124] Add details about USER_UID and USER_GID environment variables (#4301) --- docs/content/doc/installation/with-docker.en-us.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/content/doc/installation/with-docker.en-us.md b/docs/content/doc/installation/with-docker.en-us.md index c672393cc..aa4337e08 100644 --- a/docs/content/doc/installation/with-docker.en-us.md +++ b/docs/content/doc/installation/with-docker.en-us.md @@ -245,6 +245,8 @@ You can configure some of Gitea's settings via environment variables: * `SECRET_KEY`: **""**: Global secret key. This should be changed. If this has a value and `INSTALL_LOCK` is empty, `INSTALL_LOCK` will automatically set to `true`. * `DISABLE_REGISTRATION`: **false**: Disable registration, after which only admin can create accounts for users. * `REQUIRE_SIGNIN_VIEW`: **false**: Enable this to force users to log in to view any page. +* `USER_UID`: **1000**: The UID (Unix user ID) of the user that runs Gitea within the container. Match this to the UID of the owner of the `/data` volume if using host volumes (this is not necessary with named volumes). +* `USER_GID`: **1000**: The GID (Unix group ID) of the user that runs Gitea within the container. Match this to the GID of the owner of the `/data` volume if using host volumes (this is not necessary with named volumes). # Customization From a747a5d05facbadf5feaf7144f576907d0cb8c23 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sun, 24 Jun 2018 08:40:30 +0200 Subject: [PATCH 030/124] Add gpg-sign step to drone (#4188) * Add gpg-sign step to drone * add compressed releases to gpg-sign targets * Use exclude to simplify file list drone-plugins/drone-gpgsign#2 --- .drone.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.drone.yml b/.drone.yml index 8e571640b..dd56477db 100644 --- a/.drone.yml +++ b/.drone.yml @@ -255,6 +255,18 @@ pipeline: when: event: [ push, tag ] + gpg-sign: + image: plugins/gpgsign:1 + pull: true + secrets: [ gpgsign_key, gpgsign_passphrase ] + detach_sign: true + files: + - dist/release/* + excludes: + - dist/release/*.sha265 + when: + event: [ push, tag ] + release: image: plugins/s3:1 pull: true From 3f0d9beece362064c2f8d521b112bba968008e5b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 24 Jun 2018 19:10:11 +0800 Subject: [PATCH 031/124] fix exclude files .sha265 to .sha256 (#4304) --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index dd56477db..9a27e1c21 100644 --- a/.drone.yml +++ b/.drone.yml @@ -263,7 +263,7 @@ pipeline: files: - dist/release/* excludes: - - dist/release/*.sha265 + - dist/release/*.sha256 when: event: [ push, tag ] From 3e6d9b355e987f148ee44bec8cd2f42fd3473e89 Mon Sep 17 00:00:00 2001 From: Antonio Huete Jimenez Date: Sun, 24 Jun 2018 21:24:00 +0000 Subject: [PATCH 032/124] Add a basic SMF manifest for SunOS platforms (#4238) Signed-off-by: Antonio Huete Jimenez --- contrib/init/sunos/gitea.xml | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 contrib/init/sunos/gitea.xml diff --git a/contrib/init/sunos/gitea.xml b/contrib/init/sunos/gitea.xml new file mode 100644 index 000000000..4b8cc3a38 --- /dev/null +++ b/contrib/init/sunos/gitea.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 8bb9b67a29e7fc8d7f3cba613c3e53c9dae70590 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Sun, 24 Jun 2018 21:25:00 +0000 Subject: [PATCH 033/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_de-DE.ini | 8 +++++--- options/locale/locale_uk-UA.ini | 36 ++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index 4b1b85f92..972b62261 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -97,7 +97,7 @@ app_name=Seitentitel app_name_helper=Du kannst hier den Namen deines Unternehmens eingeben. repo_path=Repository-Verzeichnis repo_path_helper=Remote-Git-Repositories werden in diesem Verzeichnis gespeichert. -lfs_path=Git LFS-Wurzelpfad +lfs_path=Git-LFS-Wurzelpfad lfs_path_helper=In diesem Verzeichnis werden die Dateien von Git LFS abgespeichert. Leer lassen um LFS zu deaktivieren. run_user=Ausführen als run_user_helper=Gebe den Betriebssystem-Benutzernamen ein, unter welchem Gitea laufen soll. Beachte, dass dieser Nutzer Zugriff auf den Repository-Ordner haben muss. @@ -658,7 +658,7 @@ issues.new_label_placeholder=Labelname issues.new_label_desc_placeholder=Beschreibung issues.create_label=Label erstellen issues.label_templates.title=Lade vordefinierte Label -issues.label_templates.info=Es existieren noch keine Labels. Erstelle ein neues Label ("Neues Label") oder verwende das Standard Label-Set: +issues.label_templates.info=Es existieren noch keine Label. Erstelle ein neues Label („Neues Label“) oder verwende das Standard-Label-Set: issues.label_templates.helper=Wähle ein Label issues.label_templates.use=Label-Set verwenden issues.label_templates.fail_to_load_file=Fehler beim Laden der Label Template Datei '%s': %v @@ -676,7 +676,7 @@ issues.delete_branch_at=`löschte die Branch %s %s` issues.open_tab=%d offen issues.close_tab=%d geschlossen issues.filter_label=Label -issues.filter_label_no_select=Alle Labels +issues.filter_label_no_select=Alle Label issues.filter_milestone=Meilenstein issues.filter_milestone_no_select=Alle Meilensteine issues.filter_assignee=Zuständig @@ -1167,6 +1167,8 @@ branch.protected_deletion_failed=Branch „%s“ ist geschützt und kann nicht g topic.manage_topics=Themen verwalten topic.done=Fertig +topic.count_prompt=Du kannst nicht mehr als 25 Themen auswählen +topic.format_prompt=Themen müssen mit einem Buchstaben oder einer Zahl beginnen. Sie können Bindestriche (-) enthalten und dürfen nicht länger als 35 Zeichen sein [org] org_name_holder=Name der Organisation diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 8f90f3a3f..c6855090a 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -40,6 +40,7 @@ u2f_unsupported_browser=Ваш браузер не підтримує U2F клю u2f_error_1=Сталася невідома помилка. Спробуйте ще раз. u2f_error_2=Переконайтеся, що ви використовуєте зашифроване з'єднання (https://) та відвідуєте правильну URL-адресу. u2f_error_3=Сервер не може обробити, ваш запит. +u2f_error_5=Таймаут досягнуто до того, як ваш ключ можна буде прочитати. Перезавантажте, щоб повторити спробу. u2f_reload=Оновити repository=Репозиторій @@ -105,6 +106,7 @@ ssh_port_helper=Номер порту, який використовує SSH с http_port=Gitea HTTP порт http_port_helper=Номер порту, який буде прослуховуватися Giteas веб-сервером. app_url=Базова URL-адреса Gitea +app_url_helper=Базова адреса для HTTP(S) клонування через URL та повідомлень електронної пошти. log_root_path=Шлях до лог файлу log_root_path_helper=Файли журналу будуть записані в цей каталог. @@ -112,6 +114,7 @@ optional_title=Додаткові налаштування email_title=Налаштування Email smtp_host=SMTP хост smtp_from=Відправляти Email від імені +smtp_from_helper=Електронна пошта для використання в Gіtea. Введіть звичайну електронну адресу або використовуйте формат: "Ім'я" . mailer_user=SMTP Ім'я кристувача mailer_password=SMTP Пароль register_confirm=Потрібно підтвердити електронну пошту для реєстрації @@ -125,9 +128,11 @@ federated_avatar_lookup=Увімкнути федеративні аватари federated_avatar_lookup_popup=Увімкнути зовнішний Аватар за допомогою Libravatar. disable_registration=Вимкнути самостійну реєстрацію disable_registration_popup=Вимкнути самостійну реєстрацію користувачів, тільки адміністратор може створювати нові облікові записи. +allow_only_external_registration_popup=Включити реєстрацію тільки через зовнішні сервіси. openid_signin=Увімкнути реєстрацію за допомогою OpenID openid_signin_popup=Увімкнути вхід за допомогою OpenID. openid_signup=Увімкнути самостійну реєстрацію за допомогою OpenID +openid_signup_popup=Увімкнути самореєстрацію користувачів на основі OpenID. enable_captcha=Увімкнути CAPTCHA enable_captcha_popup=Вимагати перевірку CAPTCHA при самостійній реєстрації користувача. require_sign_in_view=Вимагати авторизації для перегляду сторінок @@ -141,6 +146,7 @@ admin_email=Адреса електронної пошти install_btn_confirm=Встановлення Gitea test_git_failed=Не в змозі перевірити 'git' команду: %v invalid_db_setting=Налаштування бази даних є некоректними: %v +invalid_repo_path=Помилковий шлях до кореня репозиторію: %v save_config_failed=Не в змозі зберегти конфігурацію: %v invalid_admin_setting=Неприпустимі налаштування облікового запису адміністратора: %v install_success=Ласкаво просимо! Дякуємо вам за вибір Gitea. Розважайтеся, і будьте обережні! @@ -152,6 +158,7 @@ default_allow_create_organization_popup=Дозволити новим облік default_enable_timetracking=Увімкнути відстеження часу за замовчуванням default_enable_timetracking_popup=Включити відстеження часу для нових репозиторіїв за замовчуванням. no_reply_address=Прихований поштовий домен +no_reply_address_helper=Доменне ім'я для користувачів із прихованою електронною адресою. Наприклад, ім'я користувача 'joe' буде входити в Git як 'joe@noreply.example.org', якщо для прихованого домену електронної пошти встановлено 'noreply.example.org'. [home] uname_holder=Ім'я користувача або Ел. пошта @@ -176,11 +183,13 @@ code=Код repo_no_results=Відповідних репозиторіїв не знайдено. user_no_results=Відповідних користувачів не знайдено. org_no_results=Відповідних організацій не знайдено. +code_no_results=Відповідний пошуковому запитанню код не знайдено. code_search_results=Результати пошуку '%s' [auth] create_new_account=Реєстрація облікового запису register_helper_msg=Вже зареєстровані? Увійдіть зараз! +social_register_helper_msg=Вже є аккаунт? Зв'яжіть його зараз! disable_register_prompt=Вибачте, можливість реєстрації відключена. Будь ласка, зв'яжіться з адміністратором сайту. disable_register_mail=Підтвердження реєстрації електронною поштою вимкнено. remember_me=Запам'ятати мене @@ -200,6 +209,7 @@ send_reset_mail=Натисніть сюди, щоб відправити лис reset_password=Скинути пароль invalid_code=Цей код підтвердження недійсний або закінчився. reset_password_helper=Натисніть тут для скидання пароля +password_too_short=Довжина пароля не може бути меншою за %d символів. non_local_account=Нелокальні акаунти не можуть змінити пароль через Gitea. verify=Підтвердити scratch_code=Одноразовий пароль @@ -211,7 +221,10 @@ login_userpass=Увійти login_openid=OpenID openid_connect_submit=Під’єднатися openid_connect_title=Підключитися до існуючого облікового запису +openid_connect_desc=Вибраний OpenID URI невідомий. Пов'яжіть його з новим обліковим записом тут. openid_register_title=Створити новий обліковий запис +openid_register_desc=Вибраний OpenID URI невідомий. Пов'яжіть йогоз новим обліковим записом тут. +openid_signin_desc=Введіть свій ідентифікатор OpenID. Наприклад: https://anne.me, bob.openid.org.cn або gnusocial.net/carry. disable_forgot_password_mail=На жаль скидання пароля відключене. Будь ласка, зв'яжіться з адміністратором сайту. [mail] @@ -247,6 +260,8 @@ TreeName=Шлях до файлу Content=Зміст require_error=` не може бути пустим.` +alpha_dash_error=` повинен містити тільки літерно-цифрові символи, дефіс ('-') та підкреслення ('_'). ` +alpha_dash_dot_error=` повинен містити тільки літерно-цифрові символи, дефіс ('-') , підкреслення ('_') та точки ('.'). ` git_ref_name_error=` повинен бути правильним посилальним ім'ям Git.` size_error=` повинен бути розмір %s.` min_size_error=` повинен бути принаймні %s символів.` @@ -262,6 +277,7 @@ username_been_taken=Ім'я користувача вже зайнято. repo_name_been_taken=Ім'я репозіторію вже використовується. org_name_been_taken=Назва організації вже зайнято. team_name_been_taken=Назва команди вже зайнято. +team_no_units_error=Дозволити доступ до принаймні одного розділу репозитарію. email_been_used=Ця електронна адреса вже використовується. openid_been_used=OpenID адреса '%s' вже використовується. username_password_incorrect=Неправильне ім'я користувача або пароль. @@ -269,12 +285,15 @@ enterred_invalid_repo_name=Невірно введено ім'я репозит enterred_invalid_owner_name=Ім'я нового власника не є дійсним. enterred_invalid_password=Введений вами пароль некоректний. user_not_exist=Даний користувач не існує. +last_org_owner=Ви не можете вилучити останнього користувача з команди 'власники'. У кожній команді має бути хоча б один власник. cannot_add_org_to_team=Організацію неможливо додати як учасника команди. invalid_ssh_key=Неможливо перевірити ваш SSH ключ: %s invalid_gpg_key=Неможливо перевірити ваш GPG ключ: %s +unable_verify_ssh_key=Не вдається підтвердити ключ SSH; подвійно перевірте його на наявність похибки. auth_failed=Помилка автентифікації: %v +still_own_repo=Ваш обліковий запис володіє одним або декількома репозиторіями; видаліть або перенесіть їх в першу чергу. target_branch_not_exist=Цільової гілки не існує. @@ -290,6 +309,7 @@ follow=Підписатися unfollow=Відписатися form.name_reserved=Ім'я користувача "%s" зарезервовано. +form.name_pattern_not_allowed=Шаблон '%s' не дозволено в імені користувача. [settings] profile=Профіль @@ -311,6 +331,7 @@ u2f=Ключі безпеки public_profile=Загальнодоступний профіль profile_desc=Ваша адреса електронної пошти використовуватиметься для сповіщення та інших операцій. +password_username_disabled=Нелокальним користувачам заборонено змінювати ім'я користувача. Щоб отримати докладнішу інформацію, зв'яжіться з адміністратором сайту. full_name=Повне ім'я website=Веб-сайт location=Місцезнаходження @@ -340,28 +361,36 @@ password_change_disabled=Нелокальні акаунти не можуть emails=Адреса електронної пошти manage_emails=Керування адресами ел. пошти +manage_openid=Керування OpenID email_desc=Ваша основна адреса електронної пошти використовуватиметься для сповіщення та інших операцій. primary=Основний primary_email=Зробити основним delete_email=Видалити email_deletion=Видалити адресу електронної пошти openid_deletion=Видалити адресу OpenID +openid_deletion_success=Адреса OpenID була видалена. add_new_email=Додати нову адресу електронної пошти add_new_openid=Додати новий OpenID URI add_email=Додати адресу електронної пошти add_openid=Додати OpenID URI add_email_confirmation_sent=Електронний лист із підтвердженням було відправлено на '%s', будь ласка, перевірте вашу поштову скриньку протягом наступних %s, щоб підтвердити адресу. add_email_success=Додано нову адресу електронної пошти. +add_openid_success=Нова адреса OpenID була додана. keep_email_private=Приховати адресу електронної пошти keep_email_private_popup=Вашу адресу електронної пошти буде приховано від інших користувачів. manage_ssh_keys=Керувати SSH ключами manage_gpg_keys=Керувати GPG ключами add_key=Додати ключ +ssh_desc=Ці відкриті SSH-ключі пов'язані з вашим обліковим записом. Відповідні приватні ключі дозволяють отримати повний доступ до ваших репозиторіїв. +gpg_desc=Ці публічні ключі GPG пов'язані з вашим обліковим записом. Тримайте свої приватні ключі в безпеці, оскільки вони дозволяють здійснювати перевірку комітів. ssh_helper=Потрібна допомога? Дивіться гід на GitHub з генерації ключів SSH або виправлення типових неполадок SSH. gpg_helper= Потрібна допомога? Перегляньте посібник GitHub про GPG . add_new_key=Додати SSH ключ add_new_gpg_key=Додати GPG ключ +ssh_key_been_used=Цей ключ SSH вже додано до вашого облікового запису. +ssh_key_name_used=Ключ SSH з таким самим ім'ям вже додано до вашого облікового запису. +gpg_key_id_used=Публічний ключ GPG з таким самим ідентифікатором вже існує. subkeys=Підключі key_id=ID ключа key_name=Ім'я ключа @@ -560,6 +589,7 @@ commits.date=Дата commits.older=Давніше commits.newer=Новіше commits.signed_by=Підписано +commits.gpg_key_id=Ідентифікатор GPG ключа ext_issues=Зов. Проблеми @@ -731,6 +761,8 @@ milestones.edit=Редагувати етап milestones.cancel=Відмінити milestones.modify=Оновити етап milestones.deletion=Видалити етап +milestones.filter_sort.closest_due_date=Найближче за датою +milestones.filter_sort.furthest_due_date=Далі за датою milestones.filter_sort.most_issues=Найбільш проблем milestones.filter_sort.least_issues=Найменш проблем @@ -1107,7 +1139,9 @@ users.admin=Адміністратор users.repos=Репозиторії users.created=Створено users.last_login=Останній вхід +users.never_login=Ніколи не входив users.send_register_notify=Надіслати повідомлення про реєстрацію користувача +users.new_success=Обліковий запис '%s' створений. users.edit=Редагувати users.auth_source=Джерело автентифікації users.local=Локальні @@ -1243,7 +1277,7 @@ config.default_keep_email_private=Приховати адресу електро config.default_allow_create_organization=Дозволити створення організацій за замовчуванням config.enable_timetracking=Увімкнути відстеження часу config.default_enable_timetracking=Увімкнути відстеження часу за замовчуванням -config.no_reply_address=Прихований домен е-пошти +config.no_reply_address=Прихований домен електронної пошти config.webhook_config=Конфігурація web-хуків config.queue_length=Довжина черги From aaf6be3ee6f6fb353571c35c68aa081dd043adc2 Mon Sep 17 00:00:00 2001 From: stevegt Date: Mon, 25 Jun 2018 05:12:46 -0700 Subject: [PATCH 034/124] Create api-usage doc page (#4306) * add api user guides in doc * update user-guides api page * fix typo: user guides -> user guide * move api-usage page under advanced category * flesh out API usage docs * Build on work by @tungsheng * Address issues raised in #4037, #3673, and #4243 * Close #4247 Signed-off-by: Steve Traugott --- docs/content/doc/advanced/api-usage.en-us.md | 75 ++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/content/doc/advanced/api-usage.en-us.md diff --git a/docs/content/doc/advanced/api-usage.en-us.md b/docs/content/doc/advanced/api-usage.en-us.md new file mode 100644 index 000000000..f04a99f14 --- /dev/null +++ b/docs/content/doc/advanced/api-usage.en-us.md @@ -0,0 +1,75 @@ +--- +date: "2018-06-24:00:00+02:00" +title: "API Usage" +slug: "api-usage" +weight: 40 +toc: true +draft: false +menu: + sidebar: + parent: "advanced" + name: "API Usage" + weight: 40 + identifier: "api-usage" +--- + +# Gitea API Usage + +## Enabling/configuring API access + +By default, `ENABLE_SWAGGER_ENDPOINT` is true, and +`MAX_RESPONSE_ITEMS` is set to 50. See [Config Cheat +Sheet](https://docs.gitea.io/en-us/config-cheat-sheet/) for more +information. + +## Authentication via the API + +Gitea supports these methods of API authentication: + +- HTTP basic authentication +- `token=...` parameter in URL query string +- `access_token=...` parameter in URL query string +- `Authorization: token ...` header in HTTP headers + +All of these methods accept the same apiKey token type. You can +better understand this by looking at the code -- as of this writing, +Gitea parses queries and headers to find the token in +[modules/auth/auth.go](https://github.com/go-gitea/gitea/blob/6efdcaed86565c91a3dc77631372a9cc45a58e89/modules/auth/auth.go#L47). + +You can create an apiKey token via your gitea install's web interface: +`Settings | Applications | Generate New Token`. + +### More on the `Authorization:` header + +For historical reasons, Gitea needs the word `token` included before +the apiKey token in an authorization header, like this: + +``` +Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675 +``` + +In a `curl` command, for instance, this would look like: + +``` +curl -X POST "http://localhost:4000/api/v1/repos/test1/test1/issues" \ + -H "accept: application/json" \ + -H "Authorization: token 65eaa9c8ef52460d22a93307fe0aee76289dc675" \ + -H "Content-Type: application/json" -d "{ \"body\": \"testing\", \"title\": \"test 20\"}" -i +``` + +As mentioned above, the token used is the same one you would use in +the `token=` string in a GET request. + +## Listing your issued tokens via the API + +As mentioned in +[#3842](https://github.com/go-gitea/gitea/issues/3842#issuecomment-397743346), +`/users/:name/tokens` is special and requires you to authenticate +using BasicAuth, as follows: + +### Using basic authentication: + +``` +$ curl --request GET --url https://yourusername:yourpassword@gitea.your.host/api/v1/users/yourusername/tokens +[{"name":"test","sha1":"..."},{"name":"dev","sha1":"..."}] +``` From b8c2420ae283f6163826c3b8614db1e44b5c0ef0 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Mon, 25 Jun 2018 12:13:56 +0000 Subject: [PATCH 035/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_uk-UA.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index c6855090a..b0d098bad 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -430,6 +430,7 @@ access_token_deletion=Видалити токен доступу twofa_desc=Двофакторна автентифікація підвищує безпеку вашого облікового запису. twofa_is_enrolled=Ваш обліковий запис на даний час використовує двофакторну автентифікацію. +twofa_not_enrolled=Ваш обліковий запис наразі не використовує двофакторну автентифікаціїю. twofa_disable=Вимкнути двофакторну автентифікацію twofa_scratch_token_regenerate=Перестворити токен одноразового пароля twofa_enroll=Увімкнути двофакторну автентифікацію From 801843b0115e29ba2304fa6a5bea1ae169a58e02 Mon Sep 17 00:00:00 2001 From: Jonas Franz Date: Tue, 26 Jun 2018 16:45:18 +0200 Subject: [PATCH 036/124] Fix open redirect vulnerability on login screen (#4312) * Fix open redirect vulnerability on login screen Signed-off-by: Jonas Franz * Reorder imports Signed-off-by: Jonas Franz * Replace www. from Domain too Signed-off-by: Jonas Franz --- modules/util/util.go | 13 +++++++++++++ modules/util/util_test.go | 35 +++++++++++++++++++++++++++++++++++ routers/user/auth.go | 3 ++- 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/modules/util/util.go b/modules/util/util.go index b6acb9796..5dcbe448f 100644 --- a/modules/util/util.go +++ b/modules/util/util.go @@ -10,6 +10,7 @@ import ( "strings" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" ) // OptionalBool a boolean that can be "null" @@ -78,6 +79,18 @@ func URLJoin(base string, elems ...string) string { return joinedURL } +// IsExternalURL checks if rawURL points to an external URL like http://example.com +func IsExternalURL(rawURL string) bool { + parsed, err := url.Parse(rawURL) + if err != nil { + return true + } + if len(parsed.Host) != 0 && strings.Replace(parsed.Host, "www.", "", 1) != strings.Replace(setting.Domain, "www.", "", 1) { + return true + } + return false +} + // Min min of two ints func Min(a, b int) int { if a > b { diff --git a/modules/util/util_test.go b/modules/util/util_test.go index 0d79df605..d9357ffa3 100644 --- a/modules/util/util_test.go +++ b/modules/util/util_test.go @@ -7,6 +7,8 @@ package util import ( "testing" + "code.gitea.io/gitea/modules/setting" + "github.com/stretchr/testify/assert" ) @@ -42,3 +44,36 @@ func TestURLJoin(t *testing.T) { assert.Equal(t, test.Expected, URLJoin(test.Base, test.Elements...)) } } + +func TestIsExternalURL(t *testing.T) { + setting.Domain = "try.gitea.io" + type test struct { + Expected bool + RawURL string + } + newTest := func(expected bool, rawURL string) test { + return test{Expected: expected, RawURL: rawURL} + } + for _, test := range []test{ + newTest(false, + "https://try.gitea.io"), + newTest(true, + "https://example.com/"), + newTest(true, + "//example.com"), + newTest(true, + "http://example.com"), + newTest(false, + "a/"), + newTest(false, + "https://try.gitea.io/test?param=false"), + newTest(false, + "test?param=false"), + newTest(false, + "//try.gitea.io/test?param=false"), + newTest(false, + "/hey/hey/hey#3244"), + } { + assert.Equal(t, test.Expected, IsExternalURL(test.RawURL)) + } +} diff --git a/routers/user/auth.go b/routers/user/auth.go index 9a59f52db..317b4af3b 100644 --- a/routers/user/auth.go +++ b/routers/user/auth.go @@ -18,6 +18,7 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/util" "github.com/go-macaron/captcha" "github.com/markbates/goth" @@ -474,7 +475,7 @@ func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyR return setting.AppSubURL + "/" } - if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 { + if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 && !util.IsExternalURL(redirectTo) { ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL) if obeyRedirect { ctx.RedirectToFirst(redirectTo) From a9ffbeb6791089b5ef04f5c1156f8b8cb0012d92 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 26 Jun 2018 14:46:26 +0000 Subject: [PATCH 037/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_lv-LV.ini | 5 +++-- options/locale/locale_pt-BR.ini | 2 ++ options/locale/locale_ru-RU.ini | 2 ++ options/locale/locale_uk-UA.ini | 11 ++++++++++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini index c2274b99a..1b0129ba1 100644 --- a/options/locale/locale_lv-LV.ini +++ b/options/locale/locale_lv-LV.ini @@ -54,13 +54,14 @@ password=Parole db_name=Datu bāzes nosaukums path=Ceļš -repo_path=Repozitoriju glabāšanas vieta -log_root_path=Žurnalizēšanas direktorija +repo_path=Repozitoriju glabāšanas ceļš +log_root_path=Žurnalizēšanas ceļš optional_title=Neobligātie iestatījumi smtp_host=SMTP resursdators federated_avatar_lookup_popup=Iespējot apvienoto profila bilžu meklētāju, lai izmantotu atvērtā koda apvienoto servisu balstītu uz libravatar. openid_signin=Iespējot OpenID autorizāciju +openid_signin_popup=Iespējot lietotāju autorizāciju ar OpenID. enable_captcha_popup=Lietotājam reģistrējoties, pieprasīt ievadīt drošības kodu. admin_password=Parole confirm_password=Apstipriniet paroli diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index 0df553778..f2ec96dd0 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -1167,6 +1167,8 @@ branch.protected_deletion_failed=A branch '%s' está protegida. Ela não pode se topic.manage_topics=Gerenciar Tópicos topic.done=Feito +topic.count_prompt=Você não pode selecionar mais de 25 tópicos +topic.format_prompt=Tópicos devem começar com uma letra ou um número, podem incluir hífens (-) e não devem ter mais de 35 caracteres [org] org_name_holder=Nome da organização diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 008895181..9df7e4e16 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -1167,6 +1167,8 @@ branch.protected_deletion_failed=Ветка '%s' защищена. Её нель topic.manage_topics=Редактировать тематические метки topic.done=Сохранить +topic.count_prompt=Вы не можете выбрать более 25 тем +topic.format_prompt=Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов [org] org_name_holder=Название организации diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index b0d098bad..8946d2894 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -40,6 +40,7 @@ u2f_unsupported_browser=Ваш браузер не підтримує U2F клю u2f_error_1=Сталася невідома помилка. Спробуйте ще раз. u2f_error_2=Переконайтеся, що ви використовуєте зашифроване з'єднання (https://) та відвідуєте правильну URL-адресу. u2f_error_3=Сервер не може обробити, ваш запит. +u2f_error_4=Представлений ключ не дає право на цей запит. Якщо спробуєте зареєструвати його, переконайтеся, що ключ ще не зареєстровано. u2f_error_5=Таймаут досягнуто до того, як ваш ключ можна буде прочитати. Перезавантажте, щоб повторити спробу. u2f_reload=Оновити @@ -74,7 +75,7 @@ cancel=Відмінити [install] install=Встановлення title=Початкова конфігурація -docker_helper=Якщо ви запускаєте Gitea всередині Docker, будь ласка уважно прочитайте документацію перед тим, як що-небудь змінити на цій сторінці. +docker_helper=Якщо ви запускаєте Gitea всередині Docker, будь ласка уважно прочитайте документацію перед тим, як щось змінити на цій сторінці. requite_db_desc=Gitea потребує MySQL, PostgreSQL, MSSQL, SQLite3 або TiDB. db_title=Налаштування бази даних db_type=Тип бази даних @@ -593,6 +594,7 @@ commits.signed_by=Підписано commits.gpg_key_id=Ідентифікатор GPG ключа ext_issues=Зов. Проблеми +ext_issues.desc=Посилання на зовнішню систему відстеження проблем. issues.new=Нова проблема issues.new.labels=Мітки @@ -614,6 +616,7 @@ issues.new_label_desc_placeholder=Опис issues.create_label=Створити мітку issues.label_templates.title=Завантажити визначений набір міток issues.label_templates.helper=Оберіть набір міток +issues.label_templates.use=Використовувати набір міток issues.label_templates.fail_to_load_file=Не вдалося завантажити файл шаблона мітки '%s': %v issues.add_label_at=додав(ла) мітку
%s
%s issues.add_milestone_at=`додав(ла) до %s етапу %s` @@ -702,9 +705,11 @@ issues.start_tracking=Почати відстеження часу issues.start_tracking_history=`почав працювати %s` issues.tracking_already_started=`Ви вже почали відстежувати час для цієї проблеми!` issues.stop_tracking=Стоп +issues.stop_tracking_history=`перестав(-ла) працювати %s` issues.add_time=Вручну додати час issues.add_time_short=Додати час issues.add_time_cancel=Відмінити +issues.add_time_history=`додав(-ла) витрачений час %s` issues.add_time_hours=Години issues.add_time_minutes=Хвилини issues.add_time_sum_to_small=Час не введено. @@ -713,6 +718,8 @@ issues.cancel_tracking_history=`скасував відстеження часу issues.time_spent_total=Загальний витрачений час issues.time_spent_from_all_authors=`Загальний витрачений час: %s` issues.due_date=Дата завершення +issues.invalid_due_date_format=Дата закінчення має бути в форматі 'ррр-мм-дд'. +issues.error_modifying_due_date=Не вдалося змінити дату завершення. issues.due_date_form=рррр-мм-дд issues.due_date_form_add=Додати дату завершення issues.due_date_form_update=Оновити дату завершення @@ -768,6 +775,7 @@ milestones.filter_sort.most_issues=Найбільш проблем milestones.filter_sort.least_issues=Найменш проблем ext_wiki=Зов. Вікі +ext_wiki.desc=Посилання на зовнішню вікі. wiki=Вікі wiki.welcome=Ласкаво просимо до Вікі. @@ -817,6 +825,7 @@ activity.closed_issue_label=Закрито activity.new_issues_count_1=Нова Проблема activity.new_issues_count_n=%d Проблем activity.new_issue_label=Відкриті +activity.title.unresolved_conv_1=%d Незавершене обговорення activity.unresolved_conv_label=Відкрити activity.title.releases_1=%d Реліз activity.title.releases_n=%d Релізів From 91ff87c0e5caf9790cff7d2683b95a10250edcc2 Mon Sep 17 00:00:00 2001 From: Alexey Terentyev Date: Wed, 27 Jun 2018 08:23:10 +0300 Subject: [PATCH 038/124] Fixed violation of the unique constraint for v68 migration (#4297) --- models/migrations/v68.go | 147 ++++++++++++++++++++++++++------------- models/topic.go | 12 ++-- 2 files changed, 106 insertions(+), 53 deletions(-) diff --git a/models/migrations/v68.go b/models/migrations/v68.go index d6a0d04c5..e27b896c8 100644 --- a/models/migrations/v68.go +++ b/models/migrations/v68.go @@ -5,19 +5,47 @@ package migrations import ( + "fmt" + "regexp" "strings" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/log" "github.com/go-xorm/xorm" ) +var topicPattern = regexp.MustCompile(`^[a-z0-9][a-z0-9-]*$`) + +func validateTopic(topic string) bool { + return len(topic) <= 35 && topicPattern.MatchString(topic) +} + func reformatAndRemoveIncorrectTopics(x *xorm.Engine) (err error) { log.Info("This migration could take up to minutes, please be patient.") + type Topic struct { - ID int64 - Name string `xorm:"unique"` + ID int64 + Name string `xorm:"UNIQUE"` + RepoCount int + CreatedUnix int64 `xorm:"INDEX created"` + UpdatedUnix int64 `xorm:"INDEX updated"` + } + + type RepoTopic struct { + RepoID int64 `xorm:"UNIQUE(s)"` + TopicID int64 `xorm:"UNIQUE(s)"` + } + + type Repository struct { + ID int64 `xorm:"pk autoincr"` + Topics []string `xorm:"TEXT JSON"` + } + + if err := x.Sync2(new(Topic)); err != nil { + return fmt.Errorf("Sync2: %v", err) + } + if err := x.Sync2(new(RepoTopic)); err != nil { + return fmt.Errorf("Sync2: %v", err) } sess := x.NewSession() @@ -25,79 +53,99 @@ func reformatAndRemoveIncorrectTopics(x *xorm.Engine) (err error) { const batchSize = 100 touchedRepo := make(map[int64]struct{}) - topics := make([]*Topic, 0, batchSize) delTopicIDs := make([]int64, 0, batchSize) - ids := make([]int64, 0, 30) + log.Info("Validating existed topics...") if err := sess.Begin(); err != nil { return err } - log.Info("Validating existed topics...") for start := 0; ; start += batchSize { - topics = topics[:0] - if err := sess.Asc("id").Limit(batchSize, start).Find(&topics); err != nil { + topics := make([]*Topic, 0, batchSize) + if err := x.Cols("id", "name").Asc("id").Limit(batchSize, start).Find(&topics); err != nil { return err } if len(topics) == 0 { break } for _, topic := range topics { - if models.ValidateTopic(topic.Name) { + if validateTopic(topic.Name) { continue } + log.Info("Incorrect topic: id = %v, name = %q", topic.ID, topic.Name) + topic.Name = strings.Replace(strings.TrimSpace(strings.ToLower(topic.Name)), " ", "-", -1) + ids := make([]int64, 0, 30) if err := sess.Table("repo_topic").Cols("repo_id"). Where("topic_id = ?", topic.ID).Find(&ids); err != nil { return err } + log.Info("Touched repo ids: %v", ids) for _, id := range ids { touchedRepo[id] = struct{}{} } - if models.ValidateTopic(topic.Name) { - log.Info("Updating topic: id = %v, name = %v", topic.ID, topic.Name) - if _, err := sess.Table("topic").ID(topic.ID). - Update(&Topic{Name: topic.Name}); err != nil { + if validateTopic(topic.Name) { + unifiedTopic := Topic{Name: topic.Name} + exists, err := sess.Cols("id", "name").Get(&unifiedTopic) + log.Info("Exists topic with the name %q? %v, id = %v", topic.Name, exists, unifiedTopic.ID) + if err != nil { return err } - } else { - delTopicIDs = append(delTopicIDs, topic.ID) + if exists { + log.Info("Updating repo_topic rows with topic_id = %v to topic_id = %v", topic.ID, unifiedTopic.ID) + if _, err := sess.Where("topic_id = ? AND repo_id NOT IN "+ + "(SELECT rt1.repo_id FROM repo_topic rt1 INNER JOIN repo_topic rt2 "+ + "ON rt1.repo_id = rt2.repo_id WHERE rt1.topic_id = ? AND rt2.topic_id = ?)", + topic.ID, topic.ID, unifiedTopic.ID).Update(&RepoTopic{TopicID: unifiedTopic.ID}); err != nil { + return err + } + log.Info("Updating topic `repo_count` field") + if _, err := sess.Exec( + "UPDATE topic SET repo_count = (SELECT COUNT(*) FROM repo_topic WHERE topic_id = ? GROUP BY topic_id) WHERE id = ?", + unifiedTopic.ID, unifiedTopic.ID); err != nil { + return err + } + } else { + log.Info("Updating topic: id = %v, name = %q", topic.ID, topic.Name) + if _, err := sess.Table("topic").ID(topic.ID). + Update(&Topic{Name: topic.Name}); err != nil { + return err + } + continue + } } + delTopicIDs = append(delTopicIDs, topic.ID) } } + if err := sess.Commit(); err != nil { + return err + } + + sess.Init() log.Info("Deleting incorrect topics...") - for start := 0; ; start += batchSize { - if (start + batchSize) < len(delTopicIDs) { - ids = delTopicIDs[start:(start + batchSize)] - } else { - ids = delTopicIDs[start:] - } - - log.Info("Deleting 'repo_topic' rows for topics with ids = %v", ids) - if _, err := sess.In("topic_id", ids).Delete(&models.RepoTopic{}); err != nil { - return err - } - - log.Info("Deleting topics with id = %v", ids) - if _, err := sess.In("id", ids).Delete(&Topic{}); err != nil { - return err - } - - if len(ids) < batchSize { - break - } + if err := sess.Begin(); err != nil { + return err + } + log.Info("Deleting 'repo_topic' rows for topics with ids = %v", delTopicIDs) + if _, err := sess.In("topic_id", delTopicIDs).Delete(&RepoTopic{}); err != nil { + return err + } + log.Info("Deleting topics with id = %v", delTopicIDs) + if _, err := sess.In("id", delTopicIDs).Delete(&Topic{}); err != nil { + return err + } + if err := sess.Commit(); err != nil { + return err } - repoTopics := make([]*models.RepoTopic, 0, batchSize) - delRepoTopics := make([]*models.RepoTopic, 0, batchSize) - tmpRepoTopics := make([]*models.RepoTopic, 0, 30) + delRepoTopics := make([]*RepoTopic, 0, batchSize) log.Info("Checking the number of topics in the repositories...") for start := 0; ; start += batchSize { - repoTopics = repoTopics[:0] - if err := sess.Cols("repo_id").Asc("repo_id").Limit(batchSize, start). + repoTopics := make([]*RepoTopic, 0, batchSize) + if err := x.Cols("repo_id").Asc("repo_id").Limit(batchSize, start). GroupBy("repo_id").Having("COUNT(*) > 25").Find(&repoTopics); err != nil { return err } @@ -109,8 +157,8 @@ func reformatAndRemoveIncorrectTopics(x *xorm.Engine) (err error) { for _, repoTopic := range repoTopics { touchedRepo[repoTopic.RepoID] = struct{}{} - tmpRepoTopics = tmpRepoTopics[:0] - if err := sess.Where("repo_id = ?", repoTopic.RepoID).Find(&tmpRepoTopics); err != nil { + tmpRepoTopics := make([]*RepoTopic, 0, 30) + if err := x.Where("repo_id = ?", repoTopic.RepoID).Find(&tmpRepoTopics); err != nil { return err } @@ -122,13 +170,18 @@ func reformatAndRemoveIncorrectTopics(x *xorm.Engine) (err error) { } } + sess.Init() + log.Info("Deleting superfluous topics for repositories (more than 25 topics)...") + if err := sess.Begin(); err != nil { + return err + } for _, repoTopic := range delRepoTopics { log.Info("Deleting 'repo_topic' rows for 'repository' with id = %v. Topic id = %v", repoTopic.RepoID, repoTopic.TopicID) if _, err := sess.Where("repo_id = ? AND topic_id = ?", repoTopic.RepoID, - repoTopic.TopicID).Delete(&models.RepoTopic{}); err != nil { + repoTopic.TopicID).Delete(&RepoTopic{}); err != nil { return err } if _, err := sess.Exec( @@ -138,17 +191,17 @@ func reformatAndRemoveIncorrectTopics(x *xorm.Engine) (err error) { } } - topicNames := make([]string, 0, 30) log.Info("Updating repositories 'topics' fields...") for repoID := range touchedRepo { + topicNames := make([]string, 0, 30) if err := sess.Table("topic").Cols("name"). - Join("INNER", "repo_topic", "topic.id = repo_topic.topic_id"). - Where("repo_topic.repo_id = ?", repoID).Find(&topicNames); err != nil { + Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id"). + Where("repo_topic.repo_id = ?", repoID).Desc("topic.repo_count").Find(&topicNames); err != nil { return err } log.Info("Updating 'topics' field for repository with id = %v", repoID) if _, err := sess.ID(repoID).Cols("topics"). - Update(&models.Repository{Topics: topicNames}); err != nil { + Update(&Repository{Topics: topicNames}); err != nil { return err } } diff --git a/models/topic.go b/models/topic.go index 247aac5ff..678795a3d 100644 --- a/models/topic.go +++ b/models/topic.go @@ -26,7 +26,7 @@ var topicPattern = regexp.MustCompile(`^[a-z0-9][a-z0-9-]*$`) // Topic represents a topic of repositories type Topic struct { ID int64 - Name string `xorm:"unique"` + Name string `xorm:"UNIQUE"` RepoCount int CreatedUnix util.TimeStamp `xorm:"INDEX created"` UpdatedUnix util.TimeStamp `xorm:"INDEX updated"` @@ -34,8 +34,8 @@ type Topic struct { // RepoTopic represents associated repositories and topics type RepoTopic struct { - RepoID int64 `xorm:"unique(s)"` - TopicID int64 `xorm:"unique(s)"` + RepoID int64 `xorm:"UNIQUE(s)"` + TopicID int64 `xorm:"UNIQUE(s)"` } // ErrTopicNotExist represents an error that a topic is not exist @@ -190,10 +190,10 @@ func SaveTopics(repoID int64, topicNames ...string) error { } } - topicNames = topicNames[:0] + topicNames = make([]string, 0, 25) if err := sess.Table("topic").Cols("name"). - Join("INNER", "repo_topic", "topic.id = repo_topic.topic_id"). - Where("repo_topic.repo_id = ?", repoID).Find(&topicNames); err != nil { + Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id"). + Where("repo_topic.repo_id = ?", repoID).Desc("topic.repo_count").Find(&topicNames); err != nil { return err } From a711d41f54dc4c57f5f314ef99fe79bf0105c1b8 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Wed, 27 Jun 2018 05:25:28 +0000 Subject: [PATCH 039/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_uk-UA.ini | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 8946d2894..14d6335d8 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -1,4 +1,4 @@ -app_desc=Зручний сервіс, власного Git хостінгу +app_desc=Зручний сервіс, власного Git хостингу home=Головна dashboard=Панель управління @@ -146,6 +146,7 @@ confirm_password=Підтвердження пароля admin_email=Адреса електронної пошти install_btn_confirm=Встановлення Gitea test_git_failed=Не в змозі перевірити 'git' команду: %v +sqlite3_not_available=Ця версія Gitea не підтримує SQLite3. Будь ласка, завантажте офіційну бінарну версію з %s (не версію gobuild). invalid_db_setting=Налаштування бази даних є некоректними: %v invalid_repo_path=Помилковий шлях до кореня репозиторію: %v save_config_failed=Не в змозі зберегти конфігурацію: %v @@ -295,6 +296,8 @@ unable_verify_ssh_key=Не вдається підтвердити ключ SSH; auth_failed=Помилка автентифікації: %v still_own_repo=Ваш обліковий запис володіє одним або декількома репозиторіями; видаліть або перенесіть їх в першу чергу. +still_has_org=Ваш обліковий запис є учасником однієї чи декількох організацій; вийдіть з них в першу чергу. +org_still_own_repo=Ця організація як і раніше володіє одним або декількома репозиторіями; спочатку видаліть або перенесіть їх. target_branch_not_exist=Цільової гілки не існує. @@ -368,6 +371,7 @@ primary=Основний primary_email=Зробити основним delete_email=Видалити email_deletion=Видалити адресу електронної пошти +email_deletion_success=Адресу електронної пошти було видалено. openid_deletion=Видалити адресу OpenID openid_deletion_success=Адреса OpenID була видалена. add_new_email=Додати нову адресу електронної пошти @@ -401,6 +405,7 @@ add_gpg_key_success=GPG ключ '%s' додано. delete_key=Видалити ssh_key_deletion=Видалити SSH ключ gpg_key_deletion=Видалити GPG ключ +ssh_key_deletion_desc=Видалення ключа SSH скасовує доступ до вашого облікового запису. Продовжити? gpg_key_deletion_desc=Видалення GPG ключа скасовує перевірку підписаних ним комітів. Продовжити? ssh_key_deletion_success=SSH було видалено. gpg_key_deletion_success=GPG було видалено. @@ -624,6 +629,7 @@ issues.deleted_milestone=`(видалено)` issues.add_assignee_at=`був призначений %s %s` issues.remove_assignee_at=`видалили із призначених %s` issues.change_title_at=`змінив(ла) заголовок з %s на %s %s` +issues.delete_branch_at=`видалена гілка %s %s` issues.open_tab=%d відкрито issues.close_tab=%d закрито issues.filter_label=Мітка From e87c540a87602682d49f1b10bfa91cbebe0fc9b6 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Wed, 27 Jun 2018 03:06:39 -0400 Subject: [PATCH 040/124] Backport 1.4.3 changelog to master branch (#4323) --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 373ce00e6..b31730a09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ This changelog goes through all the changes that have been made in each release without substantial changes to our git log; to see the highlights of what has been added to each release, please refer to the [blog](https://blog.gitea.io). +## [1.4.3](https://github.com/go-gitea/gitea/releases/tag/v1.4.3) - 2018-06-26 +* SECURITY + * HTML-escape plain-text READMEs (#4192) (#4214) + * Fix open redirect vulnerability on login screen (#4312) (#4312) +* BUGFIXES + * Fix broken monitoring page when running processes are shown (#4203) (#4208) + * Fix delete comment bug (#4216) (#4228) + * Delete reactions added to issues and comments when deleting repository (#4232) (#4237) + * Fix wiki URL encoding bug (#4091) (#4254) + * Fix code tab link when viewing tags (#3908) (#4263) + * Fix webhook type conflation (#4285) (#4285) + ## [1.4.2](https://github.com/go-gitea/gitea/releases/tag/v1.4.2) - 2018-06-04 * BUGFIXES * Adjust z-index for floating labels (#3939) (#3950) From 4ee52b716144b9d0eef4564dda4d22840897c09b Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Sat, 30 Jun 2018 13:13:17 -0400 Subject: [PATCH 041/124] Add scope to Gitlab oauth request (#4330) Fix #3449 --- modules/auth/oauth2/oauth2.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/auth/oauth2/oauth2.go b/modules/auth/oauth2/oauth2.go index 89286a1bd..de125c619 100644 --- a/modules/auth/oauth2/oauth2.go +++ b/modules/auth/oauth2/oauth2.go @@ -163,7 +163,7 @@ func createProvider(providerName, providerType, clientID, clientSecret, openIDCo profileURL = customURLMapping.ProfileURL } } - provider = gitlab.NewCustomisedURL(clientID, clientSecret, callbackURL, authURL, tokenURL, profileURL) + provider = gitlab.NewCustomisedURL(clientID, clientSecret, callbackURL, authURL, tokenURL, profileURL, "read_user") case "gplus": provider = gplus.New(clientID, clientSecret, callbackURL, "email") case "openidConnect": From e8a17e4558707a33fed8b975f4c43bbe435c4349 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Sat, 30 Jun 2018 17:14:19 +0000 Subject: [PATCH 042/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_bg-BG.ini | 72 ++++ options/locale/locale_de-DE.ini | 98 ++--- options/locale/locale_es-ES.ini | 96 ++++- options/locale/locale_fi-FI.ini | 101 +++++ options/locale/locale_fr-FR.ini | 699 +++++++++++++++++++++++++++++++- options/locale/locale_id-ID.ini | 109 +++++ options/locale/locale_it-IT.ini | 16 +- options/locale/locale_ja-JP.ini | 2 + options/locale/locale_lv-LV.ini | 673 ++++++++++++++++++++++++++++++ options/locale/locale_nb-NO.ini | 6 + options/locale/locale_nl-NL.ini | 45 ++ options/locale/locale_pl-PL.ini | 152 +++++++ options/locale/locale_uk-UA.ini | 215 +++++++++- options/locale/locale_zh-CN.ini | 2 + options/locale/locale_zh-TW.ini | 476 ++++++++++++++++++++++ 15 files changed, 2697 insertions(+), 65 deletions(-) diff --git a/options/locale/locale_bg-BG.ini b/options/locale/locale_bg-BG.ini index f0d6b1c0a..99aa173e1 100644 --- a/options/locale/locale_bg-BG.ini +++ b/options/locale/locale_bg-BG.ini @@ -11,6 +11,7 @@ version=Версия page=Страница template=Шаблон language=Език +notifications=Известия signed_in_as=Вписан като username=Потребител @@ -28,6 +29,9 @@ manage_org=Управление на организации account_settings=Настройки на профила settings=Настройки +all=Всичко +sources=Източници +mirrors=Огледала activities=Активности pull_requests=Заявки за сливане @@ -69,7 +73,9 @@ issues.in_your_repos=Във Вашите хранилища [explore] repos=Хранилища users=Потребители +organizations=Организации search=Търсене +code=Код [auth] register_helper_msg=Вече имате профил? Впишете се сега! @@ -79,11 +85,14 @@ has_unconfirmed_mail=Здравейте %s, имате непотвърден а resend_mail=Щракнете тук, за да се изпрати ново писмо за потвърждение reset_password=Нулиране на паролата reset_password_helper=Щракнете тук, за да нулирате паролата си +openid_connect_submit=Свързване [mail] activate_account=Моля активирайте Вашия профил activate_email=Провери адрес на ел. поща reset_password=Нулиране на паролата +register_success=Успешна регистрация +register_notify=Добре дошли в Gitea [modal] yes=Да @@ -117,6 +126,7 @@ url_error=` не е валиден URL адрес.` include_error=` трябва да съдържа текст '%s'.` unknown_error=Неизвестна грешка: +user_not_exist=Потребителят не съществува. auth_failed=Неуспешно удостоверяване: %v @@ -136,9 +146,11 @@ unfollow=Не следвай [settings] profile=Профил password=Парола +security=Сигурност avatar=Аватар social=Социални профили delete=Изтрий профил +twofa=Двуфакторно удостоверяване uid=UID public_profile=Публичен профил @@ -169,6 +181,8 @@ key_content=Съдържание add_on=Добавен на last_used=Последно използван на no_activity=Няма скорошна дейност +show_openid=Показване в профила +hide_openid=Скриване от профила manage_social=Управление на свързани профили в социалните мрежи @@ -239,6 +253,7 @@ file_view_raw=Виж директен файл file_permalink=Постоянна връзка editor.preview_changes=Преглед на промени +editor.name_your_file=Име на файла ви… editor.or=или editor.commit_changes=Промени в ревизия editor.add_tmpl=Добави '%s/' @@ -247,6 +262,7 @@ editor.update=Модифицирай '%s' editor.delete=Изтрий '%s' editor.commit_directly_to_this_branch=Запази ревизия директно в клон %s. editor.create_new_branch=Създай нов клон от тази ревизия и изпрати заявки за сливане. +editor.new_branch_name_desc=Име на новия клон… editor.cancel=Отказ editor.branch_already_exists=Клон '%s' вече съществува в това хранилище. editor.no_changes_to_show=Няма промени. @@ -255,6 +271,7 @@ editor.unable_to_upload_files=Невъзможно качване на файл editor.upload_files_to_dir=Качи файлове в '%s' commits.commits=Ревизии +commits.find=Търсене commits.author=Автор commits.message=Съобщение commits.date=Дата @@ -277,6 +294,7 @@ issues.create_label=Създай етикет issues.label_templates.title=Зареждане на предварително зададен набор от етикети issues.label_templates.helper=Изберете набор етикети issues.label_templates.fail_to_load_file=Неуспешно зареждане на шаблон с етикети '%s': %v +issues.deleted_milestone=`(изтрито)` issues.open_tab=%d отворени issues.close_tab=%d затворени issues.filter_label=Етикет @@ -294,6 +312,11 @@ issues.filter_sort.recentupdate=Последно променени issues.filter_sort.leastupdate=Отдавна променени issues.filter_sort.mostcomment=Най-много коментирани issues.filter_sort.leastcomment=Най-малко коментирани +issues.action_open=Отваряне +issues.action_close=Затваряне +issues.action_label=Етикет +issues.action_milestone=Етап +issues.action_milestone_no_select=Няма етап issues.opened_by=отворен %[1]s от %[3]s issues.opened_by_fake=отворен %[1]s от %[2]s issues.previous=Предишна @@ -323,9 +346,17 @@ issues.label_count=%d етикети issues.label_open_issues=%d отворени задачи issues.label_edit=Редакция issues.label_delete=Изтрий +issues.label.filter_sort.alphabetically=По азбучен ред +issues.label.filter_sort.by_size=Големина issues.num_participants=%d участника issues.attachment.open_tab=`Щракнете за да прегледате "%s" в нов раздел` issues.attachment.download=`Щракнете за да изтеглите "%s"` +issues.start_tracking_short=Начало +issues.stop_tracking=Спиране +issues.add_time_cancel=Отказ +issues.add_time_hours=Часа +issues.add_time_minutes=Минути +issues.cancel_tracking=Отказ pulls.new=Нова заявка за сливане pulls.filter_branch=Филтър по клон @@ -367,7 +398,19 @@ wiki.page_already_exists=Страница със същото име вече с wiki.pages=Страници wiki.last_updated=Последна модификация на %s +activity.period.filter_label=Период: +activity.period.daily=1 ден +activity.period.halfweekly=3 дни +activity.period.weekly=1 седмица +activity.period.monthly=1 месец +activity.title.user_1=%d потребител +activity.title.user_n=%d потребителя +activity.closed_issue_label=Затворено +activity.new_issue_label=Отворено +activity.unresolved_conv_label=Отваряне +activity.published_release_label=Публикувано +search=Търсене settings=Настройки settings.collaboration.write=За писане @@ -389,6 +432,7 @@ settings.transfer=Прехвърли притежание settings.delete=Изтрий това хранилище settings.delete_notices_1=- Тази операция НЕ МОЖЕ да бъде отменена в последствие. settings.transfer_owner=Нов притежател +settings.search_user_placeholder=Търсене на потребител… settings.add_webhook=Добави уеб-кука settings.webhook.test_delivery=Тестово изпращане settings.webhook.request=Заявка @@ -402,6 +446,8 @@ settings.update_githook=Запази куката settings.secret=Тайна settings.slack_username=Потребителско име settings.slack_icon_url=URL адрес на икона +settings.discord_username=Потребителско име +settings.discord_icon_url=URL адрес на икона settings.slack_color=Цвят settings.event_create=Създаване settings.event_pull_request=Заявка за сливане @@ -416,6 +462,11 @@ settings.deploy_keys=Ключове за внедряване settings.add_deploy_key=Добави ключ за внедряване settings.title=Заглавие settings.deploy_key_content=Съдържание +settings.branches=Клонове +settings.protected_branch=Защита на клона +settings.add_protected_branch=Включване на защита +settings.delete_protected_branch=Изключване на защита +settings.choose_branch=Изберете клон… diff.browse_source=Преглед на файлове diff.parent=родител @@ -424,6 +475,7 @@ diff.show_diff_stats=Покажи статистика за разликите diff.show_split_view=Разделен изглед diff.show_unified_view=Обединен изглед diff.stats_desc=променени са %d файла, в които са добавени %d реда и са изтрити %d реда +diff.bin=Двоични данни diff.view_file=Целия файл diff.file_suppressed=Файловите разлики са ограничени, защото са твърде много diff.too_many_files=Някои файлове не бяха показани, защото твърде много файлове са промени @@ -442,11 +494,17 @@ release.title=Заглавие release.content=Съдържание release.write=Редактор release.preview=Преглед +release.loading=Зарежда се… release.cancel=Отказ release.publish=Публикувай версия release.save_draft=Запис на чернова release.downloads=Изтегляния +branch.search=Търсене на клонове +branch.delete_head=Изтриване +branch.delete_html=Изтриване на клон +branch.create_from=от '%s' +branch.deleted_by=Изтрито от %s [org] @@ -458,6 +516,8 @@ people=Участници teams=Екипи lower_members=участници lower_repositories=хранилища +create_new_team=Нов отбор +create_team=Създаване на отбор org_desc=Описание team_name=Име на екипа team_desc=Описание @@ -546,6 +606,7 @@ users.edit=Редакция users.auth_source=Начин на удостоверяване users.local=Локално +orgs.org_manage_panel=Управление на организацията orgs.name=Име orgs.teams=Екипи orgs.members=Участници @@ -556,6 +617,7 @@ repos.private=Частно repos.watches=Наблюдавания repos.stars=Харесвания repos.issues=Задачи +repos.size=Големина auths.name=Име auths.type=Тип @@ -580,12 +642,15 @@ auths.allowed_domains=Разрешени домейни auths.enable_tls=Включи TLS криптиране auths.skip_tls_verify=Пропусни проверка на TLS сертификат auths.pam_service_name=Име на PAM услуга +auths.oauth2_profileURL=URL адрес на профила +auths.oauth2_emailURL=Имейл адрес auths.enable_auto_register=Включи автоматична регистрация auths.tips=Съвети config.server_config=Сървърни настройки config.disable_router_log=Изключи журнал на маршрутизатора config.run_mode=Режим на изпълнение +config.git_version=Версия на Git config.repo_root_path=Основен път към хранилища config.static_file_root_path=Път към статични файлове config.script_type=Тип на скрипта @@ -700,6 +765,7 @@ push_tag=предаде маркер %[2]s към '-Format ein. +smtp_from_helper=E-Mail-Adresse, die von Gitea genutzt werden soll. Bitte gib die E-Mail-Adresse im Format „"Name" “ ein. mailer_user=SMTP-Benutzername mailer_password=SMTP-Passwort register_confirm=E-Mail-Bestätigung benötigt zum Registrieren @@ -146,7 +146,7 @@ admin_password=Passwort confirm_password=Passwort bestätigen admin_email=E-Mail-Adresse install_btn_confirm=Gitea installieren -test_git_failed=Fehler beim Test des 'git' Kommandos: %v +test_git_failed=Fehler beim Test des „git“-Befehls: %v sqlite3_not_available=Diese Gitea-Version unterstützt SQLite3 nicht. Bitte lade die offizielle binäre Version von %s herunter (nicht die „gobuild“-Version). invalid_db_setting=Datenbankeinstellungen sind ungültig: %v invalid_repo_path=Repository-Verzeichnis ist ungültig: %v @@ -188,7 +188,7 @@ repo_no_results=Keine passenden Repositories gefunden. user_no_results=Keine passenden Benutzer gefunden. org_no_results=Keine passenden Organisatioen gefunden. code_no_results=Es konnte kein passender Code für deinen Suchbegriff gefunden werden. -code_search_results=Suchergebnisse für '%s' +code_search_results=Suchergebnisse für „%s“ [auth] create_new_account=Konto anlegen @@ -254,12 +254,12 @@ HttpsUrl=HTTPS-URL PayloadUrl=Payload-URL TeamName=Teamname AuthName=Name der Autorisierung -AdminEmail=Administrator E-Mail +AdminEmail=Administrator-E-Mail -NewBranchName=Neuer Branch Name -CommitSummary=Commit Zusammenfassung -CommitMessage=Commit Nachricht -CommitChoice=Commit Auswahl +NewBranchName=Neuer Branchname +CommitSummary=Commit-Zusammenfassung +CommitMessage=Commit-Nachricht +CommitChoice=Commit-Auswahl TreeName=Dateipfad Content=Inhalt @@ -272,7 +272,7 @@ min_size_error=` muss mindestens %s Zeichen enthalten.` max_size_error=` darf höchstens %s Zeichen enthalten.` email_error=` ist keine gültige E-Mail-Adresse.` url_error=` ist keine gültige URL.` -include_error=` muss den Text '%s' enthalten.` +include_error=` muss den Text „%s“ enthalten.` unknown_error=Unbekannter Fehler: captcha_incorrect=Der eingegebene CAPTCHA-Code ist falsch. password_not_match=Die Passwörter stimmen nicht überein. @@ -314,8 +314,8 @@ following=Folge ich follow=Folgen unfollow=Nicht mehr folgen -form.name_reserved=Der Benutzername '%s' ist reserviert. -form.name_pattern_not_allowed='%s' ist nicht erlaubt für Benutzernamen. +form.name_reserved=Der Benutzername „%s“ ist reserviert. +form.name_pattern_not_allowed=Das Muster „%s“ ist nicht in einem Benutzernamen erlaubt. [settings] profile=Profil @@ -323,7 +323,7 @@ account=Account password=Passwort security=Sicherheit avatar=Profilbild -ssh_gpg_keys=SSH / GPG Schlüssel +ssh_gpg_keys=SSH- / GPG-Schlüssel social=Soziale Konten applications=Anwendungen orgs=Organisationen verwalten @@ -402,7 +402,7 @@ add_new_gpg_key=GPG-Schlüssel hinzufügen ssh_key_been_used=Dieser SSH-Key wurde bereits zu deinem Account hinzugefügt. ssh_key_name_used=Ein gleichnamiger SSH-Key existiert bereits in deinem Account. gpg_key_id_used=Ein öffentlicher GPG-Schlüssel mit der gleichen ID existiert bereits. -gpg_no_key_email_found=Dieser GPG Schlüssel kann mit keiner E-Mail-Adresse deines Accounts verwendet werden. +gpg_no_key_email_found=Dieser GPG-Schlüssel kann mit keiner E-Mail-Adresse deines Kontos verwendet werden. subkeys=Unterschlüssel key_id=Schlüssel-ID key_name=Schlüsselname @@ -463,7 +463,7 @@ then_enter_passcode=Und gebe dann die angezeigte PIN der Anwendung ein: passcode_invalid=Die PIN ist falsch. Probiere es erneut. twofa_enrolled=Die Zwei-Faktor-Authentifizierung wurde für dein Konto aktiviert. Bewahre dein Einmalpasswort (%s) an einem sicheren Ort auf, da es nicht wieder angezeigt werden wird. -u2f_desc=Hardware-Sicherheitsschlüssel sind Geräte, die kryptografische Schlüssel beinhalten. Diese können für die Zwei-Faktor-Authentifizierung verwendet werden. Der Sicherheitsschlüssel muss den FIDO U2F-Standard unterstützen. +u2f_desc=Hardware-Sicherheitsschlüssel sind Geräte, die kryptografische Schlüssel beinhalten. Diese können für die Zwei-Faktor-Authentifizierung verwendet werden. Der Sicherheitsschlüssel muss den Standard FIDO U2F unterstützen. u2f_require_twofa=Du musst die Zwei-Faktor-Authentifizierung aktivieren, um Hardware-Sicherheitsschlüssel nutzen zu können. u2f_register_key=Sicherheitsschlüssel hinzufügen u2f_nickname=Nickname @@ -482,7 +482,7 @@ orgs_none=Du bist kein Mitglied in einer Organisation. repos_none=Du besitzt keine Repositories delete_account=Konto löschen -delete_prompt=Wenn du fortfährst wird dein Account permanent gelöscht. Dies KANN NICHT rückgängig gemacht werden. +delete_prompt=Wenn du fortfährst, wird dein Account permanent gelöscht. Dies KANN NICHT rückgängig gemacht werden. confirm_delete_account=Löschen bestätigen delete_account_title=Benutzerkonto löschen delete_account_desc=Bist du sicher, dass du diesen Account dauerhaft löschen möchtest? @@ -531,7 +531,7 @@ migrate_type=Migrationstyp migrate_type_helper=Dieses Repository wird ein Mirror sein migrate_repo=Repository migrieren migrate.clone_address=Migrations- / Klon-URL -migrate.clone_address_desc=Die HTTP(s) oder Klon-URL eines bereits existierenden Repositories +migrate.clone_address_desc=Die HTTP(S)- oder „git clone“-URL eines bereits existierenden Repositorys migrate.clone_local_path=oder ein lokaler Serverpfad migrate.permission_denied=Du hast keine Berechtigung zum Importieren lokaler Repositories. migrate.invalid_local_path=Der lokale Pfad ist ungültig, existiert nicht oder ist kein Ordner. @@ -608,7 +608,7 @@ editor.create_new_branch=Einen neuen Branch für diesen Commit editor.new_branch_name_desc=Neuer Branchname… editor.cancel=Abbrechen editor.filename_cannot_be_empty=Der Dateiname darf nicht leer sein. -editor.branch_already_exists=Branch '%s' existiert bereits in diesem Repository. +editor.branch_already_exists=Branch „%s“ existiert bereits in diesem Repository. editor.directory_is_a_file=Der Verzeichnisname „%s“ wird bereits als Dateiname in diesem Repository verwendet. editor.file_is_a_symlink='%s' ist ein symolischer Link. Symbolische Links können mit dem Web Editor nicht bearbeitet werden. editor.filename_is_a_directory=Der Dateiname „%s“ wird bereits als Verzeichnisname in diesem Repository verwendet. @@ -616,10 +616,10 @@ editor.file_editing_no_longer_exists=Die bearbeitete Datei „%s“ existiert ni editor.file_changed_while_editing=Der Inhalt der Datei hat sich seit dem Beginn der Bearbeitung geändert. Hier klicken, um die Änderungen anzusehen, oder Änderungen erneut comitten, um sie zu überschreiben. editor.file_already_exists=Eine Datei mit dem Namen „%s“ ist bereits in diesem Repository vorhanden. editor.no_changes_to_show=Keine Änderungen vorhanden. -editor.fail_to_update_file=Fehler beim Ändern/Erstellen der Datei '%s'. Fehler: %v +editor.fail_to_update_file=Fehler beim Ändern/Erstellen der Datei „%s“. Fehler: %v editor.add_subdir=Verzeichnis erstellen… editor.unable_to_upload_files=Fehler beim Hochladen der Dateien nach „%s“. Fehler: %v -editor.upload_files_to_dir=Dateien hochladen nach '%s' +editor.upload_files_to_dir=Dateien hochladen nach „%s“ editor.cannot_commit_to_protected_branch=Commit in den geschützten Branch „%s“ ist nicht möglich. commits.desc=Durchsuche die Quellcode-Änderungshistorie. @@ -639,10 +639,10 @@ ext_issues=Externe Issues ext_issues.desc=Link zu externem Issuetracker. issues.desc=Verwalte Bug-Reports, Aufgaben und Meilensteine. -issues.new=Neuer Issue +issues.new=Neues Issue issues.new.labels=Label issues.new.no_label=Kein Label -issues.new.clear_labels=Labels entfernen +issues.new.clear_labels=Label entfernen issues.new.milestone=Meilenstein issues.new.no_milestone=Kein Meilenstein issues.new.clear_milestone=Meilenstein entfernen @@ -659,9 +659,9 @@ issues.new_label_desc_placeholder=Beschreibung issues.create_label=Label erstellen issues.label_templates.title=Lade vordefinierte Label issues.label_templates.info=Es existieren noch keine Label. Erstelle ein neues Label („Neues Label“) oder verwende das Standard-Label-Set: -issues.label_templates.helper=Wähle ein Label +issues.label_templates.helper=Wähle ein Label-Set issues.label_templates.use=Label-Set verwenden -issues.label_templates.fail_to_load_file=Fehler beim Laden der Label Template Datei '%s': %v +issues.label_templates.fail_to_load_file=Fehler beim Laden der Label-Vorlagendatei „%s“: %v issues.add_label_at=hat das
%s
-Label %s hinzugefügt issues.remove_label_at=hat das
%s
-Label %s entfernt issues.add_milestone_at=`hat diesen Issue %[2]s zum %[1]s Meilenstein hinzugefügt` @@ -745,8 +745,8 @@ issues.label.filter_sort.reverse_alphabetically=Umgekehrt alphabetisch issues.label.filter_sort.by_size=Kleinste zuerst issues.label.filter_sort.reverse_by_size=Größte zuerst issues.num_participants=%d Beteiligte -issues.attachment.open_tab=`Klicken um "%s" in einem neuen Tab zu öffnen` -issues.attachment.download=`Klicken um "%s" herunterzuladen` +issues.attachment.open_tab=`Klicken, um „%s“ in einem neuen Tab zu öffnen` +issues.attachment.download=`Klicken, um „%s“ herunterzuladen` issues.subscribe=Abonnieren issues.unsubscribe=Abbestellen issues.tracker=Zeiterfassung @@ -914,7 +914,7 @@ search.search_repo=Repository durchsuchen search.results=Suchergebnisse für „%s“ in %s settings=Einstellungen -settings.desc=In den Einstellungen kannst du die Einstellungen des Repository anpassen +settings.desc=In den Einstellungen kannst du die Einstellungen des Repositorys anpassen settings.options=Repository settings.collaboration=Mitarbeiter settings.collaboration.admin=Administrator @@ -924,7 +924,7 @@ settings.collaboration.undefined=Nicht definiert settings.hooks=Webhooks settings.githooks=Git-Hooks settings.basic_settings=Grundeinstellungen -settings.mirror_settings=Mirror Einstellungen +settings.mirror_settings=Mirror-Einstellungen settings.sync_mirror=Jetzt synchronisieren settings.mirror_sync_in_progress=Mirror-Synchronisierung wird zurzeit ausgeführt. Komm in ein paar Minuten zurück. settings.site=Webseite @@ -933,13 +933,13 @@ settings.advanced_settings=Erweiterte Einstellungen settings.wiki_desc=Repository-Wiki aktivieren settings.use_internal_wiki=Eingebautes Wiki verwenden settings.use_external_wiki=Externes Wiki verwenden -settings.external_wiki_url=Externe Wiki URL +settings.external_wiki_url=Externe Wiki-URL settings.external_wiki_url_error=Die externe Wiki-URL ist ungültig. settings.external_wiki_url_desc=Besucher werden auf die externe Wiki-URL weitergeleitet, wenn sie auf das Wiki-Tab klicken. settings.issues_desc=Repository-Issue-Tracker aktivieren settings.use_internal_issue_tracker=Integrierten Issue-Tracker verwenden settings.use_external_issue_tracker=Externen Issue-Tracker verwenden -settings.external_tracker_url=URL eines externen Issue Trackers +settings.external_tracker_url=URL eines externen Issue-Trackers settings.external_tracker_url_error=Die URL des externen Issue-Trackers ist ungültig. settings.external_tracker_url_desc=Besucher werden auf die externe Issue-Tracker-URL weitergeleitet, wenn sie auf das Issues-Tab klicken. settings.tracker_url_format=URL-Format des externen Issue-Systems @@ -975,7 +975,7 @@ settings.confirm_wiki_delete=Wiki-Daten löschen settings.wiki_deletion_success=Repository-Wiki-Daten wurden gelöscht. settings.delete=Dieses Repository löschen settings.delete_desc=Wenn dieses Repository gelöscht wurde, gibt es keinen Weg zurück. Bitte sei vorsichtig. -settings.delete_notices_1=- Diese Operation kann NICHT rückgängig gemacht werden. +settings.delete_notices_1=– Diese Operation KANN NICHT rückgängig gemacht werden. settings.delete_notices_2=– Die Operation wird das %s-Repository dauerhaft löschen, inklusive der Dateien, Issues, Kommentare und Zugriffseinstellungen. settings.delete_notices_fork_1=– Forks dieses Repositorys werden nach dem Löschen unabhängig. settings.deletion_success=Das Repository wurde gelöscht. @@ -1049,7 +1049,7 @@ settings.update_webhook=Webhook aktualisieren settings.update_hook_success=Webhook wurde aktualisiert. settings.delete_webhook=Webhook entfernen settings.recent_deliveries=Letzte Zustellungen -settings.hook_type=Hook Typ +settings.hook_type=Hook-Typ settings.add_slack_hook_desc=Slack-Integration zu deinem Repository hinzufügen. settings.slack_token=Token settings.slack_domain=Domain @@ -1077,7 +1077,7 @@ settings.protected_branch_can_push_yes=Du kannst pushen settings.protected_branch_can_push_no=Du kannst nicht pushen settings.branch_protection=Branch-Schutz für Branch „%s“ settings.protect_this_branch=Brach-Schutz aktivieren -settings.protect_this_branch_desc=Verhindere Löschen und deaktiviere das sog. „force pushing” von Git auf diesen Branch. +settings.protect_this_branch_desc=Verhindere Löschen und deaktiviere das „force pushing” von Git auf diesen Branch. settings.protect_whitelist_committers=Push-Whitelist aktivieren settings.protect_whitelist_committers_desc=Erlaube Nutzern oder Teams auf der Whitelist Push-Beschränkungen zu umgehen. settings.protect_whitelist_users=Nutzer, die pushen dürfen: @@ -1155,9 +1155,9 @@ branch.deletion_success=Branch „%s“ wurde gelöscht. branch.deletion_failed=Branch „%s“ konnte nicht gelöscht werden. branch.delete_branch_has_new_commits=Der Branch „%s“ kann nicht gelöscht weden, da seit dem letzten Merge neue Commits hinzugefügt wurden. branch.create_branch=Erstelle Branch %s -branch.create_from=von '%s' +branch.create_from=von „%s“ branch.create_success=Branch „%s“ wurde erstellt. -branch.branch_already_exists=Branch '%s' existiert bereits in diesem Repository. +branch.branch_already_exists=Branch „%s“ existiert bereits in diesem Repository. branch.branch_name_conflict=Der Branch-Name „%s“ steht in Konflikt mit dem bestehenden Branch „%s“. branch.tag_collision=Branch „%s“ kann nicht erstellt werden, da in diesem Repository bereits ein Tag mit dem selben Namen existiert. branch.deleted_by=Von %s gelöscht @@ -1206,7 +1206,7 @@ settings.update_avatar_success=Der Organisationsavatar wurde aktualisiert. settings.delete=Organisation löschen settings.delete_account=Diese Organisation löschen settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies KANN NICHT rückgängig gemacht werden! -settings.confirm_delete_account=Löschen +settings.confirm_delete_account=Löschen bestätigen settings.delete_org_title=Organisation löschen settings.delete_org_desc=Diese Organisation wird dauerhaft gelöscht. Fortfahren? settings.hooks_desc=Webhooks hinzufügen, die für alle Repositories dieser Organisation ausgelöst werden. @@ -1267,7 +1267,7 @@ total=Gesamt: %d dashboard.statistic=Übersicht dashboard.operations=Wartungsoperationen dashboard.system_status=System-Status -dashboard.statistic_info=Gitea's Datenbank hat %d Benutzer, %d Organisationen, %d öffentliche Schlüssel, %d Repositories, %d Beobachtungen, %d Favoriten, %d Aktionen, %d Zugriffe, %d Issues, %d Kommentare, %d Konten sozialer Netzwerke, %d Gefolgte, %d Mirrors, %d Releases, %d Login-Quellen, %d Webhooks, %d Meilensteine, %d Label, %d Hook-Tasks, %d Teams, %d Aktualisierungs-Tasks, %d Anhänge. +dashboard.statistic_info=Giteas Datenbank hat %d Benutzer, %d Organisationen, %d öffentliche Schlüssel, %d Repositorys, %d Beobachtungen, %d Favoriten, %d Aktionen, %d Zugriffe, %d Issues, %d Kommentare, %d Konten sozialer Netzwerke, %d Gefolgte, %d Mirrors, %d Releases, %d Login-Quellen, %d Webhooks, %d Meilensteine, %d Label, %d Hook-Tasks, %d Teams, %d Aktualisierungs-Tasks, %d Anhänge. dashboard.operation_name=Name der Operation dashboard.operation_switch=Wechseln dashboard.operation_run=Ausführen @@ -1283,7 +1283,7 @@ dashboard.git_gc_repos=Garbage-Collection auf Repositories ausführen dashboard.git_gc_repos_success=Alle Repositories haben Garbage-Collection beendet. dashboard.resync_all_sshkeys=„.ssh/authorized_keys“-Datei mit Gitea-SSH-Keys neu schreiben. (Wenn Du den eingebauten SSH-Server nutzt, musst du das nicht ausführen.) dashboard.resync_all_sshkeys_success=Alle von Gitea verwalteten öffentlichen Schlüssel wurden neu geschrieben. -dashboard.resync_all_hooks=Synchronisiere „pre-receive“-, „update“- und „post-receive“-Hooks für alle Repositorys erneut. +dashboard.resync_all_hooks=Synchronisiere „pre-receive“-, „update“- und „post-receive“-Hooks für alle Repositories erneut. dashboard.resync_all_hooks_success=Alle „pre-receive“-, „update“- und „post-receive“-Repository-Hooks wurden erneut synchronisiert. dashboard.reinit_missing_repos=Alle Git-Repositories mit Einträgen neu einlesen dashboard.reinit_missing_repos_success=Alle verlorenen Git-Repositories mit existierenden Einträgen wurden erfolgreich aktualisiert. @@ -1331,13 +1331,13 @@ users.created=Registriert am users.last_login=Letzte Anmeldung users.never_login=Hat sich noch nie eingeloggt users.send_register_notify=Benutzer-Registrierungsbenachrichtigung senden -users.new_success=Der Account '%s' wurde erstellt. +users.new_success=Der Account „%s“ wurde erstellt. users.edit=Bearbeiten users.auth_source=Authentifizierungsquelle users.local=Lokal users.auth_login_name=Anmeldename zur Authentifizierung users.password_helper=Passwort leerlassen, um es nicht zu verändern. -users.update_profile_success=Der Account '%s' wurde aktualisiert. +users.update_profile_success=Der Account „%s“ wurde aktualisiert. users.edit_account=Benutzerkonto bearbeiten users.max_repo_creation=Maximale Anzahl Repositories users.max_repo_creation_desc=(Gib -1 ein, um das globale Standardlimit zu verwenden.) @@ -1384,7 +1384,7 @@ auths.host=Host auths.port=Port auths.bind_dn=DN binden auths.bind_password=Passwort binden -auths.bind_password_helper=Achtung: Das Passwort wird im Klartext gespeichert. Benutze wenn möglich einen Account mit nur Lesezugriff. +auths.bind_password_helper=Achtung: Das Passwort wird im Klartext gespeichert. Benutze, wenn möglich, einen Account, der nur über Lesezugriff verfügt. auths.user_base=Basis für Benutzersuche auths.user_dn=Benutzer-DN auths.attribute_username=Benutzernamens-Attribut @@ -1427,7 +1427,7 @@ auths.tip.facebook=Erstelle eine neue Anwendung auf https://developers.facebook. auths.tip.github=Erstelle unter https://github.com/settings/applications/new eine neue OAuth-Anwendung. auths.tip.gitlab=Erstelle unter https://gitlab.com/profile/applications eine neue Anwendung. auths.tip.google_plus=Du erhältst die OAuth2-Client-Zugangsdaten in der Google-API-Konsole unter https://console.developers.google.com/ -auths.tip.openid_connect=Benutze die OpenID Connect Discovery URL (/.well-known/openid-configuration) als Endpunkt. +auths.tip.openid_connect=Benutze die OpenID-Connect-Discovery-URL (/.well-known/openid-configuration), um die Endpunkte zu spezifizieren auths.tip.twitter=Gehe auf https://dev.twitter.com/apps, erstelle eine Anwendung und stelle sicher, dass die Option „Allow this application to be used to Sign in with Twitter“ aktiviert ist auths.edit=Authentifikationsquelle bearbeiten auths.activated=Diese Authentifikationsquelle ist aktiviert @@ -1584,13 +1584,13 @@ notices.delete_success=Diese Systemmeldung wurde gelöscht. create_repo=hat das Repository %s erstellt rename_repo=hat das Repository von %[1]s zu %[3]s umbenannt commit_repo=hat auf %[3]s in %[4]s gepusht -create_issue=`hat den Issue %s#%[2]s geöffnet` -close_issue=`hat den Issue %s#%[2]s geschlossen` -reopen_issue=`hat den Issue %s#%[2]s wieder geöffnet` +create_issue=`hat das Issue %s#%[2]s geöffnet` +close_issue=`hat das Issue %s#%[2]s geschlossen` +reopen_issue=`hat das Issue %s#%[2]s erneut geöffnet` create_pull_request=`hat den Pull-Request %s#%[2]s erstellt` close_pull_request=`hat den Pull-Request %s#%[2]s geschlossen` reopen_pull_request=`hat den Pull-Request %s#%[2]s wieder geöffnet` -comment_issue=`hat den Issue %s#%[2]s kommentiert` +comment_issue=`hat das Issue %s#%[2]s kommentiert` merge_pull_request=`hat den Pull-Request %s#%[2]s zusammengeführt` transfer_repo=hat Repository %s transferiert an %s push_tag=hat Tag %[2]s auf %[3]s gepusht @@ -1640,7 +1640,7 @@ mark_all_as_read=Alle als gelesen markieren [gpg] error.extract_sign=Die Signatur konnte nicht extrahiert werden error.generate_hash=Es konnte kein Hash vom Commit generiert werden -error.no_committer_account=Es ist kein Benutzerkonto mit der E-Mail-Adresse des Committers verbunden +error.no_committer_account=Es ist kein Account mit der E-Mail-Adresse des Committers verbunden error.no_gpg_keys_found=Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden error.not_signed_commit=Kein signierter Commit error.failed_retrieval_gpg_keys=Fehler beim Abrufen eines Keys des Commiter-Kontos diff --git a/options/locale/locale_es-ES.ini b/options/locale/locale_es-ES.ini index cb9c47a2b..44deec04a 100644 --- a/options/locale/locale_es-ES.ini +++ b/options/locale/locale_es-ES.ini @@ -1,11 +1,15 @@ +app_desc=Un servicio de Git auto alojado y sin complicaciones home=Inicio dashboard=Panel de control explore=Explorar help=Ayuda sign_in=Iniciar sesión +sign_in_with=Iniciar sesión con sign_out=Cerrar sesión +sign_up=Registro link_account=Vincular Cuenta +link_account_signin_or_signup=Inicia sesión con credenciales existentes para vincular tu cuenta a esta cuenta. O registra una nueva. register=Registro website=Página web version=Versión @@ -13,12 +17,27 @@ page=Página template=Plantilla language=Idioma notifications=Notificaciones +create_new=Crear… +user_profile_and_more=Perfil y ajustes… signed_in_as=Identificado como +enable_javascript=Este sitio web funciona mejor con JavaScript. username=Nombre de usuario +email=Correo electrónico password=Contraseña +re_type=Vuelva a escribir la contraseña +captcha=CAPTCHA +twofa=Autenticación de dos factores passcode=Contraseña +u2f_insert_key=Inserte su clave de seguridad +u2f_use_twofa=Use un código de dos factores de su celular +u2f_error=No podemos leer su llave de seguridad! +u2f_unsupported_browser=Su navegador no soporta llaves U2F. Por favor utilicé otro navegador. +u2f_error_1=Un error desconocido ha ocurrido. Por favor vuelva a intentarlo. +u2f_error_2=Por favor asegúrese de que está utilizando una conexión cifrada (https://) y que esta visitando la dirección URL correcta. +u2f_error_3=El servidor no pudo procesar su petición. +u2f_reload=Recargar repository=Repositorio organization=Organización @@ -31,6 +50,9 @@ new_org=Nueva organización manage_org=Administrar organizaciones account_settings=Configuraciones de la cuenta settings=Configuraciones +your_profile=Perfil +your_starred=Destacado +your_settings=Configuración all=Todos sources=Fuentes @@ -46,29 +68,64 @@ cancel=Cancelar [install] install=Instalación +title=Configuración inicial +docker_helper=Si esta ejecutando Gitea dentro de un contenedor Docker, por favor lea la documentaciónn antes de realizar cambios a la configuración. +requite_db_desc=Gitea requiere una base de datos MySQL, PostgreSQL, MSSQL, SQLite3 o TiDB. db_title=Configuración de base de datos db_type=Tipo de base de datos host=Servidor +user=Nombre de usuario password=Contraseña db_name=Nombre de la base de datos +db_helper=Nota para usuarios de la base de datos MySQL: por favor use el motor InnoDB y el esquema de caracteres 'utf8_general_ci'. +ssl_mode=SSL path=Ruta +general_title=Configuración general +app_name=Título del Sitio +app_name_helper=Puedes colocar aquí el nombre de tu empresa. repo_path=Ruta del repositorio de Raiz (Root) +run_user=Ejecutar como usuario +domain=Dominio del servidor SSH log_root_path=Ruta del registro optional_title=Configuración opcional +email_title=Configuración de Correo smtp_host=Servidor SMTP +mailer_user=Nombre de usuario SMTP +mailer_password=Contraseña SMTP +offline_mode=Habilitar autenticación Local +disable_gravatar=Desactivar Gravatar federated_avatar_lookup_popup=Habilitar búsqueda de avatares federador para usar el servicio federado de código abierto basado en libravatar. +enable_captcha=Activar CAPTCHA enable_captcha_popup=Requerir CAPTCHA para auto-registro de usuario. +require_sign_in_view=Debes iniciar sesión para ver las páginas admin_password=Contraseña confirm_password=Confirmar Contraseña +admin_email=Correo electrónico install_btn_confirm=Instalar Gitea test_git_failed=Fallo al probar el comando 'git': %v +invalid_db_setting=La configuración de la base de datos no es válida: %v +invalid_repo_path=La ruta de la raíz del repositorio no es válida: %v +run_user_not_match=El nombre de usuario 'ejecutar como' no es el nombre actual de usuario: %s -> %s save_config_failed=Error al guardar la configuración: %v +invalid_admin_setting=La configuración de la cuenta de administración no es válida: %v +install_success=¡Bienvenido! Gracias por elegir Gitea. ¡Diviértete y cuidate! +invalid_log_root_path=La ruta para los registros no es válida: %v +default_keep_email_private=Ocultar direcciones de correo electrónico por defecto +default_keep_email_private_popup=Ocultar direcciones de correo electrónico de nuevas cuentas de usuario por defecto. +default_allow_create_organization=Permitir la creación de organizaciones por defecto +default_allow_create_organization_popup=Permitir crear organizaciones a las nuevas cuentas de usuario de forma predeterminada. +default_enable_timetracking=Activar el seguimiento de tiempo por defecto +default_enable_timetracking_popup=Activar el seguimiento de tiempo para nuevos repositorios por defecto. +no_reply_address=Dominio de correos electrónicos ocultos [home] +uname_holder=Nombre de usuario o correo electrónico password_holder=Contraseña switch_dashboard_context=Cambiar el contexto del Dashboard +my_repos=Repositorios +show_more_repos=Mostrar más repositorios… collaborative_repos=Repositorios colaborativos my_orgs=Mis organizaciones my_mirrors=Mis réplicas @@ -81,28 +138,46 @@ repos=Repositorios users=Usuarios organizations=Organizaciones search=Buscar +code=Código +repo_no_results=No se ha encontrado ningún repositorio coincidente. +user_no_results=No se ha encontrado ningún usuario coincidente. +org_no_results=No se ha encontrado ninguna organización coincidente. +code_no_results=No se ha encontrado código de fuente que coincida con su término de búsqueda. +code_search_results=Resultados de búsqueda para '%s' [auth] +create_new_account=Registrar una cuenta register_helper_msg=¿Ya tienes una cuenta? ¡Inicia sesión! +social_register_helper_msg=¿Ya tienes una cuenta? ¡Enlázala! +disable_register_prompt=Registro deshabilitado. Por favor, póngase en contacto con el administrador del sitio. +disable_register_mail=Correo electrónico de confirmación de registro deshabilitado. remember_me=Recuérdame forgot_password_title=He olvidado mi contraseña forgot_password=¿Has olvidado tu contraseña? +sign_up_now=¿Necesitas una cuenta? Regístrate ahora. confirmation_mail_sent_prompt=Un nuevo correo de confirmación se ha enviado a %s. Comprueba tu bandeja de entrada en las siguientes %s para completar el registro. reset_password_mail_sent_prompt=Un correo de confirmación se ha enviado a %s. Comprueba tu bandeja de entrada en las siguientes %s para completar el reinicio de contraseña. active_your_account=Activa tu cuenta +prohibit_login=Ingreso prohibido +prohibit_login_desc=Su cuenta tiene prohibido ingresar al sistema. Por favor contacte con el administrador del sistema. +resent_limit_prompt=Ya ha solicitado recientemente un correo de activación. Por favor, espere 3 minutos y vuelva a intentarlo. has_unconfirmed_mail=Hola %s, tu correo electrónico (%s) no está confirmado. Si no has recibido un correo de confirmación o necesitas que lo enviemos de nuevo, por favor, haz click en el siguiente botón. resend_mail=Haz click aquí para reenviar tu correo electrónico de activación email_not_associate=Esta dirección de correo electrónico no esta asociada a ninguna cuenta. send_reset_mail=Haz clic aquí para reenviar tu email de restauración de contraseña reset_password=Restablecer su contraseña +invalid_code=Su código de confirmación no es válido o ha caducado. reset_password_helper=Haga Clic aquí para restablecer su contraseña +non_local_account=Los usuarios no locales no pueden actualizar su contraseña a través de la interfaz web de Gitea. verify=Verificar twofa_scratch_used=Ya has utilizado el código. Has sido redirigido a la página de configuración de dos factores poder remover la inscripción del dispositivo o generar un nuevo código. twofa_scratch_token_incorrect=El código cero es incorrecto. +login_userpass=Iniciar sesión login_openid=OpenID openid_connect_submit=Conectar openid_connect_title=Accede con una cuenta existente openid_register_title=Crear una nueva cuenta +disable_forgot_password_mail=El restablecimiento de contraseña está desactivado. Por favor, contacte con el administrador del sitio. [mail] activate_account=Por favor, active su cuenta @@ -114,12 +189,14 @@ register_notify=¡Bienvenido a Gitea [modal] yes=Sí no=No +modify=Actualizar [form] UserName=Nombre de usuario RepoName=Nombre del repositorio Email=Dirección de correo electrónico Password=Contraseña +Retype=Vuelva a escribir la contraseña SSHTitle=Nombre de la Clave de SSH HttpsUrl=URL HTTPS PayloadUrl=URL de carga @@ -135,6 +212,7 @@ TreeName=Ruta del archivo Content=Contenido require_error=` no puede estar vacío.` +alpha_dash_error=` solo debe contener caracteres alfanuméricos, guiones medios ('-') y guiones bajos ('_').` size_error=` debe ser de tamaño %s.` min_size_error=` debe contener al menos %s caracteres.` max_size_error=` debe contener como máximo %s caracteres.` @@ -142,7 +220,10 @@ email_error=` no es una dirección de correo válida.` url_error=` no es una URL válida.` include_error=` debe contener la subcadena '%s'.` unknown_error=Error desconocido: +captcha_incorrect=El código CAPTCHA no es correcto. +password_not_match=Las contraseñas no coinciden. +username_been_taken=El nombre de usuario ya está en uso. user_not_exist=Este usuario no existe. auth_failed=Autenticación fallo: %v @@ -248,6 +329,7 @@ fork_from=Crear un Fork desde repo_desc=Descripción repo_lang=Idioma license=Licencia +auto_init=Inicializar el repositorio (añade .gitignore, licencia y README) create_repo=Crear repositorio default_branch=Rama por defecto mirror_prune=Purgar @@ -343,8 +425,8 @@ issues.label_templates.helper=Seleccionar un conjunto de etiquetas issues.label_templates.fail_to_load_file=Error al cargar el archivo de plantilla de etiqueta '%s': %v issues.add_label_at=añadida la etiqueta
%s
%s issues.remove_label_at=eliminada la etiqueta
%s
%s -issues.add_milestone_at=`agregado esto al %s hito %s ' -issues.change_milestone_at=` modificó el hito de %s to %s %s` +issues.add_milestone_at=`ha añadido esto al hito %s %s ' +issues.change_milestone_at=`modificó el hito de %s a %s %s` issues.remove_milestone_at=`eliminado esto del %s hito %s ' issues.deleted_milestone=`(eliminado)` issues.self_assign_at=`auto asignado este %s` @@ -411,6 +493,8 @@ issues.attachment.open_tab='Haga clic para ver "%s" en una pestaña nueva' issues.attachment.download=`Haga clic para descargar "%s"` issues.subscribe=Suscribir issues.unsubscribe=Desuscribirse +issues.start_tracking_short=Iniciar +issues.start_tracking_history=`ha empezado a trabajar %s` issues.tracking_already_started='Ya has comenzado el tiempo de seguimiento en este tema!' issues.add_time_hours=Horas issues.add_time_minutes=Minutos @@ -461,6 +545,8 @@ wiki.page_already_exists=Ya existe una página con el mismo nombre. wiki.pages=Páginas wiki.last_updated=Última actualización %s +activity=Actividad +activity.period.filter_label=Periodo: activity.period.daily=1 día activity.period.halfweekly=3 días activity.period.weekly=1 semana @@ -503,6 +589,7 @@ settings.new_owner_has_same_repo=El nuevo propietario tiene un repositorio con e settings.transfer=Transferir la propiedad settings.delete=Eliminar este repositorio settings.delete_notices_1=- Esta operación NO PUEDE revertirse. +settings.delete_notices_fork_1=Los forks de este repositorio serán independientes después de eliminarlo. settings.transfer_owner=Nuevo Propietario settings.add_webhook=Añadir Webhook settings.webhook.test_delivery=Test de entrega @@ -531,6 +618,7 @@ settings.deploy_keys=Claves de Despliegue settings.add_deploy_key=Añadir Clave de Despliegue settings.title=Título settings.deploy_key_content=Contenido +settings.protect_merge_whitelist_committers_desc=Permitir a los usuarios o equipos de la lista a fusionar peticiones pull dentro de esta rama. settings.add_protected_branch=Activar protección settings.delete_protected_branch=Desactivar protección @@ -574,6 +662,7 @@ branch.create_from=desde '%s' branch.branch_already_exists=La rama '%s' ya existe en este repositorio. branch.deleted_by=Eliminada por %s +topic.done=Hecho [org] org_name_holder=Nombre de la organización @@ -613,6 +702,7 @@ teams.join=Unirse teams.leave=Abandonar teams.read_access=Acceso de Lectura teams.write_access=Acceso de Escritura +teams.admin_access_helper=Los miembros pueden hacer pull y push a los repositorios del equipo y añadir colaboradores a ellos. teams.no_desc=Este equipo no tiene descripción teams.settings=Configuración teams.members=Miembros del equipo @@ -640,6 +730,7 @@ dashboard.operation_run=Ejecutar dashboard.clean_unbind_oauth_success=Se han eliminado las conexiones de OAuth no vinculadas. dashboard.delete_inactivate_accounts=Eliminar todas las cuentas inactivas dashboard.delete_inactivate_accounts_success=Todas las cuentas inactivas han sido eliminadas. +dashboard.resync_all_sshkeys=Actualizar el archivo '.ssh/authorized_keys' con las claves SSH de Gitea (no es necesario para el servidor SSH incorporado). dashboard.reinit_missing_repos=Reiniciar todos los repositorios Git faltantes de los que existen registros dashboard.reinit_missing_repos_success=Todos los repositorios Git faltantes para los que existen registros se han reinicializado. dashboard.server_uptime=Tiempo de actividad del servidor @@ -859,6 +950,7 @@ file_too_big=El tamaño del archivo ({{filesize}} MB) excede el tamaño máximo remove_file=Eliminar archivo [notification] +notifications=Notificaciones unread=Sin leer read=Leídas mark_as_read=Marcar como leído diff --git a/options/locale/locale_fi-FI.ini b/options/locale/locale_fi-FI.ini index 0d49ff4b3..fe34f0e58 100644 --- a/options/locale/locale_fi-FI.ini +++ b/options/locale/locale_fi-FI.ini @@ -1,10 +1,15 @@ +app_desc=Ongelmaton, itsehostattu Git-palvelu home=Etusivu dashboard=Kojelauta explore=Tutki help=Apua sign_in=Kirjaudu sisään +sign_in_with=Kirjaudu sisään tunnuksilla sign_out=Kirjaudu ulos +sign_up=Rekisteröidy +link_account=Yhdistä tili +link_account_signin_or_signup=Kirjaudu sisään olemassaolevilla tunnuksilla yhdistääksesi tilisi käyttäjätunnukseen. Tai rekisteröi uusi käyttäjätunnus. register=Rekisteröidy website=Nettisivut version=Versio @@ -12,10 +17,18 @@ page=Sivu template=Malli language=Kieli notifications=Ilmoitukset +create_new=Luo… +user_profile_and_more=Profiili ja asetukset… signed_in_as=Kirjautuneena käyttäjänä +enable_javascript=Tämä sivusto toimii paremmin JavaScriptillä. username=Käyttäjätunnus +email=Sähköpostiosoite password=Salasana +re_type=Kirjoita salasana uudelleen +captcha=CAPTCHA +twofa=Kaksivaiheinen todennus +twofa_scratch=Kaksivaiheinen kertakäyttöinen koodi passcode=Tunnuskoodi @@ -25,11 +38,21 @@ mirror=Peili new_repo=Uusi repo new_migrate=Uusi migraatio new_mirror=Uusi peilaus +new_fork=Uusi repositorio new_org=Uusi organisaatio manage_org=Ylläpidä organisaatioita +admin_panel=Sivuston ylläpito account_settings=Tilin asetukset settings=Asetukset +your_profile=Profiili +your_starred=Tähdelliset +your_settings=Asetukset +all=Kaikki +sources=Lähteet +mirrors=Peilit +collaborative=Yhteistyössä +forks=Haarat activities=Toimet pull_requests=Pull requestit @@ -39,19 +62,60 @@ cancel=Peruuta [install] install=Asennus +title=Alkuperäiset asetukset +docker_helper=Jos ajat Giteaa Dockerissa, tutustuthan dokumentaatioon ennen asetusten muuttamista. +requite_db_desc=Gitea tarvitsee toimiakseen MySQL-, PostgreSQL-, MSSQL-, SQLite3 tai TiDB-tietokannan. db_title=Tietokanta asetukset db_type=Tietokanta tyyppi host=Isäntä +user=Käyttäjätunnus password=Salasana db_name=Tietokannan nimi +db_helper=Huomio MySQL-käyttäjille: käytäthän InnoDB-kantamoottoria ja 'utf8_general_ci'-merkistöä. +ssl_mode=SSL path=Polku +sqlite_helper=Tiedostopolku SQLite3- tai TiDB-tietokantaan.
Kirjoita absoluuttinen polku, jos ajat Giteaa palveluna. +err_empty_db_path=SQLite3- tai TiDB-tietokantapolku ei voi olla tyhjä. +err_invalid_tidb_name=TiDB-tietokannan nimi ei voi sisältää '.'- tai '-'-merkkejä. +no_admin_and_disable_registration=Et voi kytkeä rekisteröintiä pois luomatta sitä ennen ylläpitotiliä. +err_empty_admin_password=Ylläpitäjän salasana ei voi olla tyhjä. +general_title=Yleiset asetukset +app_name=Sivuston otsikko repo_path=Repon juuren polku +repo_path_helper=Muualla olevat git-repositoriot tullaan tallentamaan tähän kansioon. +lfs_path=Git LFS -juuripolku +lfs_path_helper=Git LFS:n ylläpitämät tiedostot tullaan tallentamaan tähän hakemistoon. Jätä tyhjäksi kytkeäksesi toiminnon pois. +run_user=Aja käyttäjänä +run_user_helper=Anna käyttäjätunnus, jona Giteaa ajetaan. Käyttäjällä on oltava oikeudet repositorioiden juuripolkuun. +domain=SSH-palvelimen osoite (hostname) +domain_helper=Domain tai osoite SSH-klooniosoitteille. +ssh_port=SSH-palvelimen portti +ssh_port_helper=Porttinumero, jossa SSH-palvelimesi kuuntelee. Jätä tyhjäksi kytkeäksesi pois. +http_port=Gitean HTTP-kuunteluportti +http_port_helper=Portti, jossa Gitean web-palvelin kuuntelee. +app_url=Gitean juuriosoite +app_url_helper=Juuriosoite HTTP(S)-klooniosoitteille ja sähköpostimuistutuksille. log_root_path=Lokin polku +log_root_path_helper=Lokitiedostot kirjoitetaan tähän kansioon. optional_title=Valinnaiset asetukset +email_title=Sähköpostiasetukset smtp_host=SMTP isäntä +smtp_from=Lähetä sähköpostit osoitteella +smtp_from_helper=Sähköpostiosoite, jota Gitea käyttää. Kirjoita osoite ”nimi” -muodossa. +mailer_user=SMTP-käyttäjätunnus +mailer_password=SMTP-salasana +register_confirm=Vaadi sähköpostin vahvistaminen rekisteröintiin +mail_notify=Ota käyttöön sähköpostiilmoitukset +server_service_title=Palvelin ja kolmansien osapuolten palveluiden asetukset +offline_mode=Ota käyttöön lokaali tila +offline_mode_popup=Poista kolmannen osapuolen sisällöstä jakeluverkot ja tarjoa kaikki resurssit paikallisesti. +disable_gravatar=Poista Gravatar käytöstä +disable_gravatar_popup=Poista Gravatar ja kolmannen osapuolen avaratir käytöstä. Oletus-avatar näytetään, ellei käyttäjä ole ladannut omaansa. +federated_avatar_lookup=Käytä ulkopuolisia profiilikuvia federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. +disable_registration=Poista rekisteröinti käytöstä enable_captcha_popup=Pakollinen captcha käyttäjän itse rekisteröityessä. admin_password=Salasana confirm_password=Varmista salasana @@ -73,32 +137,69 @@ repos=Repot users=Käyttäjät organizations=Organisaatiot search=Hae +code_no_results=Hakuehtoasi vastaavaa lähdekoodia ei löytynyt. +code_search_results=Hakutulokset: '%s ' [auth] +create_new_account=Rekisteröi tili register_helper_msg=On jo tili? Kirjaudu sisään nyt! +social_register_helper_msg=Onko sinulla jo tili? Linkitä se nyt! +disable_register_prompt=Rekisteröinti on estetty. Ota yhteys ylläpitäjääsi. +disable_register_mail=Sähköpostivahvistus rekisteröinnille on estetty. remember_me=Muista minut +forgot_password_title=Unohtuiko salasana +forgot_password=Unohtuiko salasana? +sign_up_now=Tarvitsetko tilin? Rekisteröidy nyt. +confirmation_mail_sent_prompt=Uusi varmistussähköposti on lähetetty osoitteeseen %s, ole hyvä ja tarkista saapuneet seuraavan %s tunnin sisällä saadaksesi rekisteröintiprosessin valmiiksi. +reset_password_mail_sent_prompt=Varmistussähköposti on lähetetty osoitteeseen %s, ole hyvä ja tarkista saapuneet seuraavan %s tunnin sisällä saadaksesi salasananvaihdon valmiiksi. active_your_account=Aktivoi tilisi +prohibit_login=Kirjautuminen estetty +prohibit_login_desc=Käyttäjätilisi kirjautuminen on estetty. Ota yhteys sivuston ylläpitäjään. +resent_limit_prompt=Olet jo tilannut aktivointisähköpostin hetki sitten. Ole hyvä ja odota 3 minuuttia ja yritä sitten uudelleen. has_unconfirmed_mail=Hei %s, sinulla on varmistamaton sähköposti osoite (%s). Jos et ole saanut varmistus sähköpostia tai tarvitset uudelleenlähetyksen, ole hyvä ja klikkaa allaolevaa painiketta. resend_mail=Klikkaa tästä uudelleenlähettääksesi aktivointi sähköpostisi +email_not_associate=Tätä sähköpostiosoitetta ei ole liitetty mihinkään tiliin. +send_reset_mail=Klikkaa tästä (uudelleen) lähettääksesi salasanan nollaussähköpostin reset_password=Nollaa salasanasi +invalid_code=Vahvistusavain on virheellinen tai vanhentunut. reset_password_helper=Klikkaa tästä nollataksesi salasanasi +non_local_account=Ei-lokaalit käyttäjät eivät voi päivittää salasanojaan Gitean web-käyttöliittymän kautta. verify=Vahvista +scratch_code=Kertakäyttökoodi +use_scratch_code=Käytä kertakäyttökoodia +twofa_scratch_used=Olet käyttänyt kertakäyttökoodisi. Sinut on uudelleenohjattu kaksivaiheisen kirjautumisen asetussivulle, jotta voit kytkeä sen pois tai luoda uuden kertakäyttökoodin. +twofa_passcode_incorrect=Salasanasi on väärä. Jos olet hukannut laitteesi, käytäthän kertakäyttökoodia sisäänkirjautumiseen. +twofa_scratch_token_incorrect=Kertakäyttökoodisi on virheellinen. +login_userpass=Kirjaudu sisään +login_openid=OpenID +openid_connect_submit=Connect +openid_connect_title=Yhdistä olemassaolevaan tiliin +openid_connect_desc=Valittu OpenID-osoite on tuntematon. Liitä se uuteen tiliin täällä. +openid_register_title=Luo uusi tili +openid_register_desc=Valittu OpenID-osoite on tuntematon. Liitä se uuteen tiliin täällä. +openid_signin_desc=Anna OpenID-osoitteesi. Esimerkiksi: https://anne.me, bob.openid.org.cn tai gnusocial.net/carry. +disable_forgot_password_mail=Salasanan nollaus on estetty. Ota yhteys ylläpitäjääsi. [mail] activate_account=Ole hyvä ja aktivoi tilisi activate_email=Vahvista sähköpostiosoitteesi reset_password=Tyhjennä salasana +register_success=Rekisteröinti onnistui +register_notify=Tervetuloa Giteaan [modal] yes=Kyllä no=Ei +modify=Päivitys [form] UserName=Käyttäjätunnus RepoName=Repon nimi Email=Sähköposti osoite Password=Salasana +Retype=Kirjoita salasana uudelleen SSHTitle=SSH avain nimi +HttpsUrl=HTTPS-osoite TeamName=Tiimin nimi AuthName=Luvan nimi AdminEmail=Ylläpito sähköposti diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index 50e90b96f..0870d82ac 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -1,11 +1,15 @@ +app_desc=Un service Git auto-hébergé sans prise de tête home=Accueil dashboard=Tableau de bord explore=Explorateur help=Aide sign_in=Connexion +sign_in_with=Se connecter avec sign_out=Déconnexion +sign_up=S'inscrire link_account=Lier un Compte +link_account_signin_or_signup=Connectez-vous avec vos identifiants pour lier votre compte existant et ce nouveau compte, ou créez un nouveau compte. register=S'inscrire website=Site web version=Version @@ -13,12 +17,32 @@ page=Page template=Modèle language=Langue notifications=Notifications +create_new=Créer… +user_profile_and_more=Profil et réglages… signed_in_as=Connecté en tant que +enable_javascript=Ce site fonctionne mieux avec JavaScript. username=Nom d'utilisateur +email=Adresse e-mail password=Mot de passe +re_type=Confirmez le mot de passe +captcha=CAPTCHA +twofa=Authentification à deux facteurs +twofa_scratch=Code de secours pour l'authentification à deux facteurs passcode=Code d'accès +u2f_insert_key=Insérez votre clef de sécurité +u2f_sign_in=Appuyez sur le bouton de votre clef de sécurité. Si vous ne voyez pas de bouton, ré-insérez là. +u2f_press_button=Veuillez appuyer sur le bouton de votre clef de sécurité… +u2f_use_twofa=Utilisez l'authentification à deux facteurs avec votre téléphone +u2f_error=Nous ne pouvons pas lire votre clé de sécurité ! +u2f_unsupported_browser=Votre navigateur n'est pas compatible avec les clefs U2F. Veuillez réessayer avec un autre navigateur. +u2f_error_1=Une erreur inconnue s'est produite. Veuillez réessayer. +u2f_error_2=Veuillez vous assurer que vous utilisez une connexion chiffrée (https) et que vous visitez la bonne adresse. +u2f_error_3=Le serveur n'a pas pu répondre à votre requête. +u2f_error_4=Cette clef n'est pas compatible avec votre requête. Si vous êtes en train de l'enregistrer, veuillez vous assurer que cette clef n'est pas déjà enregistrée. +u2f_error_5=Le délai d'attente imparti a été atteint avant que votre clef ne puisse être lue. Veuillez recharger la page pour réessayer. +u2f_reload=Recharger repository=Dépôt organization=Organisation @@ -29,8 +53,12 @@ new_mirror=Nouveau miroir new_fork=Nouveau Fork new_org=Nouvelle organisation manage_org=Gérer les organisations +admin_panel=Administration du site account_settings=Paramètres du compte settings=Paramètres +your_profile=Profil +your_starred=Favoris +your_settings=Configuration all=Tous sources=Sources @@ -46,34 +74,107 @@ cancel=Annuler [install] install=Installation +title=Configuration initiale +docker_helper=Si vous utilisez Gitea avec Docker, veuillez lire la documentation avant de modifier les paramètres. +requite_db_desc=Gitea requiert MySQL, PostgreSQL, MSSQL, SQLite3 ou TiDB. db_title=Paramètres de la base de données db_type=Type de base de données host=Hôte +user=Nom d'utilisateur password=Mot de passe db_name=Nom de base de données +db_helper=Note aux utilisateurs de MySQL : veuillez utiliser le moteur de stockage InnoDB et le jeu de caractères 'utf8_general_ci'. +ssl_mode=SSL path=Emplacement +sqlite_helper=Chemin d'accès pour la base de données SQLite3 ou TiDB.
Entrer un chemin absolu si vous exécutez Gitea en tant que service. +err_empty_db_path=Le chemin de la base de données SQLite3 ou TiDB ne peut être vide. +err_invalid_tidb_name=Le nom de la base de données TiDB ne peut pas contenir les caractères '.' et '-'. +no_admin_and_disable_registration=Vous ne pouvez pas désactiver la création de nouveaux utilisateurs avant d'avoir créé un compte administrateur. +err_empty_admin_password=Le mot de passe administrateur ne peut pas être vide. +general_title=Configuration générale +app_name=Titre du site +app_name_helper=Entrez ici le nom de votre société. repo_path=Emplacement racine des dépôts +repo_path_helper=Les dépôts Git distants seront stockés dans ce répertoire. +lfs_path=Répertoire racine Git LFS +lfs_path_helper=Les fichiers suivis par Git LFS seront stockés dans ce dossier. Laissez vide pour désactiver LFS. +run_user=Exécuter avec le compte d'un autre utilisateur +run_user_helper=Veuillez entrer le nom d'utilisateur système exécutant Gitea. Cet utilisateur doit avoir accès au dossier racine des dépôts. +domain=Domaine du serveur SSH +domain_helper=Domaine ou adresse de l'hôte pour les URLs de clonage par SSH. +ssh_port=Port du serveur SSH +ssh_port_helper=Port d'écoute du serveur SSH. Laissez le vide pour le désactiver. +http_port=Port d'écoute HTTP de Gitea +http_port_helper=Port sur lequel le serveur web Gitea attendra des requêtes. +app_url=URL de base de Gitea +app_url_helper=Adresse HTTP(S) de base pour les clones git et les notifications par e-mail. log_root_path=Chemin des fichiers log +log_root_path_helper=Les fichiers de journalisation seront écrits dans ce répertoire. optional_title=Paramètres facultatifs +email_title=Paramètres E-mail smtp_host=Hôte SMTP +smtp_from=Envoyer les e-mails en tant que +smtp_from_helper=Adresse e-mail utilisée par Gitea. Veuillez entrer votre e-mail directement ou sous la forme . +mailer_user=Utilisateur SMTP +mailer_password=Mot de passe SMTP +register_confirm=Exiger la confirmation de l'e-mail lors de l'inscription +mail_notify=Activer les notifications par e-mail +server_service_title=Paramètres Serveur et Tierce Parties +offline_mode=Activer le mode hors-ligne +offline_mode_popup=Désactiver l'utilisation de CDNs, et servir toutes les ressources localement. +disable_gravatar=Désactiver Gravatar +disable_gravatar_popup=Désactiver Gravatar et les autres sources d'avatars tierces. Un avatar par défaut sera utilisé pour les utilisateurs n'ayant pas téléversé un avatar personnalisé. +federated_avatar_lookup=Activer les avatars unifiés federated_avatar_lookup_popup=Activer la recherche unifiée d'avatars en utilisant le service open source unifié basé sur libravatar. +disable_registration=Désactiver le formulaire d'inscription +disable_registration_popup=Désactiver les nouvelles inscriptions. Seuls les administrateurs pourront créer de nouveaux comptes utilisateurs. +allow_only_external_registration_popup=N'autoriser l'inscription qu'à partir des services externes. openid_signin=Activer l'inscription OpenID +openid_signin_popup=Activer l'authentification via OpenID. +openid_signup=Activer l'inscription OpenID +openid_signup_popup=Activer l'inscription avec OpenID. +enable_captcha=Activer le CAPTCHA enable_captcha_popup=Demander un Captcha à l'inscription. +require_sign_in_view=Exiger la connexion à un compte pour afficher les pages +require_sign_in_view_popup=Limiter l'accès aux pages aux utilisateurs connectés. Les visiteurs ne verront que les pages de connexion et d'inscription. +admin_setting_desc=La création d'un compte administrateur est facultative. Le premier utilisateur enregistré deviendra automatiquement un administrateur le cas échéant. +admin_title=Paramètres de compte administrateur +admin_name=Nom d’utilisateur administrateur admin_password=Mot de passe confirm_password=Confirmez le mot de passe +admin_email=Adresse e-mail install_btn_confirm=Installer Gitea test_git_failed=Le test de la commande "git" a échoué : %v +sqlite3_not_available=Cette version de Gitea ne supporte pas SQLite3. Veuillez télécharger la version binaire officielle de %s (pas la version 'gobuild'). +invalid_db_setting=Les paramètres de la base de données sont invalides : %v +invalid_repo_path=Le chemin racine du dépôt est invalide : %v +run_user_not_match=Le nom d'utilisateur sous lequel Gitea est configuré n'est pas le nom d'utilisateur courant : %s -> %s save_config_failed=L'enregistrement de la configuration %v a échoué +invalid_admin_setting=Paramètres du compte administrateur invalides : %v +install_success=Bienvenue et merci d'avoir choisi Gitea. Profitez-en bien ! +invalid_log_root_path=Le répertoire des fichiers de journalisation est invalide : %v +default_keep_email_private=Masquer les adresses e-mail par défaut +default_keep_email_private_popup=Masquer les adresses e-mail des nouveaux comptes utilisateurs par défaut. +default_allow_create_organization=Autoriser la création d'organisations par défaut +default_allow_create_organization_popup=Permettre aux nouveaux comptes utilisateurs de créer des organisations par défaut. +default_enable_timetracking=Activer le suivi de temps par défaut +default_enable_timetracking_popup=Activer le suivi du temps pour les nouveaux dépôts par défaut. +no_reply_address=Domaine pour les e-mails cachés +no_reply_address_helper=Nom de domaine pour les utilisateurs possédant une adresse email cachée. Par exemple, le nom d’utilisateur « joe » sera enregistré dans Git comme « joe@noreply.example.org » si le domaine pour les e-mails cachés a la valeur « noreply.example.org ». [home] +uname_holder=Nom d'utilisateur ou adresse e-mail password_holder=Mot de passe switch_dashboard_context=Basculer le contexte du tableau de bord +my_repos=Dépôts +show_more_repos=Afficher plus de dépôts… collaborative_repos=Dépôts collaboratifs my_orgs=Mes organisations my_mirrors=Mes miroirs view_home=Voir %s +search_repos=Trouver un dépôt … issues.in_your_repos=Dans vos dépôts @@ -82,30 +183,53 @@ repos=Dépôts users=Utilisateurs organizations=Organisations search=Rechercher +code=Code +repo_no_results=Aucun dépôt correspondant n'a été trouvé. +user_no_results=Aucun utilisateur correspondant n'a été trouvé. +org_no_results=Aucune organisation correspondante n'a été trouvée. +code_no_results=Aucun code source correspondant à votre terme de recherche n'a été trouvé. +code_search_results=Résultats de recherche pour "%s [auth] +create_new_account=Créer un compte register_helper_msg=Déjà enregistré ? Connectez-vous ! +social_register_helper_msg=Déjà inscrit ? Connectez-vous ! +disable_register_prompt=Les inscriptions sont désactivées. Veuillez contacter l'administrateur du site. +disable_register_mail=La confirmation par e-mail à l'inscription est désactivée. remember_me=Se souvenir de moi forgot_password_title=Mot de passe oublié forgot_password=Mot de passe oublié ? +sign_up_now=Pas de compte ? Inscrivez-vous maintenant. confirmation_mail_sent_prompt=Un nouveau mail de confirmation a été envoyé à %s. Veuillez vérifier votre boîte de réception dans les prochaines %s pour valider votre enregistrement. reset_password_mail_sent_prompt=Un mail de confirmation a été envoyé à %s. Veuillez vérifier votre boîte de réception dans les prochaines %s pour terminer la réinitialisation du mot de passe. active_your_account=Activer votre compte +prohibit_login=Connexion interdite +prohibit_login_desc=Votre compte n'est pas autorisé à se connecter, contactez l’administrateur du site. +resent_limit_prompt=Désolé, vous avez récemment demandé un e-mail d'activation. Veuillez réessayer dans 3 minutes. has_unconfirmed_mail=Bonjour %s, votre adresse e-mail (%s) n'a pas été confirmée. Si vous n'avez reçu aucun mail de confirmation ou souhaitez renouveler l'envoi, cliquez sur le bouton ci-dessous. resend_mail=Cliquez ici pour renvoyer un mail de confirmation email_not_associate=L'adresse e-mail n'est associée à aucun compte. send_reset_mail=Cliquez ici pour renvoyer le mail de réinitialisation de votre mot de passe reset_password=Réinitialiser le mot de passe +invalid_code=Votre code de confirmation est invalide ou a expiré. reset_password_helper=Cliquez ici pour réinitialiser votre mot de passe +password_too_short=Le mot de passe doit contenir %d caractères minimum. +non_local_account=Les mots de passes des comptes utilisateurs externes ne peuvent pas être modifiées depuis l'interface web Gitea. verify=Vérifier scratch_code=Code de secours use_scratch_code=Utiliser un code de secours twofa_scratch_used=Vous avez utilisé votre code de secours. Vous avez été redirigé vers cette page de configuration afin de supprimer l'authentification à deux facteurs de votre appareil ou afin de générer un nouveau code de secours. +twofa_passcode_incorrect=Votre code d’accès n’est pas correct. Si vous avez égaré votre appareil, utilisez votre code de secours pour vous connecter. twofa_scratch_token_incorrect=Votre code de secours est incorrect. +login_userpass=Connexion login_openid=OpenID openid_connect_submit=Se connecter openid_connect_title=Se connecter à un compte existant +openid_connect_desc=L'URI OpenID choisie est inconnue. Associez-le à un nouveau compte ici. openid_register_title=Créer un nouveau compte +openid_register_desc=L'URI OpenID choisie est inconnue. Associez-le à un nouveau compte ici. +openid_signin_desc=Veuillez entrer votre URI OpenID. Par exemple: https://anne.me, bob.openid.org.cn ou gnusocial.net/charles. +disable_forgot_password_mail=La réinitialisation de mot de passe est désactivée. Veuillez contacter l'administrateur du site. [mail] activate_account=Veuillez activer votre compte @@ -117,12 +241,14 @@ register_notify=Bienvenue sur Gitea [modal] yes=Oui no=Non +modify=Mettre à jour [form] UserName=Nom d'utilisateur RepoName=Nom du dépôt Email=Adresse e-mail Password=Mot de passe +Retype=Retapez le mot de passe SSHTitle=Nom de la clé SSH HttpsUrl=URL HTTPS PayloadUrl=URL des données utiles @@ -138,6 +264,9 @@ TreeName=Chemin du fichier Content=Contenu require_error=` ne peut pas être vide.` +alpha_dash_error=` ne doit contenir que des caractères alphanumériques, des tirets ("-") et des tirets bas (" _ ").` +alpha_dash_dot_error=` ne doit contenir que des caractères alphanumériques, des tirets ("-"), des tirets bas ("_"), et des points. (".").` +git_ref_name_error=` doit être un nom de référence Git bien formé.` size_error=` doit être à la taille de %s.` min_size_error=` %s caractères minimum ` max_size_error=` %s caractères maximum ` @@ -145,70 +274,148 @@ email_error=` adresse e-mail invalide ` url_error=` URL invalide ` include_error=`doit contenir la sous-chaîne '%s'.` unknown_error=Erreur inconnue : +captcha_incorrect=Le code CAPTCHA est incorrect. +password_not_match=Les mots de passe ne correspondent pas. +username_been_taken=Le nom d'utilisateur est déjà pris. +repo_name_been_taken=Ce nom de dépôt est déjà utilisé. +org_name_been_taken=Ce nom d'organisation est déjà pris. +team_name_been_taken=Le nom d'équipe est déjà pris. +team_no_units_error=Autoriser l’accès à au moins une section du dépôt. +email_been_used=Cette adresse e-mail est déjà utilisée. +openid_been_used=Adresse OpenID '%s' déjà utilisée. +username_password_incorrect=Identifiant ou mot de passe invalide. +enterred_invalid_repo_name=Le nom de dépôt saisi est incorrect. +enterred_invalid_owner_name=Le nom du nouveau propriétaire est invalide. +enterred_invalid_password=Le mot de passe saisi est incorrect. user_not_exist=Cet utilisateur n'existe pas. +last_org_owner=Vous ne pouvez pas supprimer le dernier utilisateur de l’équipe « propriétaires ». Il doit y avoir au moins un propriétaire dans chaque équipe. +cannot_add_org_to_team=Une organisation ne peut être ajoutée comme membre d'une équipe. +invalid_ssh_key=Impossible de vérifier votre clé SSH : %s +invalid_gpg_key=Impossible de vérifier votre clé GPG : %s +unable_verify_ssh_key=Impossible de vérifier la clé SSH ; veuillez vérifier que vous n'avez pas fait d'erreur. auth_failed=Échec d'authentification : %v +still_own_repo=Ce compte possède toujours un ou plusieurs dépôts, vous devez d'abord les supprimer ou les transférer. +still_has_org=Votre compte est un membre d’une ou plusieurs organisations, veuillez d'abord les quitter. +org_still_own_repo=Cette organisation possède encore un ou plusieurs dépôts. Vous devez d'abord les supprimer ou les transférer. target_branch_not_exist=La branche cible n'existe pas. [user] +change_avatar=Changer votre avatar… join_on=Inscrit le repositories=Dépôts activity=Activité publique followers=abonnés +starred=Dépôts favoris following=Abonnements follow=Suivre unfollow=Ne plus suivre form.name_reserved=Le nom d’utilisateur "%s" est réservé. +form.name_pattern_not_allowed=%s" n'est pas autorisé dans un nom d'utilisateur. [settings] profile=Profil +account=Compte password=Mot de passe security=Sécurité avatar=Avatar ssh_gpg_keys=Clés SSH / GPG social=Réseaux Sociaux +applications=Applications +orgs=Gérer les organisations repos=Dépôts delete=Supprimer le compte twofa=Authentification à deux facteurs +account_link=Comptes associés +organization=Organisations uid=ID d'Utilisateur +u2f=Clefs de sécurité public_profile=Profil public +profile_desc=Votre adresse e-mail sera utilisée pour les notifications et d'autres opérations. +password_username_disabled=Les utilisateurs externes ne peuvent pas modifier leur nom d'utilisateur. Merci de contacter l'administrateur de votre site pour plus d'informations. full_name=Nom complet website=Site Web location=Localisation update_profile=Valider les modifications update_profile_success=Votre profil a été mis à jour. +change_username=Votre nom d'utilisateur a été modifié. +change_username_prompt=Remarque : changer votre nom d'utilisateur change également l'URL de votre compte. continue=Continuer cancel=Annuler +language=Langues +lookup_avatar_by_mail=Rechercher un avatar par adresse e-mail federated_avatar_lookup=Recherche d'avatars unifiés enable_custom_avatar=Activer l'avatar personnalisé choose_new_avatar=Sélectionner un nouvel avatar +update_avatar=Mise à jour de l'avatar delete_current_avatar=Supprimer l'avatar actuel +uploaded_avatar_not_a_image=Le fichier téléversé n'est pas une image. +update_avatar_success=Votre avatar a été mis à jour. +change_password=Modifier le mot de passe old_password=Mot de passe actuel new_password=Nouveau mot de passe +retype_new_password=Retapez le nouveau mot de passe +password_incorrect=Le mot de passe actuel est incorrect. +change_password_success=Votre mot de passe a été mis à jour. Désormais, connectez-vous avec votre nouveau mot de passe. +password_change_disabled=Les mots de passes des comptes utilisateurs externes ne peuvent pas être modifiées depuis l'interface web Gitea. emails=Adresses e-mail +manage_emails=Gérer les adresses de courriel +manage_openid=Gérer les adresses OpenID email_desc=Votre adresse e-mail principale sera utilisée pour les notifications et d'autres opérations. primary=Principale +primary_email=Faire de cette adresse votre adresse principale +delete_email=Supprimer +email_deletion=Supprimer l'adresse e-mail +email_deletion_desc=L'adresse e-mail et les informations connexes seront retirées de votre compte. Les révisions Git effectués par cette adresse resteront inchangées. Continuer ? +email_deletion_success=L'adresse e-mail a été supprimée. +openid_deletion=Supprimer l'adresse OpenID +openid_deletion_desc=La suppression de cette adresse OpenID vous empêchera de vous y connecter à l'avenir. Souhaitez-vous confirmer ? +openid_deletion_success=L'adresse OpenID a été supprimée. +add_new_email=Ajouter une adresse e-mail +add_new_openid=Ajouter une nouvelle URI OpenID +add_email=Ajouter une adresse e-mail add_openid=Ajouter une URI OpenID +add_email_confirmation_sent=Un email de confirmation a été envoyé à '%s'. Merci de relever votre boite dans les prochaines %s pour confirmer votre adresse. +add_email_success=La nouvelle adresse e-mail a été ajoutée. +add_openid_success=La nouvelle adresse OpenID a été ajoutée. +keep_email_private=Cacher l'adresse e-mail +keep_email_private_popup=Votre adresse e-mail sera cachée aux autres utilisateurs. +openid_desc=OpenID vous permet de confier l'authentification à une tierce partie. manage_ssh_keys=Gérer les clés SSH manage_gpg_keys=Gérer les clés GPG add_key=Ajouter une clé +ssh_desc=Ces clefs SSH publiques sont associées à votre compte. Les clefs privées correspondantes permettent l'accès complet à vos dépôts. +gpg_desc=Ces clefs GPG sont associées avec votre compte. Conservez-les en lieu sûr car elles permettent la vérification de vos révisions. ssh_helper=Besoin d'aide ? Consultez le guide Github pour générer votre clé SSH ou résoudre les problèmes courants que vous pouvez rencontrer en utilisant SSH. gpg_helper=Besoin d'aide ? Consultez le guide Github à propos de GPG. add_new_key=Ajouter une clé SSH add_new_gpg_key=Ajouter une clé GPG +ssh_key_been_used=Cette clef SSH est déjà liée à votre compte. +ssh_key_name_used=Une clef SSH du même nom est déjà associée à votre compte. +gpg_key_id_used=Une clef GPG publique avec le même identifiant existe déjà. +gpg_no_key_email_found=Cette clef GPG n'est utilisable avec aucune adresse e-mail associée à ce compte. subkeys=Sous-clés key_id=Clé ID key_name=Nom de la Clé key_content=Contenu +add_key_success=La clef SSH "%s" a été ajoutée. +add_gpg_key_success=La clef GPG "%s" a été ajoutée. +delete_key=Supprimer +ssh_key_deletion=Supprimer la clé SSH +gpg_key_deletion=Supprimer la clé GPG +ssh_key_deletion_desc=La suppression d'une clé SSH révoque son accès à votre compte. Continuer ? +gpg_key_deletion_desc=Retirer une clef GPG annule la vérification des révisions l'utilisant. Continuer ? +ssh_key_deletion_success=La clé SSH a été retirée. +gpg_key_deletion_success=La clé GPG a été retirée. add_on=Ajouté le valid_until=Valide jusqu’à valid_forever=Valide pour toujours @@ -220,40 +427,95 @@ key_state_desc=Cette clé a été utilisée durant les 7 derniers jours token_state_desc=Ce jeton a été utilisé durant les 7 derniers jours show_openid=Afficher sur mon profil hide_openid=Masquer du profil +ssh_disabled=SSH désactivé manage_social=Gérer les réseaux sociaux associés +social_desc=Ces réseaux sociaux sont liés à votre compte Gitea. Veuillez vous assurer que vous les reconnaissez tous car ils peuvent être utilisés pour se connecter à votre compte Gitea. +unbind=Dissocier +unbind_success=Le réseau social a été dissocié de votre compte Gitea. +manage_access_token=Gérer les jetons d'accès generate_new_token=Générer le nouveau jeton +tokens_desc=Ces jetons permettent l'accès à votre compte à travers l'API Gitea. +new_token_desc=Les applications utilisant un jeton ont un accès total à votre compte. token_name=Nom du jeton generate_token=Générer le jeton +generate_token_success=Votre nouveau jeton a été généré. Copiez-le maintenant car il ne sera plus jamais affiché ici. delete_token=Supprimer +access_token_deletion=Suppression de jetons d'accès +access_token_deletion_desc=Supprimer un jeton révoquera l'accès à votre compte pour toutes les applications l'utilisant. Continuer ? +delete_token_success=Ce jeton a été supprimé. Les applications l'utilisant n'ont plus accès à votre compte. +twofa_desc=L'authentification à deux facteurs améliore la sécurité de votre compte. twofa_is_enrolled=Votre compte est inscrit à l'authentification à deux facteurs. twofa_not_enrolled=Votre compte n'est pas inscrit à l'authentification à deux facteurs. +twofa_disable=Désactiver l'authentification à deux facteurs +twofa_scratch_token_regenerate=Regénérer un code de secours +twofa_scratch_token_regenerated=Votre jeton de secours est maintenant %s. Gardez-le en lieu sûr. +twofa_enroll=Activer l'authentification à deux facteurs +twofa_disable_note=Vous pouvez désactiver l'authentification à deux facteurs si nécessaire. +twofa_disable_desc=Désactiver l'authentification à deux facteurs rendra votre compte plus vulnérable. Souhaitez-vous confirmer ? +regenerate_scratch_token_desc=Si vous avez perdu votre code de secours, ou avez dû l'utiliser pour vous authentifier, vous pouvez le réinitialiser. twofa_disabled=L'authentification à deux facteurs a été désactivée. scan_this_image=Scannez cette image avec votre application d'authentification : or_enter_secret=Ou saisissez le code secret: %s +then_enter_passcode=Et entrez le mot de passe s'affichant dans l'application : +passcode_invalid=Le mot de passe est invalide. Réessayez. +twofa_enrolled=L'authentification à deux facteurs a été activée pour votre compte. Gardez votre jeton de secours (%s) en lieu sûr car il ne vous sera montré qu'une seule fois ! +u2f_desc=Les clefs de sécurité sont des dispositifs matériels contenant des clefs cryptographiques. Elles peuvent être utilisées pour l'authentification à deux facteurs. La clef de sécurité doit supporter le standard FIDO U2F. +u2f_require_twofa=L'authentification à deux facteurs doit être activée afin d'utiliser une clef de sécurité. +u2f_register_key=Ajouter une clef de sécurité +u2f_nickname=Pseudonyme +u2f_press_button=Appuyer sur le bouton de votre clef de sécurité pour l'enregistrer. +u2f_delete_key=Supprimer une clef de sécurité +u2f_delete_key_desc=Si vous supprimez une clef de sécurité vous ne pourrez plus l'utiliser pour vous connecter. Continuer? +manage_account_links=Gérer les comptes liés +manage_account_links_desc=Ces comptes externes sont liés à votre compte Gitea. +account_links_not_available=Il n'y a pour l'instant pas de compte externe connecté à votre compte Gitea. +remove_account_link=Supprimer un compte lié +remove_account_link_desc=Supprimer un compte lié révoquera son accès à votre compte Gitea. Continuer ? +remove_account_link_success=Le compte lié a été supprimé. orgs_none=Vous n'êtes membre d'aucune organisation. repos_none=Vous ne possédez aucun dépôt delete_account=Supprimer votre compte +delete_prompt=Cette opération supprimera votre compte. Ceci NE PEUT PAS être annulé. confirm_delete_account=Confirmer la suppression +delete_account_title=Supprimer un compte +delete_account_desc=Êtes-vous sûr de vouloir supprimer définitivement ce compte ? [repo] owner=Propriétaire repo_name=Nom du dépôt +repo_name_helper=Idéalement, le nom d'un dépôt devrait être court, mémorisable et unique. visibility=Visibilité +visiblity_helper=Rendre le dépôt privé +visiblity_helper_forced=L'administrateur de votre site impose que les nouveaux dépôts soient privés. +visiblity_fork_helper=(Les changement de cette valeur affecteront toutes les bifurcations.) +clone_helper=Besoin d'aide pour dupliquer ? Visitez l'aide. fork_repo=Créer une bifurcation du dépôt fork_from=Bifurquer depuis +fork_visiblity_helper=La visibilité d'un dépôt bifurqué ne peut être changée. repo_desc=Description repo_lang=Langue +repo_gitignore_helper=Choisissez un modèle de fichier .gitignore. license=Licence +license_helper=Sélectionner un fichier de licence. +readme=LISEZMOI +readme_helper=Choisissez un modèle de fichier LISEZMOI. +auto_init=Initialiser le dépôt (ajoute les fichiers .gitignore, Licence et LISEZMOI) create_repo=Créer un dépôt default_branch=Branche par défaut mirror_prune=Purger +mirror_prune_desc=Supprimer les références externes obsolètes +mirror_interval=Intervalle de synchronisation (les unités de temps valides sont "h", "m" et "s") +mirror_interval_invalid=L'intervalle de synchronisation est invalide. +mirror_address=Cloner depuis une URL +mirror_address_desc=Inclure les informations d'authentification requises dans l'URL. +mirror_last_synced=Dernière synchronisation watchers=Observateurs stargazers=Fans forks=Bifurcations @@ -262,22 +524,33 @@ reactions_more=et %d de plus form.reach_limit_of_creation=Vous avez déjà atteint la limite des %d dépôts. form.name_reserved=Le dépôt "%s" a un nom réservé. +form.name_pattern_not_allowed=%s" n'est pas autorisé dans un nom de dépôt. +need_auth=Autorisations de clonage migrate_type=Type de migration migrate_type_helper=Ce dépôt sera un miroir migrate_repo=Migrer le dépôt +migrate.clone_address=Migrer/Cloner depuis une URL +migrate.clone_address_desc=L'URL HTTP(S) ou Git "clone" d'un dépôt existant +migrate.clone_local_path=ou un chemin serveur local migrate.permission_denied=Vous n'êtes pas autorisé à importer des dépôts locaux. +migrate.invalid_local_path=Chemin local non valide, non existant ou n'étant pas un dossier. migrate.failed=Echec de migration: %v +migrate.lfs_mirror_unsupported=La synchronisation des objets LFS n'est pas supportée - veuillez utiliser 'git lfs fetch --all' et 'git lfs push --all' à la place. mirror_from=miroir de forked_from=bifurqué depuis +fork_from_self=Vous ne pouvez pas bifurquer un dépôt que vous possédez. copy_link=Copier +copy_link_success=Le lien a été copié +copy_link_error=Appuyez sur ⌘-C ou Ctrl-C pour copier copied=Copié unwatch=Ne plus suivre watch=Suivre unstar=Retirer le vote star=Favoriser fork=Bifurcation +download_archive=Télécharger ce dépôt no_desc=Aucune description quick_guide=Introduction rapide @@ -287,6 +560,7 @@ push_exist_repo=Soumission d'un dépôt existant par ligne de commande bare_message=Ce dépôt ne contient aucune information. code=Code +code.desc=Accéder au code source, fichiers, révisions et branches. branch=Branche tree=Aborescence filter_branch_and_tag=Filtrer une branche ou un tag @@ -303,34 +577,68 @@ file_raw=Brut file_history=Historique file_view_raw=Voir le Raw file_permalink=Lien permanent +file_too_large=Le fichier est trop gros pour être affiché. +video_not_supported_in_browser=Votre navigateur ne supporte pas le tag HTML5 "video". stored_lfs=Stocké avec Git LFS +commit_graph=Graphique des révisions +editor.new_file=Nouveau fichier +editor.upload_file=Téléverser un fichier +editor.edit_file=Modifier le fichier editor.preview_changes=Aperçu des modifications +editor.cannot_edit_non_text_files=Les fichiers binaires ne peuvent pas être édités dans l'interface web. +editor.edit_this_file=Modifier le fichier +editor.must_be_on_a_branch=Vous devez être sur une branche pour appliquer ou proposer des modifications à ce fichier. +editor.fork_before_edit=Vous devez faire bifurquer ce dépôt pour appliquer ou proposer des modifications à ce fichier. +editor.delete_this_file=Supprimer le fichier +editor.must_have_write_access=Vous devez avoir un accès en écriture pour appliquer ou proposer des modifications à ce fichier. +editor.file_delete_success=Le fichier '%s' a été supprimé. +editor.name_your_file=Nommez votre fichier… +editor.filename_help=Ajoutez un dossier en entrant son nom suivi d'une barre oblique ('/'). Supprimez un dossier avec un retour arrière au début du champ. editor.or=ou +editor.cancel_lower=Annuler editor.commit_changes=Committer les modifications editor.add_tmpl=Ajouter '%s/' editor.add=Ajouter '%s' editor.update=Mettre à jour '%s' editor.delete=Supprimer '%s' +editor.commit_message_desc=Ajouter une description détaillée facultative… editor.commit_directly_to_this_branch=Soumettre directement dans la branche %s. editor.create_new_branch=Créer une nouvelle branche pour cette révision et envoyer une nouvelle demande d'ajout. +editor.new_branch_name_desc=Nouveau nom de la branche… editor.cancel=Annuler +editor.filename_cannot_be_empty=Le nom de fichier ne peut être vide. editor.branch_already_exists=La branche '%s' existe déjà dans ce dépôt. +editor.directory_is_a_file=Le nom de dossier '%s' est déjà utilisé comme nom de fichier dans ce dépôt. +editor.file_is_a_symlink='%s' est un lien symbolique. Les liens symboliques ne peuvent être édités dans l'interface web +editor.filename_is_a_directory=Le nom de fichier '%s' est déjà utilisé comme nom de dossier dans ce dépôt. +editor.file_editing_no_longer_exists=Le fichier en cours d'édition, '%s', n'existe plus dans ce dépôt. +editor.file_changed_while_editing=Le contenu de ce fichier a changé depuis le début de l'édition. Cliquez ici pour voir les changements ou soumettez de nouveau pour écraser ces changements. +editor.file_already_exists=Un fichier nommé '%s' existe déjà dans ce dépôt. editor.no_changes_to_show=Il n’y a aucun changement à afficher. editor.fail_to_update_file=Échec lors de la mise à jour/création du fichier '%s' avec l’erreur : %v +editor.add_subdir=Ajouter un dossier… editor.unable_to_upload_files=Échec lors de l'envoie du fichier '%s' avec l’erreur : %v editor.upload_files_to_dir=Transférer les fichiers vers '%s' +editor.cannot_commit_to_protected_branch=Impossible de créer une révision sur la branche protégée '%s'. +commits.desc=Naviguer dans l'historique des modifications. commits.commits=Révisions +commits.search=Rechercher des révisions… commits.find=Chercher +commits.search_all=Toutes les branches commits.author=Auteur commits.message=Message commits.date=Date commits.older=Précédemment commits.newer=Récemment commits.signed_by=Signé par +commits.gpg_key_id=ID de la clé GPG +ext_issues=Gestionnaire de tickets externe +ext_issues.desc=Lien vers un gestionnaire de tickets externe. +issues.desc=Organiser les rapports de bug, les tâches et les jalons. issues.new=Nouveau ticket issues.new.labels=Étiquettes issues.new.no_label=Pas d'étiquette @@ -340,12 +648,19 @@ issues.new.no_milestone=Aucun jalon issues.new.clear_milestone=Effacer le jalon issues.new.open_milestone=Ouvrir un jalon issues.new.closed_milestone=Jalons fermés +issues.new.assignees=Affecté à +issues.new.clear_assignees=Supprimer les affectations +issues.new.no_assignees=Aucune affectation issues.no_ref=Aucune branche/tag spécifiés issues.create=Créer un ticket issues.new_label=Nouvelle étiquette +issues.new_label_placeholder=Nom de l'étiquette +issues.new_label_desc_placeholder=Description issues.create_label=Créer une étiquette issues.label_templates.title=Charger un ensemble prédéfini d'étiquettes +issues.label_templates.info=Il n'existe pas encore d'étiquettes. Créez une étiquette avec 'Nouvelle étiquette' ou utilisez un jeu d'étiquettes prédéfini : issues.label_templates.helper=Sélectionnez un ensemble d'étiquettes +issues.label_templates.use=Utiliser le jeu de labels issues.label_templates.fail_to_load_file=Impossible de charger le fichier de modèle étiquette '%s' : %v issues.add_label_at=a ajouté l'étiquette
%s
%s issues.remove_label_at=a supprimé l'étiquette
%s
%s @@ -361,8 +676,11 @@ issues.delete_branch_at=`a supprimé la branche %s %s` issues.open_tab=%d Ouvert issues.close_tab=%d Fermé issues.filter_label=Étiquette +issues.filter_label_no_select=Toutes les étiquettes issues.filter_milestone=Jalon +issues.filter_milestone_no_select=Tous les jalons issues.filter_assignee=Assigné +issues.filter_assginee_no_select=Toutes les affectations issues.filter_type=Type issues.filter_type.all_issues=Tous les tickets issues.filter_type.assigned_to_you=Qui vous sont assignés @@ -375,6 +693,10 @@ issues.filter_sort.recentupdate=Mis à jour récemment issues.filter_sort.leastupdate=Moins récemment mis à jour issues.filter_sort.mostcomment=Les plus commentés issues.filter_sort.leastcomment=Les moins commentés +issues.filter_sort.moststars=Favoris (décroissant) +issues.filter_sort.feweststars=Favoris (croissant) +issues.filter_sort.mostforks=Bifurcations (décroissant) +issues.filter_sort.fewestforks=Bifurcations (croissant) issues.action_open=Ouvrir issues.action_close=Fermer issues.action_label=Étiquette @@ -393,7 +715,9 @@ issues.commented_at=`a commenté %s` issues.delete_comment_confirm=Êtes-vous certain de vouloir supprimer ce commentaire? issues.no_content=Il n'existe pas encore de contenu. issues.close_issue=Fermer +issues.close_comment_issue=Commenter et Fermer issues.reopen_issue=Réouvrir +issues.reopen_comment_issue=Commenter et Réouvrir issues.create_comment=Créer un commentaire issues.closed_at=`fermé à %[2]s` issues.reopened_at=`réouvert à %[2]s` @@ -406,11 +730,16 @@ issues.edit=Modifier issues.cancel=Annuler issues.save=Enregistrer issues.label_title=Nom de l'étiquette +issues.label_description=Description de l’étiquette issues.label_color=Couleur de l'étiquette issues.label_count=%d étiquettes issues.label_open_issues=%d tickets ouverts issues.label_edit=Éditer issues.label_delete=Supprimer +issues.label_modify=Modifier l'étiquette +issues.label_deletion=Supprimer l'étiquette +issues.label_deletion_desc=Supprimer une etiquette l'enlève de tous les tickets. Continuer ? +issues.label_deletion_success=L'étiquette a été supprimée. issues.label.filter_sort.alphabetically=Par ordre alphabétique issues.label.filter_sort.reverse_alphabetically=Par ordre alphabétique inversé issues.label.filter_sort.by_size=Taille @@ -420,32 +749,70 @@ issues.attachment.open_tab=`Cliquez ici pour voir '%s' dans un nouvel onglet` issues.attachment.download=`Cliquez pour télécharger "%s"` issues.subscribe=S’abonner issues.unsubscribe=Se désabonner +issues.tracker=Suivi du temps issues.start_tracking_short=Démarrer +issues.start_tracking=Démarrer le suivi du temps issues.start_tracking_history=`a démarré il y a %s` issues.tracking_already_started=`Vous avez déjà démarré le suivi de temps pour cette tâche!` issues.stop_tracking=Arrêter issues.stop_tracking_history=`a fini de travaillé pour %s` +issues.add_time=Ajouter un minuteur manuellement +issues.add_time_short=Ajouter un minuteur issues.add_time_cancel=Annuler issues.add_time_history=` temps passé ajouté %s` issues.add_time_hours=Heures issues.add_time_minutes=Minutes +issues.add_time_sum_to_small=Aucun minuteur n'a été saisi. issues.cancel_tracking=Annuler issues.cancel_tracking_history=`a annulé le suivi de temps pour %s` +issues.time_spent_total=Temps passé total +issues.time_spent_from_all_authors=`Temps passé total : %s` +issues.due_date=Échéance +issues.invalid_due_date_format=Le format de la date d'échéance est invalide, il doit être comme suit 'aaaa-mm-jj'. +issues.error_modifying_due_date=Impossible de modifier l'échéance. +issues.error_removing_due_date=Impossible de supprimer l'échéance. +issues.due_date_form=aaaa-mm-jj +issues.due_date_form_add=Ajouter une échéance +issues.due_date_form_update=Mettre à jour l'échéance +issues.due_date_form_remove=Retirer l'échéance +issues.due_date_not_writer=Vous devez avoir accès au dépôt en écriture pour mettre à jour l'échéance d'un ticket. +issues.due_date_not_set=Aucune échéance n'a été définie. +issues.due_date_added=a ajouté l'échéance %s %s +issues.due_date_modified=a modifié l'échéance de %[2]s vers %[1]s %[3]s +issues.due_date_remove=a supprimé l'échéance %s %s +issues.due_date_overdue=En retard +pulls.desc=Activer les demandes de fusion et la revue de code. pulls.new=Nouvelle demande d'ajout +pulls.compare_changes=Nouvelle demande de fusion +pulls.compare_changes_desc=Sélectionnez la branche dans laquelle fusionner et la branche depuis laquelle tirer les modifications. +pulls.compare_base=fusionner dans +pulls.compare_compare=tirer les modifications depuis pulls.filter_branch=Filtre de branche pulls.no_results=Aucun résultat trouvé. +pulls.nothing_to_compare=Ces branches sont identiques. Il n'y a pas besoin de créer une demande de fusion. +pulls.has_pull_request=`Une demande de fusion entre ces branches existe déjà : %[2]s#%[3]d` pulls.create=Creer une demande d'ajout pulls.title_desc=veut fusionner %[1]d révision(s) depuis %[2]s vers %[3]s pulls.merged_title_desc=a fusionné %[1]d révision(s) à partir de %[2]s vers %[3]s %[4]s pulls.tab_conversation=Discussion pulls.tab_commits=Révisions +pulls.tab_files=Fichiers Modifiés pulls.reopen_to_merge=Veuillez rouvrir cette demande d'ajout pour effectuer l'opération de fusion. pulls.merged=Fusionnée +pulls.has_merged=La pull request a été fusionnée. +pulls.data_broken=Cette demande de fusion est impossible par manque d'informations de bifurcation. +pulls.is_checking=Vérification des conflits de fusion en cours. Réessayez dans quelques instants. pulls.can_auto_merge_desc=Cette demande d'ajout peut être fusionnée automatiquement. +pulls.cannot_auto_merge_desc=Cette demande de fusion ne peut être appliquée automatiquement en raison de conflits de fusion. +pulls.cannot_auto_merge_helper=Fusionner manuellement pour résoudre les conflits. +pulls.no_merge_desc=Cette demande de fusion ne peut être appliquée directement car toutes les options de fusion du dépôt sont désactivées. +pulls.no_merge_helper=Activez des options de fusion dans les paramètres du dépôt ou fusionnez la demande manuellement. pulls.merge_pull_request=Fusionner la demande d'ajout pulls.rebase_merge_pull_request=Rebase et fusionner pulls.squash_merge_pull_request=Squash et fusionner +pulls.invalid_merge_option=Vous ne pouvez pas utiliser cette option de fusion pour cette demande. +pulls.open_unmerged_pull_exists=`Vous ne pouvez pas effectuer une opération de réouverture car il y a une demande de pull (#%d) en attente avec des propriétés identiques.` milestones.new=Nouveau jalon milestones.open_tab=%d Ouvert @@ -454,13 +821,22 @@ milestones.closed=%s fermé milestones.no_due_date=Aucune date d'échéance milestones.open=Ouvrir milestones.close=Fermer +milestones.new_subheader=Les jalons organisent les tickets et le suivi d'avancement. milestones.create=Créer un Jalon milestones.title=Titre milestones.desc=Description milestones.due_date=Date d'échéance (facultatif) milestones.clear=Effacer +milestones.invalid_due_date_format=Le format de la date d'échéance est invalide, il doit être comme suit 'aaaa-mm-jj'. +milestones.create_success=Le jalon "%s" a été créé. milestones.edit=Éditer le Jalon +milestones.edit_subheader=Les jalons organisent les tickets et le suivi d'avancement. milestones.cancel=Annuler +milestones.modify=Mettre à jour un jalon +milestones.edit_success=Le jalon "%s" a été mis à jour. +milestones.deletion=Supprimer un Jalon +milestones.deletion_desc=Supprimer un jalon le retire de tous les tickets. Continuer ? +milestones.deletion_success=Le jalon a été supprimé. milestones.filter_sort.closest_due_date=Date d'échéance la plus proche milestones.filter_sort.furthest_due_date=Date d'échéance la plus éloignée milestones.filter_sort.least_complete=Le moins complété @@ -468,17 +844,26 @@ milestones.filter_sort.most_complete=Le plus complété milestones.filter_sort.most_issues=Le plus de tickets milestones.filter_sort.least_issues=Le moins de tickets +ext_wiki=Wiki externe +ext_wiki.desc=Lier un wiki externe. wiki=Wiki +wiki.welcome=Bienvenue sur le Wiki. +wiki.welcome_desc=Le wiki vous permet d'écrire ou de partager de la documentation avec vos collaborateurs. +wiki.desc=Écrire et partager de la documentation avec vos collaborateurs. +wiki.create_first_page=Créer la première page wiki.page=Page wiki.filter_page=Filtrer la page +wiki.new_page=Page wiki.default_commit_message=Écrire une note concernant cette mise à jour (optionnel). wiki.save_page=Enregistrer la page wiki.last_commit_info=%s a édité cette page %s wiki.edit_page_button=Modifier wiki.new_page_button=Nouvelle Page wiki.delete_page_button=Supprimer la page +wiki.delete_page_notice_1=Supprimer la page de wiki "%s" ne peut être annulé. Continuer ? wiki.page_already_exists=Une page de wiki avec le même nom existe déjà. +wiki.reserved_page=Le nom de page de wiki "%s" est réservé. wiki.pages=Pages wiki.last_updated=Dernière mise à jour: %s @@ -487,7 +872,7 @@ activity.period.filter_label=Période: activity.period.daily=1 jour activity.period.halfweekly=3 jours activity.period.weekly=1 semaine -activity.period.monthly=1 semaine +activity.period.monthly=1 mois activity.overview=Vue d'ensemble activity.active_prs_count_1=%d demande d'ajout active activity.active_prs_count_n=%d demandes d'ajout actives @@ -515,6 +900,9 @@ activity.closed_issue_label=Fermé activity.new_issues_count_1=Nouveau ticket activity.new_issues_count_n=Nouveaux tickets activity.new_issue_label=Ouvert +activity.title.unresolved_conv_1=%d conversations non résolues +activity.title.unresolved_conv_n=%d conversations non résolues +activity.unresolved_conv_desc=Ces tickets et demandes de fusion récemment mis à jour n'ont pas encore été résolus. activity.unresolved_conv_label=Ouvrir activity.title.releases_1=%d version activity.title.releases_n=%d versions @@ -527,6 +915,9 @@ search.results=Résulats de la recherche « %s » dans %s settings=Paramètres settings.desc=Les paramètres sont l'endroit où gérer les options du dépôt +settings.options=Dépôt +settings.collaboration=Collaborateurs +settings.collaboration.admin=Administrateur settings.collaboration.write=Écriture settings.collaboration.read=Lecture settings.collaboration.undefined=Indéfini @@ -534,56 +925,178 @@ settings.hooks=Déclencheurs Web settings.githooks=Déclencheurs Git settings.basic_settings=Paramètres de base settings.mirror_settings=Réglages Miroir +settings.sync_mirror=Synchroniser maintenant +settings.mirror_sync_in_progress=La synchronisation est en cours. Revenez dans une minute. +settings.site=Site Web settings.update_settings=Valider settings.advanced_settings=Paramètres avancés +settings.wiki_desc=Activer le wiki du dépôt +settings.use_internal_wiki=Utiliser le wiki interne +settings.use_external_wiki=Utiliser un wiki externe settings.external_wiki_url=URL Wiki externe +settings.external_wiki_url_error=L’URL du wiki externe n’est pas une URL valide. +settings.external_wiki_url_desc=Les visiteurs sont redirigés vers l’URL du wiki externe lors d'un clic sur l’onglet wiki. +settings.issues_desc=Activer le suivi de tickets du dépôt +settings.use_internal_issue_tracker=Utiliser le suivi de tickets interne +settings.use_external_issue_tracker=Utiliser un système de suivi de tickets externe settings.external_tracker_url=Adresse du système de tickets externe +settings.external_tracker_url_error=L’URL du système de suivi de tickets externe n’est pas une URL valide. +settings.external_tracker_url_desc=Les visiteurs sont redirigés vers l’URL du système de suivi de tickets externe lors d'un clic sur l’onglet tickets. settings.tracker_url_format=Format de l'URL du système de tickets +settings.tracker_issue_style=Format du nombre de tickets du système de tickets externe settings.tracker_issue_style.numeric=Numérique settings.tracker_issue_style.alphanumeric=Alphanumérique +settings.tracker_url_format_desc=Utilisez les balises {user}, {repo} et {index} respectivement pour le nom d'utilisateur, le nom du dépôt et le numéro de ticket. +settings.enable_timetracker=Activer le suivi du temps +settings.allow_only_contributors_to_track_time=Restreindre le suivi de temps aux contributeurs +settings.pulls_desc=Activer les demandes de fusion +settings.pulls.ignore_whitespace=Ignorer les espaces lors des conflits +settings.pulls.allow_merge_commits=Activer la fusion de révisions +settings.pulls.allow_rebase_merge=Activer le rebasage pour la fusion de révisions +settings.pulls.allow_squash_commits=Activer la concaténation de révisions +settings.admin_settings=Paramètres administrateur +settings.admin_enable_health_check=Activer les vérifications de santé du dépôt (git fsck) settings.danger_zone=Zone de danger settings.new_owner_has_same_repo=Le nouveau propriétaire a déjà un dépôt nommé ainsi. +settings.convert=Convertir en dépôt standard +settings.convert_desc=Vous pouvez convertir ce miroir en dépôt standard. Ceci ne peut pas être annulé. +settings.convert_notices_1=Cette opération convertira le miroir en dépôt standard et ne peut être annulée. +settings.convert_confirm=Convertir le dépôt +settings.convert_succeed=Le miroir a été converti en dépôt standard. settings.transfer=Changer de propriétaire +settings.transfer_desc=Transférer ce dépôt à un autre utilisateur ou une organisation dont vous possédez des droits d'administrateur. +settings.transfer_notices_1=- Vous perdrez l'accès à ce dépôt si vous le transférez à un autre utilisateur. +settings.transfer_notices_2=- Vous conserverez l'accès à ce dépôt si vous le transférez à une organisation dont vous êtes (co-)propriétaire. +settings.transfer_form_title=Entrez le nom du dépôt pour confirmer : +settings.wiki_delete=Supprimer les données du Wiki +settings.wiki_delete_desc=Supprimer les données du wiki d'un dépôt est permanent et ne peut être annulé. +settings.wiki_delete_notices_1=- Ceci supprimera de manière permanente et désactivera le wiki de dépôt pour %s. +settings.confirm_wiki_delete=Supprimer les données du Wiki +settings.wiki_deletion_success=Les données du wiki de ce dépôt ont été effacées. settings.delete=Supprimer ce dépôt +settings.delete_desc=Supprimer un dépôt est permanent et ne peut être annulé. settings.delete_notices_1=- Cette opération ne peut pas être annulée. +settings.delete_notices_2=- Cette opération supprimera définitivement le dépôt %s, y compris le code, les tickets, les commentaires, les données de wiki et les accès des collaborateurs. +settings.delete_notices_fork_1=- Les bifurcations de ce dépôt deviendront indépendants après suppression. +settings.deletion_success=Le dépôt a été supprimé. +settings.update_settings_success=Les options du dépôt ont été mises à jour. settings.transfer_owner=Nouveau propriétaire +settings.make_transfer=Transférer +settings.transfer_succeed=Le dépôt a été transféré. +settings.confirm_delete=Supprimer le dépôt +settings.add_collaborator=Ajouter un collaborateur +settings.add_collaborator_success=Le collaborateur a été ajouté. +settings.delete_collaborator=Supprimer +settings.collaborator_deletion=Supprimer le collaborateur +settings.collaborator_deletion_desc=La suppression d'un collaborateur révoque son accès à ce dépôt. Continuer ? +settings.remove_collaborator_success=Le collaborateur a été retiré. +settings.search_user_placeholder=Rechercher un utilisateur… +settings.org_not_allowed_to_be_collaborator=Les organisations ne peuvent être ajoutées en tant que collaborateur. +settings.user_is_org_member=L'utilisateur est un membre d'organisation qui ne peut être ajouté comme collaborateur. settings.add_webhook=Ajouter un déclencheur Web +settings.hooks_desc=Les webhooks envoient automatiquement des requêtes HTTP POST vers un serveur lorsque certains événements Gitea sont déclenchés. Apprenez-en plus dans le guide webhooks. +settings.webhook_deletion=Retirer le Webhook +settings.webhook_deletion_desc=Supprimer un webhook supprime ses paramètres et son historique. Continuer ? +settings.webhook_deletion_success=Le webhook a été supprimé. settings.webhook.test_delivery=Tester la version +settings.webhook.test_delivery_desc=Testez ce webhook avec un faux événement. +settings.webhook.test_delivery_success=Un faux événement a été ajouté à la file d'attente. L'affichage dans l'historique peut prendre quelques secondes. settings.webhook.request=Requête settings.webhook.response=Réponse settings.webhook.headers=Entêtes +settings.webhook.payload=Contenu settings.webhook.body=Corps +settings.githooks_desc=Les déclencheurs Git sont lancés par Git lui-même. Ils sont modifiables dans la liste ci-dessous afin de configurer des opérations personnalisées. settings.githook_edit_desc=Si un Hook est inactif, un exemple de contenu vous sera proposé. Un contenu laissé vide signifie un Hook inactif. settings.githook_name=Nom du Hook settings.githook_content=Contenu du Hook settings.update_githook=Mettre le Hook à jour +settings.add_webhook_desc=Gitea enverra des requêtes POST avec un type de contenu donné à l'URL cible. Apprenez-en plus dans le guide webhooks. +settings.payload_url=URL cible +settings.content_type=Type de contenu POST settings.secret=Confidentiel settings.slack_username=Nom d'utilisateur settings.slack_icon_url=URL de l'icône settings.discord_username=Nom d'utilisateur settings.discord_icon_url=URL de l'icône settings.slack_color=Couleur +settings.event_desc=Événement déclencheur : +settings.event_push_only=Événements de pe poussée +settings.event_send_everything=Tous les événements +settings.event_choose=Événements personnalisés… settings.event_create=Créer +settings.event_create_desc=Branche ou Tag créé. +settings.event_delete=Supprimer +settings.event_delete_desc=Branche ou tag supprimé +settings.event_fork=Bifurcation +settings.event_fork_desc=Dépôt bifurqué +settings.event_issues=Tickets +settings.event_issues_desc=Ticket ouvert, fermé, réouvert, modifié, assigné, non-assigné, étiquette mise à jour, étiquette nettoyée, jalonnée, ou déjalonnée. +settings.event_issue_comment=Commentaire du ticket +settings.event_issue_comment_desc=Commentaire du ticket créé, modifié, ou supprimé. +settings.event_release=Version +settings.event_release_desc=Version publiée, mise à jour ou supprimée dans un dépôt. settings.event_pull_request=Demande d'ajout +settings.event_pull_request_desc=Demande de fusion ouverte, fermée, rouverte, éditée, attribuée, désattribuée, étiquette mise à jour, étiquette désactivée ou synchronisée. settings.event_push=Pousser +settings.event_push_desc=Git push vers un dépôt. settings.event_repository=Dépôt +settings.event_repository_desc=Dépôt créé ou supprimé. +settings.active=Inclure les détails de l'événement +settings.active_helper=Ajouter des informations sur l’événement déclencheur aux requêtes. +settings.add_hook_success=Nouveau Webhook ajouté. settings.update_webhook=Mettre à jour le Webhook +settings.update_hook_success=Webhook mis à jour. +settings.delete_webhook=Retirer le Webhook settings.recent_deliveries=Livraisons récentes settings.hook_type=Type de Hook +settings.add_slack_hook_desc=Intégrer Slack au dépôt. settings.slack_token=Jeton settings.slack_domain=Domaine settings.slack_channel=Canal +settings.add_discord_hook_desc=Intégrer Discord au dépôt. +settings.add_dingtalk_hook_desc=Intégrer Dingtalk au dépôt. settings.deploy_keys=Clés de déploiement settings.add_deploy_key=Ajouter une clé de déploiement +settings.deploy_key_desc=Les clefs de déploiement on un accès en lecture seule au dépôt. +settings.is_writable=Activer l'accès en écriture +settings.is_writable_info=Permettre à cette clef de déploiement de pousser des modifications vers ce dépôt. +settings.no_deploy_keys=Il n'y a pas encore de clefs de déploiement. settings.title=Titre settings.deploy_key_content=Contenu +settings.key_been_used=Une clef de déploiement identique est déjà en cours d'utilisation. +settings.key_name_used=Une clef de déploiement du même nom existe déjà. +settings.add_key_success=La clef de déploiement "%s" à été ajoutée. +settings.deploy_key_deletion=Supprimer une clef de déploiement +settings.deploy_key_deletion_desc=La suppression d'une clef de déploiement révoque son accès à ce dépôt. Continuer ? +settings.deploy_key_deletion_success=La clé de déploiement a été supprimée. settings.branches=Branches settings.protected_branch=Protection de branche settings.protected_branch_can_push=Autoriser la poussée ? settings.protected_branch_can_push_yes=Vous pouvez pousser settings.protected_branch_can_push_no=Vous ne pouvez pas pousser +settings.branch_protection=Protection de la branche "%s +settings.protect_this_branch=Protection de la branche +settings.protect_this_branch_desc=Interdire de supprimer la branche et désactiver les mises à jours forcées. +settings.protect_whitelist_committers=Activer la liste blanche pour les mises à jour +settings.protect_whitelist_committers_desc=Autoriser les utilisateurs sur la liste blanche et les équipes de contourner les restrictions. +settings.protect_whitelist_users=Utilisateurs en liste blanche : +settings.protect_whitelist_search_users=Rechercher des utilisateurs… +settings.protect_whitelist_teams=Équipes en liste blanche : +settings.protect_whitelist_search_teams=Rechercher des équipes… +settings.protect_merge_whitelist_committers=Activer la liste blanche pour la fusion +settings.protect_merge_whitelist_committers_desc=N'autoriser que les utilisateurs et les équipes en liste blanche d'appliquer les demandes de fusion sur cette branche. +settings.protect_merge_whitelist_users=Utilisateurs en liste blanche de fusion : +settings.protect_merge_whitelist_teams=Équipes en liste blanche de fusion : settings.add_protected_branch=Activer la protection settings.delete_protected_branch=Désactiver la protection +settings.update_protect_branch_success=La protection de branche à été mise à jour pour la branche "%s". +settings.remove_protected_branch_success=La protection de branche à été désactivée pour la branche "%s". +settings.protected_branch_deletion=Désactiver la protection de branche +settings.protected_branch_deletion_desc=Désactiver la protection de branche permet aux utilisateurs ayant accès en écriture de pousser des modifications sur la branche. Continuer ? +settings.default_branch_desc=Sélectionnez une branche par défaut pour les demandes de fusion et les révisions : +settings.choose_branch=Choisissez une branche… +settings.no_protected_branch=Il n'y a pas de branche protégée. diff.browse_source=Parcourir la source diff.parent=Parent @@ -598,6 +1111,7 @@ diff.view_file=Voir le fichier diff.file_suppressed=Fichier diff supprimé car celui-ci est trop grand diff.too_many_files=Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff +releases.desc=Suivi des versions et des téléchargements. release.releases=Versions release.new_release=Nouvelle version release.draft=Brouillon @@ -606,53 +1120,102 @@ release.stable=Stable release.edit=Éditer release.ahead=%d révisions sur %s depuis cette publication release.source_code=Code source +release.new_subheader=Les versions organisent les versions publiées du projet. +release.edit_subheader=Les versions organisent les versions publiées du projet. release.tag_name=Nom du tag release.target=Cible +release.tag_helper=Choisissez un tag existant ou créez un nouveau tag. release.title=Titre release.content=Contenu release.write=Écrire release.preview=Prévisualiser +release.loading=Chargement… +release.prerelease_desc=Marquer comme pré-version +release.prerelease_helper=Marquer cette version comme impropre à la production. release.cancel=Annuler release.publish=Publier release.save_draft=Sauvegarder le Brouillon +release.edit_release=Modifier la version +release.delete_release=Supprimer cette version +release.deletion=Supprimer cette version +release.deletion_desc=Supprimer une version enlève sa balise du dépôt. Le contenu et l'historique du dépôt restent inchangés. Continuer ? release.deletion_success=Cette livraison a été supprimée. +release.tag_name_already_exist=Une version avec ce nom de balise existe déjà. +release.tag_name_invalid=Le nom de balise est invalide. release.downloads=Téléchargements +branch.name=Nom de la branche branch.search=Rechercher des branches +branch.already_exists=Une branche nommée %s existe déjà. branch.delete_head=Supprimer +branch.delete=Supprimer la branche '%s' branch.delete_html=Supprimer la branche +branch.delete_desc=Supprimer une branche est permanent. Cela NE PEUVENT être annulées. Continuer ? +branch.deletion_success=La branche "%s" a été supprimée. +branch.deletion_failed=Impossible de supprimer la branche %s. +branch.delete_branch_has_new_commits=La branche '%s' ne peut être supprimé car de nouvelles révisions ont été ajoutées après la fusion. branch.create_branch=Créer la branche %s branch.create_from=de '%s' +branch.create_success=La branche "%s" a été crée. branch.branch_already_exists=La branche '%s' existe déjà dans ce dépôt. +branch.branch_name_conflict=Le nom de la branche « %s » est en conflit avec une branche existante « %s ». +branch.tag_collision=La branche '%s' ne peut être créée comme une balise car un nom identique existe déjà dans le dépôt. branch.deleted_by=Supprimée par %s +branch.restore_success=La branche "%s" a été restaurée. +branch.restore_failed=La restauration de la branche '%s' a échoué. +branch.protected_deletion_failed=La branche '%s' est protégé. Il ne peut pas être supprimé. +topic.manage_topics=Gérer les sujets +topic.done=Terminé +topic.count_prompt=Vous ne pouvez pas sélectionner plus de 25 sujets +topic.format_prompt=Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets (-), sans dépasser 35 caractères [org] org_name_holder=Nom de l'organisation org_full_name_holder=Nom complet de l'organisation +org_name_helper=Le nom de l'organisation doit être court et mémorable. create_org=Créer une organisation repo_updated=Mis à jour people=Contacts teams=Équipes lower_members=Membres lower_repositories=dépôts +create_new_team=Nouvelle équipe +create_team=Créer une équipe org_desc=Description team_name=Nom de l'équipe team_desc=Description +team_name_helper=Le nom d'équipe doit être court et mémorable. +team_desc_helper=Décrire le but ou le rôle de l’équipe. +team_permission_desc=Autorisation +team_unit_desc=Permettre l’accès aux Sections du dépôt +form.name_reserved=Le nom d'organisation "%s" est réservé. +form.name_pattern_not_allowed=Le paterne '%s' n'est pas autorisé dans un nom d'oraganisation. +form.create_org_not_allowed=Vous n'êtes pas autorisé à créer une organisation. settings=Paramètres +settings.options=Organisation settings.full_name=Non Complet settings.website=Site Web settings.location=Localisation settings.update_settings=Valider settings.update_setting_success=Les paramètres de l'organisation ont été mis à jour. +settings.change_orgname_prompt=NB: changer le nom de l'organisation changera aussi son URL. +settings.update_avatar_success=L'avatar de l'organisation a été mis à jour. settings.delete=Supprimer l'organisation settings.delete_account=Supprimer cette organisation +settings.delete_prompt=Cette organisation sera supprimée définitivement. Cette opération est IRRÉVERSIBLE ! settings.confirm_delete_account=Confirmez la suppression +settings.delete_org_title=Supprimer l'organisation +settings.delete_org_desc=Cette organisation sera supprimée définitivement. Voulez-vous continuer ? settings.hooks_desc=Vous pouvez ajouter des déclencheurs qui seront activés pour tous les dépôts de cette organisation. members.membership_visibility=Visibilité des membres: +members.public=Public +members.public_helper=rendre caché +members.private=Caché +members.private_helper=rendre visible members.member_role=Rôle du membre : members.owner=Propriétaire members.member=Membre @@ -664,22 +1227,36 @@ members.invite_now=Envoyer une invitation teams.join=Rejoindre teams.leave=Quitter teams.read_access=Accès en lecture +teams.read_access_helper=Les membres peuvent voir et cloner les dépôts d'équipes. teams.write_access=Accès en écriture +teams.write_access_helper=Les membres peuvent voir et cloner les dépôts d'équipes. +teams.admin_access=Accès Administrateur +teams.admin_access_helper=Les membres peuvent tirer et pousser des modifications vers les dépôts de l'équipe, et y ajouter des collaborateurs. teams.no_desc=Aucune description teams.settings=Paramètres +teams.owners_permission_desc=Les propriétaires ont un accès complet à tous les dépôts et disposent d'un accès administrateur de l'organisation. teams.members=Membres de L'Équipe teams.update_settings=Valider +teams.delete_team=Supprimer l'équipe teams.add_team_member=Ajouter un Membre +teams.delete_team_title=Supprimer l'équipe +teams.delete_team_desc=Supprimer une équipe supprime l'accès au dépôt à ses membres. Continuer ? teams.delete_team_success=L’équipe a été supprimé. +teams.read_permission_desc=Cette équipe permet l'accès en lecture : les membres peuvent voir et dupliquer ses dépôts. +teams.write_permission_desc=Cette équipe permet l'accès en écriture : les membres peuvent participer à ses dépôts. +teams.admin_permission_desc=Cette équipe permet l'accès administrateur : les membres peuvent voir, participer et ajouter des collaborateurs à ses dépôts. teams.repositories=Dépôts de l'Équipe +teams.search_repo_placeholder=Rechercher dans le dépôt… teams.add_team_repository=Ajouter un Dépôt à l'Équipe teams.remove_repo=Supprimer teams.add_nonexistent_repo=Dépôt inexistant, veuillez d'abord le créer. [admin] dashboard=Tableau de bord +users=Comptes utilisateurs organizations=Organisations repositories=Dépôts +authentication=Sources d'authentification config=Configuration notices=Notes Systèmes monitor=Surveillance @@ -687,6 +1264,10 @@ first_page=Première last_page=Dernière total=Total : %d +dashboard.statistic=Résumé +dashboard.operations=Opérations de maintenance +dashboard.system_status=État du système +dashboard.statistic_info=La base de données Gitea contient %d utilisateurs, %d organisations, %d clés publiques, %d dépôts, %d surveillances de dépôts, %d votes, %d actions, %d accès, %d tickets, %d commentaires, %d comptes de réseaux sociaux, %d abonnements, %d miroirs, %d versions, %d sources d'authentification externes, %d webhooks, %d versions, %d labels, %d tâches hook, %d équipes, %d tâches de mise à jour, %d fichiers. dashboard.operation_name=Nom de l'Opération dashboard.operation_switch=Basculer dashboard.operation_run=Exécuter @@ -694,15 +1275,30 @@ dashboard.clean_unbind_oauth=Effacer les connexions OAuth associées dashboard.clean_unbind_oauth_success=Toutes les connexions OAuth associées ont été supprimées. dashboard.delete_inactivate_accounts=Supprimer tous les comptes inactifs dashboard.delete_inactivate_accounts_success=Tous les comptes inactifs ont été supprimés. +dashboard.delete_repo_archives=Supprimer toutes les archives du dépôt +dashboard.delete_repo_archives_success=Toutes les archives du dépôt ont été supprimées. +dashboard.delete_missing_repos=Supprimer tous les dépôts dont les fichiers Git sont manquants +dashboard.delete_missing_repos_success=Tous les dépôts dont les fichiers Git sont manquants ont été supprimés. +dashboard.git_gc_repos=Collecter les déchets des dépôts +dashboard.git_gc_repos_success=Les déchets de tous les dépôts ont été collectés. +dashboard.resync_all_sshkeys=Ajouter les clefs SSH Gitea au fichier ".ssh/authorized_keys". (Inutile si vous utilisez le serveur SSH intégré). +dashboard.resync_all_sshkeys_success=Toutes les clés publiques contrôlées par Gitea ont été réécrites. +dashboard.resync_all_hooks=Re-synchroniser les déclencheurs Git pre-receive, update et post-receive de tous les dépôts. +dashboard.resync_all_hooks_success=Tous les déclencheurs Git pre-receive, update et post-receive ont été resynchronisés. dashboard.reinit_missing_repos=Réinitialiser tous les dépôts Git manquants pour lesquels un enregistrement existe dashboard.reinit_missing_repos_success=Tous les dépôts Git manquants pour lesquels un enregistrement existait ont été réinitialisés. dashboard.sync_external_users=Synchroniser les données de l’utilisateur externe +dashboard.sync_external_users_started=La synchronisation des données des utilisateurs externes a commencé. +dashboard.git_fsck=Effectuer des contrôles de santé sur tous les dépôts +dashboard.git_fsck_started=Début des contrôles de santé du dépôt. dashboard.server_uptime=Uptime du serveur dashboard.current_goroutine=Goroutines actuelles dashboard.current_memory_usage=Utilisation Mémoire actuelle dashboard.total_memory_allocated=Mémoire totale allouée dashboard.memory_obtained=Mémoire obtenue dashboard.pointer_lookup_times=Nombre de Consultations Pointeur +dashboard.memory_allocate_times=Allocations de mémoire +dashboard.memory_free_times=Nombre de libérations de mémoire dashboard.current_heap_usage=Utilisation Tas (Heap) dashboard.heap_memory_obtained=Mémoire Tas (Heap) obtenue dashboard.heap_memory_idle=Mémoire Tas (Heap) au Repos @@ -725,18 +1321,43 @@ dashboard.total_gc_pause=Pause GC dashboard.last_gc_pause=Dernière Pause GC dashboard.gc_times=Nombres de GC +users.user_manage_panel=Gestion du compte utilisateur +users.new_account=Créer un compte +users.name=Nom d'utilisateur users.activated=Activé users.admin=Administrateur users.repos=Dépôts users.created=Créés +users.last_login=Dernière connexion +users.never_login=Jamais connecté +users.send_register_notify=Envoyer une notification d'inscription +users.new_success=L'utilisateur '%s' à bien été créé. users.edit=Éditer users.auth_source=Sources d'authentification users.local=Locales +users.auth_login_name=Nom d'utilisateur pour l'authentification +users.password_helper=Laissez le mot de passe vide pour le garder inchangé. +users.update_profile_success=Le compte a bien été mis à jour. +users.edit_account=Modifier un compte +users.max_repo_creation=Nombre maximal de dépôts +users.max_repo_creation_desc=(Mettre à -1 pour utiliser la limite globale par défaut.) +users.is_activated=Ce compte est activé +users.prohibit_login=Désactiver la connexion +users.is_admin=Est Administrateur +users.allow_git_hook=Autoriser la création de Git Hooks +users.allow_import_local=Autoriser l'importation de dépôts locaux +users.allow_create_organization=Autoriser la création d'organisations +users.update_profile=Modifier un compte +users.delete_account=Supprimer cet utilisateur +users.still_own_repo=Cet utilisateur possède un ou plusieurs dépôts. Veuillez les supprimer ou les transférer à un autre utilisateur. +users.still_has_org=Cet utilisateur est membre d'une organisation. Veuillez le retirer de toutes les organisations dont il est membre au préalable. +users.deletion_success=Le compte a été supprimé. orgs.org_manage_panel=Gestion des organisations orgs.name=Nom orgs.teams=Équipes orgs.members=Membres +orgs.new_orga=Nouvelle organisation repos.repo_manage_panel=Gestion des dépôts repos.owner=Propriétaire @@ -744,12 +1365,16 @@ repos.name=Nom repos.private=Privé repos.watches=Suivi par repos.stars=Votes +repos.forks=Bifurcations repos.issues=Tickets repos.size=Taille +auths.auth_manage_panel=Gestion des sources d'authentification +auths.new=Ajouter une source d'authentification auths.name=Nom auths.type=Type auths.enabled=Activé +auths.syncenabled=Activer la synchronisation des utilisateurs auths.updated=Mis à jour auths.auth_type=Type d'authentification auths.auth_name=Nom de l'authentification @@ -759,8 +1384,18 @@ auths.host=Hôte auths.port=Port auths.bind_dn=Bind DN auths.bind_password=Bind mot de passe +auths.bind_password_helper=Attention: ce mot de passe est stocké en clair. Veuillez utiliser, si possible, un compte avec des droits limités en lecture seule. auths.user_base=Utilisateur Search Base auths.user_dn=Utilisateur DN +auths.attribute_username=Attribut nom d'utilisateur +auths.attribute_username_placeholder=Laisser vide afin d'utiliser le nom d'utilisateur spécifié dans Gitea. +auths.attribute_name=Attribut prénom +auths.attribute_surname=Attribut nom de famille +auths.attribute_mail=Attribut e-mail +auths.attribute_ssh_public_key=Attribut clef SSH publique +auths.attributes_in_bind=Aller chercher les attributs dans le contexte de liaison DN +auths.use_paged_search=Utiliser la recherche paginée +auths.search_page_size=Taille de la page auths.filter=Filtre utilisateur auths.admin_filter=Filtre administrateur auths.ms_ad_sa=Rechercher les attributs MS AD @@ -768,6 +1403,7 @@ auths.smtp_auth=Type d'authentification SMTP auths.smtphost=Hôte SMTP auths.smtpport=Port SMTP auths.allowed_domains=Domaines autorisés +auths.allowed_domains_helper=Laisser ce champ vide autorise tous les domaines. Separez les domaines multiples avec une virgule (","). auths.enable_tls=Activer le Chiffrement TLS auths.skip_tls_verify=Ne pas vérifier TLS auths.pam_service_name=Nom du Service PAM @@ -775,6 +1411,7 @@ auths.oauth2_provider=Fournisseur OAuth2 auths.oauth2_clientID=ID du client (clé) auths.oauth2_clientSecret=Secret du client auths.openIdConnectAutoDiscoveryURL=URL de découverte OpenID Connect +auths.oauth2_use_custom_url=Utiliser des URLs personnalisées au lieu de l’URL par défaut auths.oauth2_tokenURL=URL du jeton auths.oauth2_authURL=URL d'autorisation auths.oauth2_profileURL=URL du profil @@ -784,27 +1421,48 @@ auths.tips=Conseils auths.tips.oauth2.general=Authentification OAuth2 auths.tips.oauth2.general.tip=Lorsque vous enregistrez une nouvelle authentification OAuth2, l'URL de redirection doit être de la forme : /user/oauth2 //callback auths.tip.oauth2_provider=Fournisseur OAuth2 +auths.tip.bitbucket=Créez un nouveau jeton OAuth sur https://bitbucket.org/account/user//oauth-consumers/new et ajoutez la permission "Compte"-"Lecture auths.tip.dropbox=Créez une nouvelle application sur https://www.dropbox.com/developers/apps auths.tip.facebook=Enregistrez une nouvelle application sur https://developers.facebook.com/apps et ajoutez le produit "Facebook Login auths.tip.github=Créez une nouvelle application OAuth sur https://github.com/settings/applications/new auths.tip.gitlab=Créez une nouvelle application sur https://gitlab.com/profile/applications +auths.tip.google_plus=Obtenez des identifiants OAuth2 sur la console API de Google (https://console.developers.google.com/) auths.tip.openid_connect=Utilisez l'URL de découvert OpenID (/.well-known/openid-configuration) pour spécifier les points d'accès +auths.tip.twitter=Rendez-vous sur https://dev.twitter.com/apps, créez une application et assurez-vous que l'option "Autoriser l'application à être utilisée avec Twitter Connect" est activée +auths.edit=Mettre à jour la source d'authentification +auths.activated=Cette source d'authentification est activée auths.new_success=L'authentification "%s" a été ajoutée. +auths.update_success=La source d'authentification a été mise à jour. +auths.update=Mettre à jour la source d'authentification +auths.delete=Supprimer la source d'authentification auths.delete_auth_title=Suppression de la source d'authentification +auths.delete_auth_desc=La suppression d'une source d'authentification empêche les utilisateurs de l'utiliser pour se connecter. Continuer ? +auths.still_in_used=Cette source d'authentification est utilisée par un ou plusieurs utilisateurs, veuillez convertir ou supprimer ces comptes utilisateurs avant toute action. +auths.deletion_success=La source d'authentification a été supprimée. +auths.login_source_exist=La source d'authentification "%s" existe déjà. config.server_config=Configuration du serveur +config.app_name=Titre du site +config.app_ver=Version de Gitea +config.app_url=URL de base de Gitea config.custom_conf=Chemin du fichier de configuration +config.domain=Domaine du serveur SSH +config.offline_mode=Mode hors-ligne config.disable_router_log=Désactiver la Journalisation du Routeur +config.run_user=Exécuter avec l'utilisateur config.run_mode=Mode d'Éxécution config.git_version=Version de Git config.repo_root_path=Emplacement des Dépôts config.lfs_root_path=Répertoire racine LFS config.static_file_root_path=Chemin statique des fichiers racines +config.log_file_root_path=Chemin des fichiers logs config.script_type=Type de Script config.reverse_auth_user=Annuler l'Authentification de l'Utilisateur config.ssh_config=Configuration SSH config.ssh_enabled=Activé +config.ssh_start_builtin_server=Utiliser le serveur incorporé +config.ssh_domain=Domaine du serveur config.ssh_port=Port config.ssh_listen_port=Port d'écoute config.ssh_root_path=Emplacement racine @@ -817,19 +1475,36 @@ config.db_config=Configuration de la base de données config.db_type=Type config.db_host=Hôte config.db_name=Nom +config.db_user=Nom d'utilisateur +config.db_ssl_mode=SSL config.db_path=Emplacement config.service_config=Configuration du service +config.register_email_confirm=Exiger la confirmation de l'e-mail lors de l'inscription +config.disable_register=Désactiver le formulaire d'inscription +config.allow_only_external_registration=N'autoriser l'inscription qu'à partir des services externes +config.enable_openid_signup=Activer l'inscription avec OpenID +config.enable_openid_signin=Activer la connexion avec OpenID config.show_registration_button=Afficher le bouton d'enregistrement +config.require_sign_in_view=Exiger la connexion pour afficher les pages +config.mail_notify=Activer les notifications par e-mail config.disable_key_size_check=Désactiver la vérification de la taille de clé minimale +config.enable_captcha=Activer le CAPTCHA config.active_code_lives=Limites de Code Actif config.reset_password_code_lives=Réinitialiser le délai d'expiration du code de mot de passe +config.default_keep_email_private=Masquer les adresses e-mail par défaut +config.default_allow_create_organization=Autoriser la création d'organisations par défaut +config.enable_timetracking=Activer le suivi du temps +config.default_enable_timetracking=Activer le suivi de temps par défaut +config.default_allow_only_contributors_to_track_time=Restreindre le suivi de temps aux contributeurs +config.no_reply_address=Domaine pour les e-mails cachés config.webhook_config=Configuration Webhook config.queue_length=Longueur de la file d'attente config.deliver_timeout=Expiration d'Envoi config.skip_tls_verify=Passer la vérification TLS +config.mailer_config=Configuration du service SMTP config.mailer_enabled=Activé config.mailer_disable_helo=Désactiver HELO config.mailer_name=Nom @@ -837,6 +1512,10 @@ config.mailer_host=Hôte config.mailer_user=Utilisateur config.mailer_use_sendmail=Utiliser Sendmail config.mailer_sendmail_path=Chemin d’accès à Sendmail +config.mailer_sendmail_args=Arguments supplémentaires pour Sendmail +config.send_test_mail=Envoyer un e-mail de test +config.test_mail_failed=Impossible d'envoyer un e-mail de test à '%s' : %v +config.test_mail_sent=Un e-mail de test à été envoyé à '%s'. config.oauth_config=Configuration OAuth config.oauth_enabled=Activé @@ -856,6 +1535,7 @@ config.session_life_time=Durée des sessions config.https_only=HTTPS uniquement config.cookie_life_time=Expiration du cookie +config.picture_config=Configuration de l'avatar config.picture_service=Service d'Imagerie config.disable_gravatar=Désactiver Gravatar config.enable_federated_avatar=Activer les avatars unifiés @@ -880,6 +1560,7 @@ monitor.name=Nom monitor.schedule=Planification monitor.next=Suivant monitor.previous=Précédent +monitor.execute_times=Exécutions monitor.process=Processus en cours d'exécution monitor.desc=Description monitor.start=Heure de démarrage @@ -906,11 +1587,11 @@ commit_repo=a poussé dans %[3]s sur %s#%[2]s` close_issue=`tickets clos %s#%[2]s` reopen_issue=`tickets ré-ouverts %s#%[2]s` -create_pull_request=`pull request créée le %s#%[2]s` -close_pull_request=`pull request fermé %s#%[2]s` -reopen_pull_request=`pull request ré-ouverte %s#%[2]s` +create_pull_request=`a créé la demande d'ajout %s#%[2]s` +close_pull_request=`a fermé la demande d'ajout %s#%[2]s` +reopen_pull_request=`a rouvert la demande d'ajout %s#%[2]s` comment_issue=`a commenté le ticket %s#%[2]s` -merge_pull_request=`demande d'ajout fusionnée le %s#%[2]s` +merge_pull_request=`a fusionné la demande d'ajout %s#%[2]s` transfer_repo=a transféré le dépôt %s à %s push_tag=a soumis le tag %[2]s sur %[3]s delete_tag=étiquette supprimée %[2]s de %[3]s @@ -940,6 +1621,8 @@ raw_seconds=secondes raw_minutes=minutes [dropzone] +default_message=Déposez les fichiers ou cliquez ici pour téléverser. +invalid_input_type=Vous ne pouvez pas téléverser des fichiers de ce type. file_too_big=La taille du fichier ({{filesize}} Mo) dépasse la taille maximale ({{maxFilesize}} Mo). remove_file=Supprimer le fichier @@ -947,6 +1630,8 @@ remove_file=Supprimer le fichier notifications=Notifications unread=Non lue(s) read=Lue(s) +no_unread=Aucune notification non lue. +no_read=Aucune notification lue. pin=Epingler la notification mark_as_read=Marquer comme lu mark_as_unread=Marquer comme non lue @@ -955,8 +1640,12 @@ mark_all_as_read=Tout marquer comme lu [gpg] error.extract_sign=Impossible d'extraire la signature error.generate_hash=Impossible de générer la chaine de hachage de la révision +error.no_committer_account=Aucun compte lié à l'adresse e-mail de l'auteur error.no_gpg_keys_found=Aucune clé connue n'a été trouvée dans la base pour cette signature error.not_signed_commit=Révision non signée +error.failed_retrieval_gpg_keys=Impossible de récupérer la clé liée au compte de l'auteur [units] +error.no_unit_allowed_repo=Vous n'êtes pas autorisé à accéder à n'importe quelle section de ce dépôt. +error.unit_not_allowed=Vous n'êtes pas autorisé à accéder à cette section du dépôt. diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini index 56f14d771..41a56ece8 100644 --- a/options/locale/locale_id-ID.ini +++ b/options/locale/locale_id-ID.ini @@ -1,11 +1,15 @@ +app_desc=Sebuah layanan Git hosting pribadi yang mudah home=Beranda dashboard=Dasbor explore=Jelajahi help=Bantuan sign_in=Masuk +sign_in_with=Masuk Dengan sign_out=Keluar +sign_up=Daftar link_account=Tautan Akun +link_account_signin_or_signup=Masuk dengan kredensial yang ada untuk menautkan akun anda yang ada ke akun ini atau daftar akun yang baru. register=Daftar website=Situs Web version=Versi @@ -13,12 +17,32 @@ page=Halaman template=Contoh language=Bahasa notifications=Notifikasi +create_new=Buat… +user_profile_and_more=Profil dan Pengaturan… signed_in_as=Masuk sebagai +enable_javascript=Situs web ini bekerja lebih baik dengan JavaScript. username=Nama Pengguna +email=Alamat Email password=Kata Sandi +re_type=Ketik Ulang Kata Sandi +captcha=CAPTCHA +twofa=Otentikasi Dua Faktor +twofa_scratch=Kode Awal Dua Faktor passcode=Kode Akses +u2f_insert_key=Masukkan kunci keamanan anda +u2f_sign_in=Tekan tombol pada kunci keamanan anda. Jika anda tidak menemukan tombol, masukkan kembali. +u2f_press_button=Silahkan tekan tombol pada kunci keamanan anda… +u2f_use_twofa=Menggunakan kode dua faktor dari telepon anda +u2f_error=Kami tidak bisa membaca kunci keamanan anda! +u2f_unsupported_browser=Browser anda tidak mendukung kunci U2F. Silakan mencoba browser lain. +u2f_error_1=Terdapat kesalahan yang tidak diketahui. Mohon coba lagi. +u2f_error_2=Pastikan bahwa anda menggunakan koneksi terenkripsi (https://) dan mengunjungi URL yang benar. +u2f_error_3=Server tidak bisa melanjutkan permintaan anda. +u2f_error_4=Kunci tidak layak untuk permintaan ini. Jika Anda mencoba untuk mendaftarkanya, pastikan bahwa kunci sudah tidak terdaftar. +u2f_error_5=Timeout tercapai sebelum kunci anda bisa terbaca. Silahkan muat ulang untuk mencoba kembali. +u2f_reload=Muat Ulang repository=Repositori organization=Organisasi @@ -29,8 +53,12 @@ new_mirror=Duplikat Baru new_fork=Fork Repositori Baru new_org=Organisasi Baru manage_org=Mengelola Organisasi +admin_panel=Administrasi Situs account_settings=Pengaturan Akun settings=Pengaturan +your_profile=Profil +your_starred=Dibintangi +your_settings=Pengaturan all=Semua sources=Sumber @@ -46,34 +74,86 @@ cancel=Batal [install] install=Pemasangan +title=Konfigurasi Awal +docker_helper=Jika Anda menjalankan Gitea di dalam Docker, baca dokumentasi sebelum mengubah pengaturan. +requite_db_desc=Gitea memerlukan MySQL, PostgreSQL, MSSQL, SQLite3 atau TiDB. db_title=Pengaturan Basis Data db_type=Tipe Basis Data host=Host +user=Nama Pengguna password=Kata Sandi db_name=Nama Basis Data +db_helper=Catatan untuk pengguna MySQL: Gunakan mesin penyimpanan InnoDB dan karakter set 'utf8_general_ci'. +ssl_mode=SSL path=Jalur +sqlite_helper=Path berkas untuk basis data SQLite3 atau TiDB.
Masukkan path absolut jika anda menjalankan Gitea sebagai layanan. +err_empty_db_path=Path basis data SQLite3 atau TiDB tidak boleh kosong. +err_invalid_tidb_name=Nama basis data TiDB tidak boleh berisi karakter '.' dan '-'. +no_admin_and_disable_registration=Anda tidak dapat menonaktifkan pendaftaran tanpa membuat akun admin. +err_empty_admin_password=Sandi administrator tidak boleh kosong. +general_title=Pengaturan Umum +app_name=Judul Situs +app_name_helper=Anda dapat memasukkan nama perusahaan anda di sini. repo_path=Path Root Repositori +repo_path_helper=Repositori Git remote akan disimpan ke direktori ini. +lfs_path=Path Akar Git LFS +lfs_path_helper=Berkas yang tersimpan dengan Git LFS akan disimpan ke direktori ini. Biarkan kosong untuk menonaktifkan LFS. +run_user=Jalankan Sebagai Nama Pengguna +run_user_helper=Masukkan nama pengguna sistem operasi yang menjalankan Gitea. Perhatikan bahwa pengguna ini harus memiliki akses ke path akar dari repositori. +domain=SSH Server Domain +domain_helper=Alamat domain atau host untuk URL klon SSH. +ssh_port=Port Server SSH +ssh_port_helper=Nomor port server SSH anda. Biarkan kosong untuk menonaktifkan. +http_port=Port HTTP Gitea +http_port_helper=Nomor port web server dimana Gitea akan berjalan. +app_url=URL Dasar Gitea +app_url_helper=Alamat dasar untuk klon URL HTTP(S) dan pemberitahuan lewat surel. log_root_path=Path Log +log_root_path_helper=Berkas log akan ditulis ke direktori ini. optional_title=Pengaturan Opsional +email_title=Pengaturan Surel smtp_host=Host SMTP +smtp_from=Kirim Surel sebagai +smtp_from_helper=Alamat surel Gitea akan digunakan. Masukkan alamat surel atau gunakan fomat "Nama" . +mailer_user=Nama Pengguna SMTP +mailer_password=Sandi SMTP +register_confirm=Memerlukan Konfirmasi Surel Untuk Mendaftar +mail_notify=Aktifkan Pemberitahuan Surel +server_service_title=Server dan Pengaturan Layanan Pihak Ketiga +offline_mode=Aktifkan Mode Lokal +offline_mode_popup=Non-aktifkan jaringan pengiriman konten dari pihak ketiga dan layani semua sumber daya secara lokal. +disable_gravatar=Non-aktifkan Gravatar federated_avatar_lookup_popup=Mengaktifkan pencarian avatar federasi menggunakan Libravatar. openid_signin=Aktifkan Login OpenID +openid_signup=Aktifkan Pendaftaran OpenID +openid_signup_popup=Aktifkan pendaftaran berdasarkan OpenID. +enable_captcha=Aktifkan CAPTCHA enable_captcha_popup=Membutukan CAPTCHA untuk pendaftaran. +require_sign_in_view=Anda Harus Login untuk Melihat Halaman +admin_title=Pengaturan Akun Admin +admin_name=Nama Pengguna Admin admin_password=Kata sandi confirm_password=Konfirmasi Kata Sandi +admin_email=Alamat Surel install_btn_confirm=Memasang Gitea test_git_failed=Tidak dapat menguji perintah 'git': %v +sqlite3_not_available=Gitea versi ini tidak mendukung SQLite3, Silahkan untuh versi biner resmi dari %s (bukan versi 'gobuild'). +invalid_db_setting=Pengaturan basis data tidak valid: %v save_config_failed=Gagal menyimpan konfigurasi: %v [home] +uname_holder=Nama Pengguna atau Alamat Surel password_holder=Kata Sandi switch_dashboard_context=Alihkan Dasbor Konteks +my_repos=Repositori +show_more_repos=Tampilkan repositori lainnya… collaborative_repos=Repositori Kolaboratif my_orgs=Organisasi Saya my_mirrors=Duplikat Saya view_home=Lihat %s +search_repos=Cari repositori… issues.in_your_repos=Dalam repositori anda @@ -82,9 +162,16 @@ repos=Repositori users=Pengguna organizations=Organisasi search=Cari +code=Kode +repo_no_results=Tidak ditemukan repositori yang cocok. +org_no_results=Tidak ada organisasi yang cocok ditemukan. +code_no_results=Tidak ada kode sumber yang cocok dengan istilah yang anda cari. +code_search_results=Hasil pencarian untuk '%s' [auth] +create_new_account=Daftar Akun register_helper_msg=Sudah memiliki akun? Masuk sekarang! +social_register_helper_msg=Sudah memiliki akun? Hubungkan sekarang! remember_me=Ingat Saya forgot_password_title=Lupa Kata Sandi forgot_password=Lupa kata sandi? @@ -306,14 +393,17 @@ file_permalink=Permalink stored_lfs=Tersimpan dengan GIT LFS editor.preview_changes=Tinjau Perubahan +editor.name_your_file=Nama berkas… editor.or=atau editor.commit_changes=Perubahan komitmen editor.add_tmpl=Tambah '%s/' editor.add=Menambah '%s' editor.update=Memperbarui '%s' editor.delete=Menghapus '%s' +editor.commit_message_desc=Tambahkan deskripsi opsional yang panjang… editor.commit_directly_to_this_branch=Komitmen langsung ke %s cabang. editor.create_new_branch=Membuat new branch untuk tarik komit ini mulai permintaan. +editor.new_branch_name_desc=Nama branch baru… editor.cancel=Membatalkan editor.branch_already_exists=Cabang '%s' sudah ada di repositori ini. editor.no_changes_to_show=Tidak ada perubahan untuk ditampilkan. @@ -406,6 +496,7 @@ issues.edit=Sunting issues.cancel=Batal issues.save=Simpan issues.label_title=Nama label +issues.label_description=Keterangan label issues.label_color=Warna label issues.label_count=%d label issues.label_open_issues=%d masalah terbuka @@ -547,6 +638,7 @@ settings.transfer=Transfer Kepemilikan settings.delete=Menghapus Repositori Ini settings.delete_notices_1=- Operasi ini TIDAK BISA dibatalkan. settings.transfer_owner=Pemilik Baru +settings.search_user_placeholder=Cari pengguna… settings.add_webhook=Tambahkan Webhook settings.webhook.test_delivery=Percobaan Pengiriman settings.webhook.request=Permintaan @@ -584,6 +676,7 @@ settings.protected_branch_can_push_yes=Anda dapat mendorong settings.protected_branch_can_push_no=Anda tidak dapat mendorong settings.add_protected_branch=Aktifkan perlindungan settings.delete_protected_branch=Nonaktifkan perlindungan +settings.choose_branch=Pilih branch… diff.browse_source=Telusuri Sumber diff.parent=orang tua @@ -612,6 +705,7 @@ release.title=Judul release.content=Konten release.write=Menulis release.preview=Pratinjau +release.loading=Memuat… release.cancel=Membatalkan release.publish=Mempublikasikan Rilis release.save_draft=Simpan Draft @@ -636,6 +730,8 @@ people=Orang teams=Tim lower_members=anggota lower_repositories=repositori +create_new_team=Tim Baru +create_team=Buat Tim Baru org_desc=Deskripsi team_name=Nama tim team_desc=Deskripsi @@ -672,6 +768,7 @@ teams.update_settings=Memperbarui pengaturan teams.add_team_member=Tambahkan Anggota Tim teams.delete_team_success=Tim sudah di hapus. teams.repositories=Tim repositori +teams.search_repo_placeholder=Cari repositori… teams.add_team_repository=Tambahkan Tim Repositori teams.remove_repo=Menghapus teams.add_nonexistent_repo=Repositori yang ingin Anda tambahkan tidak ada; Silahkan buat terlebih dahulu. @@ -697,6 +794,7 @@ dashboard.delete_inactivate_accounts_success=Semua akun yang tidak aktif telah d dashboard.reinit_missing_repos=Menginstal kembali semua repositori Git yang hilang dimana ada catatan dashboard.reinit_missing_repos_success=Semua repositori Git yang hilang yang catatannya dan telah diinisialisasi ulang. dashboard.sync_external_users=Sinkronkan data pengguna eksternal +dashboard.git_fsck=Lakukan pemeriksaan kesehatan pada semua repositori dashboard.server_uptime=Waktu tambahan server dashboard.current_goroutine=Goroutin saat ini dashboard.current_memory_usage=Penggunaan memori saat ini @@ -709,6 +807,8 @@ dashboard.heap_memory_idle=Tumpukan memori yang menganggur dashboard.heap_memory_in_use=Tumpukan memori yang digunakan dashboard.heap_memory_released=Tumpukan memori dirilis dashboard.heap_objects=Benda tumpukan +dashboard.bootstrap_stack_usage=Penggunaan bootstrap Stack +dashboard.stack_memory_obtained=Memori Stack Didapat dashboard.mspan_structures_usage=Penggunaan struktur MSpan dashboard.mspan_structures_obtained=Struktur MSpan didapatkan dashboard.mcache_structures_usage=Penggunaan struktur MCache @@ -725,6 +825,7 @@ dashboard.gc_times=Waktu GC users.activated=Diaktifkan users.admin=Pengelola +users.repos=Repo users.created=Dibuat users.edit=Edit users.auth_source=Sumber Otentikasi @@ -795,16 +896,24 @@ config.disable_router_log=Menonaktifkan router log config.run_mode=Jalankan mode config.git_version=Versi Git config.repo_root_path=Jalur akar repositori +config.lfs_root_path=Path Root LFS config.static_file_root_path=Jalur akar berkas statis config.script_type=Jenis skrip config.reverse_auth_user=Mengembalikan pengguna otentikasi config.ssh_config=Konfigurasi SSH config.ssh_enabled=Aktif +config.ssh_port=Port +config.ssh_listen_port=Listen Port +config.ssh_root_path=Path Induk +config.ssh_key_test_path=Path Key Test +config.ssh_keygen_path=Path Keygen ('ssh-keygen') config.ssh_minimum_key_size_check=Periksa ukuran kunci minimum config.ssh_minimum_key_sizes=Ukuran kunci minimum config.db_config=Konfigurasi basis data +config.db_type=Tipe +config.db_host=Host config.db_name=Nama config.db_path=Jalur diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini index e3b752851..d3aa6c609 100644 --- a/options/locale/locale_it-IT.ini +++ b/options/locale/locale_it-IT.ini @@ -169,7 +169,7 @@ profile=Profilo password=Password security=Sicurezza avatar=Avatar -ssh_gpg_keys=SSH / GPG chiavi +ssh_gpg_keys=Chiavi SSH / GPG social=Account Sociali repos=Repository delete=Elimina account @@ -201,7 +201,7 @@ add_openid=Aggiungere OpenID URI manage_ssh_keys=Gestisci chiavi SSH manage_gpg_keys=Gestisci Chiavi GPG add_key=Aggiungi Chiave -ssh_helper= Hai bisogno di aiuto? Dai un'occhiata alla guida di GitHub crea le tue chiavi SSH o risolvere problemi comuni puoi trovare usando SSH. +ssh_helper= Hai bisogno di aiuto? Dai un'occhiata alla guida di GitHub percrea le tue chiavi SSH o risolvere problemi comuni che potresti trovare utilizzando SSH. gpg_helper=Hai bisogno di aiuto? Dai un'occhiata alla guida di GitHub riguardo il GPG. add_new_key=Aggiungi Chiave SSH add_new_gpg_key=Aggiungi Chiave GPG @@ -302,7 +302,7 @@ editor.delete=Eliminare '%s' editor.commit_directly_to_this_branch=Impegnarsi direttamente con il %s branch. editor.create_new_branch=Creare un nuovo branch per questo commit e inizia una pull request. editor.cancel=Cancellare -editor.branch_already_exists=Branch '%s' esiste già in questo repository. +editor.branch_already_exists=Il branch '%s' esiste già in questo repository. editor.no_changes_to_show=Non ci sono cambiamenti da mostrare. editor.fail_to_update_file=Errore durante l'aggiornamento/ creazione del file '%s' con errore: %v editor.unable_to_upload_files=Impossibile caricare i file su '%s' con errore:%v @@ -513,7 +513,7 @@ settings.confirm_delete_account=Conferma Eliminazione members.member_role=Ruolo del membro: members.owner=Proprietario members.member=Membro -members.remove=Rimuovere +members.remove=Rimuovi members.leave=Abbandona members.invite_desc=Aggiungi un nuovo membro a %s: members.invite_now=Invita ora @@ -526,7 +526,7 @@ teams.no_desc=Questo team non ha alcuna descrizione teams.settings=Impostazioni teams.members=Membri del Team teams.update_settings=Aggiorna Impostazioni -teams.add_team_member=Aggiungere un Membro al Team +teams.add_team_member=Aggiungi un Membro al Team teams.repositories=Repository di Squadra teams.add_team_repository=Aggiungere Repository di Squadra teams.remove_repo=Rimuovi @@ -619,7 +619,7 @@ auths.tips=Consigli config.server_config=Configurazione Server config.disable_router_log=Disattivare Log del Router config.run_mode=Modalità Esecuzione -config.repo_root_path=Percorso Root del Repository +config.repo_root_path=Percorso radice del Repository config.static_file_root_path=Percorso Root del File Statico config.script_type=Tipo di Script config.reverse_auth_user=Autenticazione Utente Inversa @@ -685,7 +685,7 @@ config.git_mirror_timeout=Timeout per l'aggiornamento del mirror config.log_config=Configurazione Log config.log_mode=Modalità Log -monitor.cron=Incarici di cron +monitor.cron=Incarichi Cron monitor.name=Nome monitor.schedule=Agenda monitor.next=La Prossima Volta @@ -717,7 +717,7 @@ close_pull_request=`richiesta di pull chiuso %s#%[2]s` reopen_pull_request=`richiesta di riapertura riaperta %s#%[2]s` comment_issue=`ha commentato il problema %s#%[2]s` merge_pull_request=`unita pull request %s#%[2]s` -transfer_repo=ha trasferito il repository %s a %s +transfer_repo=repository %s trasferito in %s push_tag=ha pushato il tag %[2]s a %[3]s delete_tag=tag eliminato %[2]s da %[3]s delete_branch=branch eliminato %[2]s da %[3]s diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini index ea32ad3c3..c3a610908 100644 --- a/options/locale/locale_ja-JP.ini +++ b/options/locale/locale_ja-JP.ini @@ -1,9 +1,11 @@ +app_desc=痛みのない、自己ホスト型の Git サービス home=ホーム dashboard=ダッシュボード explore=エクスプローラ help=ヘルプ sign_in=サインイン +sign_in_with=サインインします。 sign_out=サインアウト link_account=連携アカウント register=登録 diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini index 1b0129ba1..0a6950b84 100644 --- a/options/locale/locale_lv-LV.ini +++ b/options/locale/locale_lv-LV.ini @@ -1,11 +1,15 @@ +app_desc=Viegli uzstādāms Git serviss home=Sākums dashboard=Infopanelis explore=Izpētīt help=Palīdzība sign_in=Pierakstīties +sign_in_with=Pierakstīties izmantojot sign_out=Izrakstīties +sign_up=Reģistrēties link_account=Saistītie konti +link_account_signin_or_signup=Autorizējieties ar esošo lietotāja vārdu un paroli, lai piesaistītu esošam kontam, vai reģistrējieties, ja nepieciešams izveidot jaunu. register=Reģistrēties website=Mājas lapa version=Versija @@ -14,12 +18,31 @@ template=Sagatave language=Valoda notifications=Paziņojumi create_new=Izveidot… +user_profile_and_more=Profils un iestatījumi… signed_in_as=Pierakstījies kā +enable_javascript=Šī lapa labāk darbojas, ja pārlūkam ir iespējots JavaScript. username=Lietotājvārds +email=E-pasta adrese password=Parole +re_type=Atkārtoti ievadiet paroli +captcha=Cilvēktests +twofa=Divu faktoru autentifikācija +twofa_scratch=Divu faktoru vienreizējais kods passcode=Kods +u2f_insert_key=Ievietojiet Jūsu drošības atslēgu +u2f_sign_in=Nospiediet drošības atslēgas pogu. Ja nevarat to atrast, ievietojiet atkārtoti. +u2f_press_button=Nospiediet drošības atslēgas pogu… +u2f_use_twofa=Izmantot divu faktoru kodu no tālruņa +u2f_error=Nav iespējams nolasīt drošības atslēgu! +u2f_unsupported_browser=Jūsu pārlūks neatbalsta U2F atslēgas. Izmantojiet citu pārlūku. +u2f_error_1=Notikusi nezināma kļūda. Atkārtojiet darbību vēlreiz. +u2f_error_2=Pārliecinieties, ka izmantojat šifrētu savienojumu (https://) un apmeklējat pareizo URL. +u2f_error_3=Serveris nevar apstrādāt Jūsu pieprasījumu. +u2f_error_4=Nav iespējams izmantot atslēgu šim pieprasījumam. Ja mēģināt to reģistrēt, pārliecinieties, ka atslēga jau nav reģistrēta. +u2f_error_5=Iestājusies noildze nolasot atslēgu. Pārlādējiet lapu, lai atkārtotu vēlreiz. +u2f_reload=Pārlādēt repository=Repozitorijs organization=Organizācija @@ -30,8 +53,12 @@ new_mirror=Jauns spogulis new_fork=Jauns atdalīts repozitorijs new_org=Jauna organizācija manage_org=Pārvaldīt organizācijas +admin_panel=Lapas administrēšana account_settings=Konta iestatījumi settings=Iestatījumi +your_profile=Profils +your_starred=Atzīmēts ar zvaigznīti +your_settings=Iestatījumi all=Visi sources=Avoti @@ -47,31 +74,101 @@ cancel=Atcelt [install] install=Instalācija +title=Sākotnējā konfigurācija +docker_helper=Ja Gitea ir uzstādīts Docker konteinerī, izlasiet vadlīninas pirms maināt iestatījumus. +requite_db_desc=Gitea nepieciešams MySQL, PostgreSQL, MSSQL, SQLite3 vai TiDB. db_title=Datu bāzes iestatījumi db_type=Datu bāzes veids host=Resursdators +user=Lietotāja vārds password=Parole db_name=Datu bāzes nosaukums +db_helper=MySQL lietotājiem: izmantojiet InnoDB dzini ar rakstzīmju kopu 'utf8_general_ci'. +ssl_mode=SSL path=Ceļš +sqlite_helper=Faila ceļš SQLite3 vai TiDB datu bāzei.
Ievadiet absolūto ceļu, ja Gitea tiek startēts kā serviss. +err_empty_db_path=Nepieciešams norādīt SQLite3 vai TiDB datu bāzes atrašanās vietu. +err_invalid_tidb_name=TiDB datu bāzes nosaukums nevar saturēt simbolus '.' un '-'. +no_admin_and_disable_registration=Reģistrāciju nevar atslēgt, kamēr nav izveidots administratora konts. +err_empty_admin_password=Administratora kontam ir obligāti jānorāda parole. +general_title=Vispārīgie iestatījumi +app_name=Vietnes nosaukums +app_name_helper=Šeit var ievadīt savas kompānijas nosaukumu. repo_path=Repozitoriju glabāšanas ceļš +repo_path_helper=Git repozitoriji tiks glabāti šajā direktorijā. +lfs_path=Git LFS glabāšanas vieta +lfs_path_helper=Faili, kas pievienoti Git LFS, tiks glabāti šajā direktorijā. Atstājiet tukšu, lai atspējotu. +run_user=Izpildes lietotājs +run_user_helper=Norādiet operētājsistēmas lietotājvārdu ar kuru tiks izpildīts Gitea process. Ņemiet vērā, ka lietotājam ir jābūt rakstīšanas tiesībām repozitoriju glabāšanas vietai. +domain=SSH servera domēns +domain_helper=Domēns vai saimniekdatora adrese SSH klonēšanas URL. +ssh_port=SSH servera ports +ssh_port_helper=Porta numurs, kuru SSH serveris klausīsies. Atstājiet tukšu, lai atspējotu. +http_port=Gitea HTTP klausīšanās ports +http_port_helper=Porta numurs, kuru Gitea tīmekļa serveris klausīsies. +app_url=Gitea pamata URL +app_url_helper=Pamata adrese HTTP(S) klonēšanas URL un e-pastu paziņojumiem. log_root_path=Žurnalizēšanas ceļš +log_root_path_helper=Žurnalizēšanas faili tiks rakstīti šajā direktorijā. optional_title=Neobligātie iestatījumi +email_title=E-pastu iestatījumi smtp_host=SMTP resursdators +smtp_from=Nosūtīt e-pastu kā +smtp_from_helper=E-pasta adrese, ko Gitea izmantos. Ievadiet tika e-pasta adrese vai izmantojiet "Vārds" formātu. +mailer_user=SMTP lietotāja vārds +mailer_password=SMTP parole +register_confirm=Reģistrējoties pieprasīt apstiprināt e-pastu +mail_notify=Iespējot e-pasta paziņojumus +server_service_title=Servera un citu servisu iestatījumi +offline_mode=Iespējot bezsaistes režīmu +offline_mode_popup=Atspējot ārējos satura piegādes tīklus, lai visi resursi tiktu piegādāti lokāli. +disable_gravatar=Atspējot Gravatar +disable_gravatar_popup=Atspējot Gravatar un citus avotus, visus avatarus augšupielādēts lietotāji vai izmantos noklusēto attēlu. +federated_avatar_lookup=Iespējot apvienotās profila bildes federated_avatar_lookup_popup=Iespējot apvienoto profila bilžu meklētāju, lai izmantotu atvērtā koda apvienoto servisu balstītu uz libravatar. +disable_registration=Atspējot lietotāju reģistrāciju +disable_registration_popup=Atspējot iespēju reģistrēties. Tikai administratori varēs izveidot jaunus kontus. +allow_only_external_registration_popup=Ļaut reģistrēties tikai izmantojot ārējos pakalpojumus. openid_signin=Iespējot OpenID autorizāciju openid_signin_popup=Iespējot lietotāju autorizāciju ar OpenID. +openid_signup=Iespējot reģistrāciju, izmantojot OpenID +openid_signup_popup=Iespējot lietotāju reģistrāciju pirms tam autorizējoties ar OpenID. +enable_captcha=Iespējot drošības kodu enable_captcha_popup=Lietotājam reģistrējoties, pieprasīt ievadīt drošības kodu. +require_sign_in_view=Iespējot nepieciešamību autorizēties, lai aplūkotu lapas +require_sign_in_view_popup=Tikai autorizēti lietotāji var aplūkot lapas. Apmeklētāji redzēs tikai autorizācijas un reģistrācijas lapu. +admin_setting_desc=Nav nepieciešams izveidot administratora kontu uzreiz, pirmais reģistrētais lietotājs saņems administratora tiesības automātiski. +admin_title=Administratora konta iestatījumi +admin_name=Administratora lietotāja vārds admin_password=Parole confirm_password=Apstipriniet paroli +admin_email=E-pasta adrese install_btn_confirm=Instalēt Gitea test_git_failed=Kļūda pārbaudot 'git' komandu: %v +sqlite3_not_available=Jūsu pašreizējā versija neatbalsta SQLite3, lūdzu lejupielādējiet oficiālo bināro versiju no %s, NEVIS gobuild versiju. +invalid_db_setting=Nederīgi datu bāzes iestatījumi: %v +invalid_repo_path=Nederīga repozitorija glabāšanas vieta: %v +run_user_not_match=Izpildes lietotājs nav pašreizējais lietotājs: %s -> %s save_config_failed=Neizdevās saglabāt konfigurāciju: %v +invalid_admin_setting=Nederīgs administratora iestatījums: %v +install_success=Laipni lūdzam! Paldies, ka izvēlējāties Gitea, patīkamu lietošanu! +invalid_log_root_path=Nederīgs žurnalizēšanas ceļš: %v +default_keep_email_private=Pēc noklusējuma slēpt e-pasta adreses +default_keep_email_private_popup=Šī ir noklusētā pazīme, lai noteiktu lietotāja e-pasta adreses redzamību. Atzīmējot to e-pasta adrese visiem jaunajiem lietotājiem nebūs redzama līdz lietotājs neizmainīs to savos iestatījumos. +default_allow_create_organization=Pēc noklusējuma ļaut veidot organizācijas +default_allow_create_organization_popup=Atzīmējiet šo pazīmi, ja vēlaties, lai jauniem lietotājiem pēc noklusējuma tiek piešķirtas tiesības veidot organizācijas. +default_enable_timetracking=Pēc noklusējuma iespējot laika uzskaiti +default_enable_timetracking_popup=Repozitorijiem pēc noklusējuma tiks iespējota laika uzskaite atkarībā no šī iestatījuma. +no_reply_address=Neatbildēt e-pasta adreses domēns +no_reply_address_helper=Domēns lietotāja e-pasta adresei git žurnālos, ja lietotājs izvēlas paturēt savu e-pasta adresi privātu. Piemēram, ja lietotājs ir 'janis' un domēns 'neatbildet.piemers.lv', tad e-pasta adrese būs 'janis@neatbildet.piemers.lv'. [home] +uname_holder=Lietotājvārds vai e-pasts password_holder=Parole switch_dashboard_context=Mainīt infopaneļa kontekstu +my_repos=Repozitoriji show_more_repos=Parādīt vairāk repozitorijus… collaborative_repos=Sadarbības repozitoriji my_orgs=Manas organizācijas @@ -87,30 +184,52 @@ users=Lietotāji organizations=Organizācijas search=Meklēt code=Kods +repo_no_results=Netika atrasts neviens repozitorijs, kas atbilstu kritērijiem. +user_no_results=Netika atrasts neviens lietotājs, kas atbilstu kritērijiem. +org_no_results=Netika atrasta neviena organizācija, kas atbilstu kritērijiem. +code_no_results=Netika atrasts pirmkods, kas atbilstu kritērijiem. +code_search_results=Meklēšanas rezultāti '%s' [auth] +create_new_account=Reģistrēt kontu register_helper_msg=Jau ir konts? Pieraksties tagad! +social_register_helper_msg=Jau ir konts? Pievienojies! +disable_register_prompt=Reģistrācija ir atspējota. Lūdzu, sazinieties ar vietnes administratoru. +disable_register_mail=Reģistrācijas e-pasta apstiprināšana ir atspējota. remember_me=Atcerēties mani forgot_password_title=Aizmirsu paroli forgot_password=Aizmirsi paroli? +sign_up_now=Nepieciešams konts? Reģistrējies tagad. confirmation_mail_sent_prompt=Jauns apstiprināšanas e-pasts ir nosūtīts uz %s, pārbaudies savu e-pasta kontu tuvāko %s laikā, lai pabeigtu reģistrācijas procesu. reset_password_mail_sent_prompt=Apstiprināšanas e-pasts tika nosūtīts uz %s. Pārbaudiet savu e-pasta kontu tuvāko %s laikā, lai pabeigtu paroles atjaunošanas procesu. active_your_account=Aktivizēt savu kontu +prohibit_login=Aizliegt pieteikšanos +prohibit_login_desc=Jūsu konts ir bloķēts, sazinieties ar sistēmas administratoru. +resent_limit_prompt=Jūs pieprasījāt aktivizācijas e-pastu pārāk bieži. Lūdzu, uzgaidiet 3 minūtes un mēģiniet vēlreiz. has_unconfirmed_mail=Sveiki %s, Jums ir neapstiprināta e-pasta adrese (%s). Ja neesat saņēmis apstiprināšanas e-pastu vai Jums ir nepieciešams nosūtīt jaunu, lūdzu, nospiediet pogu, kas atrodas zemāk. resend_mail=Nospiediet šeit, lai vēlreiz nosūtītu aktivizācijas e-pastu email_not_associate=Šī e-pasta adrese nav saistīta ar nevienu kontu. send_reset_mail=Spiediet šeit, lai nosūtītu paroles maiņas vēstuli uz Jūsu e-pastu reset_password=Atjaunot savu paroli +invalid_code=Jūsu apstiprināšanas kodam ir beidzies derīguma termiņš vai arī tas ir nepareizs. reset_password_helper=Nospiediet šeit, lai atjaunotu paroli +password_too_short=Paroles garums nedrīkst būt mazāks par %d simboliem. +non_local_account=Ārējie konti nevar mainīt paroli, izmantojot, Gitea saskarni. verify=Pārbaudīt scratch_code=Vienreizējais kods use_scratch_code=Izmantot vienreizējo kodu twofa_scratch_used=Jūs esat izmantojis vienreizējo kodu. Jūs tikāt pārsūtīts uz divu faktoru iestatījumu lapu, lai varētu piesaistīto ierīci vai lai uzģenerētu jaunu vienreizējo kodu. +twofa_passcode_incorrect=Jūsu kods nav pareizs. Ja esat pazaudējis ierīci, izmantojiet vienreizējo kodu, lai autorizētos. twofa_scratch_token_incorrect=Ievadīts nepareizs vienreizējais kods. +login_userpass=Pierakstīties login_openid=OpenID openid_connect_submit=Pievienoties openid_connect_title=Pievienoties jau esošam kontam +openid_connect_desc=Izvēlētais OpenID konts sistēmā netika atpazīts, bet Jūs to varat piesaistīt esošam kontam. openid_register_title=Izveidot jaunu kontu +openid_register_desc=Izvēlētais OpenID konts sistēmā netika atpazīts, bet Jūs to varat piesaistīt esošam kontam. +openid_signin_desc=Ievadiet savu OpenID URI, piemēram: https://anna.me, peteris.openid.org.lv, gnusocial.net/janis. +disable_forgot_password_mail=Paroles atjaunošana nav pieejama. Sazinieties ar sistēmas administratoru. [mail] activate_account=Lūdzu, aktivizējiet savu kontu @@ -122,12 +241,14 @@ register_notify=Laipni lūdzam Gitea [modal] yes=Jā no=Nē +modify=Atjaunināt [form] UserName=Lietotājvārds RepoName=Repozitorija nosaukums Email=E-pasta adrese Password=Parole +Retype=Atkārtoti ievadiet paroli SSHTitle=SSH atslēgas nosaukums HttpsUrl=HTTPS URL PayloadUrl=Vērtuma URL @@ -143,6 +264,9 @@ TreeName=Faila ceļš Content=Saturs require_error=` nedrīkst būt tukšs.` +alpha_dash_error=` drīkst saturēt tikai latīņu alfabēta burtus, ciparus vai domuzīmes (-_).` +alpha_dash_dot_error=` drīkst saturēt tikai latīņu alfabēta burtus, ciparus, domuzīmes (-_) vai punktu.` +git_ref_name_error=` jābūt korektam git references nosaukumam.` size_error=` jābūt %s simbolus garam.` min_size_error=` jabūt vismaz %s simbolu garumā.` max_size_error=` jabūt ne mazāk kā %s simbolu garumā.` @@ -150,70 +274,148 @@ email_error=` nav derīga e-pasta adrese.` url_error=` nav korekts URL.` include_error=` ir jāsatur tekstu '%s'.` unknown_error=Nezināma kļūda: +captcha_incorrect=Ievadīts nepareizs drošības kods. +password_not_match=Izvēlētā parole nesakrīt ar atkārtoti ievadīto. +username_been_taken=Lietotājvārds jau ir aizņemts. +repo_name_been_taken=Jau eksistē repozitorijs ar šādu nosaukumu. +org_name_been_taken=Organizācijas nosaukums jau ir aizņemts. +team_name_been_taken=Komandas nosaukums jau ir aizņemts. +team_no_units_error=Komandai ir jābūt iespējotai vismaz vienai sadaļai. +email_been_used=E-pasta adrese jau ir izmantota. +openid_been_used=OpenID adrese '%s' jau ir izmantota. +username_password_incorrect=Nepareizs lietotājvārds vai parole. +enterred_invalid_repo_name=Pārliecinieties, vai ievadītā repozitorija nosaukums ir pareizs. +enterred_invalid_owner_name=Pārliecinieties, vai ievadītā īpašnieka vārds ir pareizs. +enterred_invalid_password=Pārliecinieties, vai ievadītā parole ir pareiza. user_not_exist=Lietotājs neeksistē. +last_org_owner=Nevar noņemt pēdējo īpašnieku komandas lietotāju, jo organizācijām ir jābūt vismaz vienam īpašniekam. +cannot_add_org_to_team=Organizāciju nevar pievienot kā komandas biedru. +invalid_ssh_key=Nav iespējams pārbaudīt SSH atslēgu: %s +invalid_gpg_key=Nav iespējams pārbaudīt GPG atslēgu: %s +unable_verify_ssh_key=SSH atslēgu nav iespējams pārbaudīt, pārliecinieties, ka tajā nav kļūdu. auth_failed=Autentifikācija neizdevās: %v +still_own_repo=Šis konts ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku. +still_has_org=Jūsu konts ir piesaistīts vismaz vienai organizācijai, sākumā nepieciešams to pamest. +org_still_own_repo=Organizācijai pieder repozitoriji, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku. target_branch_not_exist=Mērķa atzars neeksistē [user] +change_avatar=Mainīt profila attēlu… join_on=Pievienojās repositories=Repozitoriji activity=Publiskā aktivitāte followers=Sekotāji +starred=Atzīmēti repozitoriji following=Seko follow=Sekot unfollow=Nesekot form.name_reserved=Lietotājvārdu '%s' nedrīkst izmantot. +form.name_pattern_not_allowed=Lietotājvārds '%s' nav atļauts. [settings] profile=Profils +account=Konts password=Parole security=Drošība avatar=Profila attēls ssh_gpg_keys=SSH / GPG atslēgas social=Sociālie konti +applications=Lietotnes +orgs=Pārvaldīt organizācijas repos=Repozitoriji delete=Dzēst kontu twofa=Divu faktoru autentifikācija +account_link=Saistītie konti +organization=Organizācijas uid=Lietotāja ID +u2f=Drošības atslēgas public_profile=Publiskais profils +profile_desc=Konta e-pasta adrese ir publiska un tiks izmantota visiem ar kontu saistītiem paziņojumiem un no pārlūka veiktajām darbībām. +password_username_disabled=Ārējiem lietotājiem nav atļauts mainīt savu lietotāja vārdu. Sazinieties ar sistēmas administratoru, lai uzzinātu sīkāk. full_name=Pilns vārds website=Mājas lapa location=Atrašanās vieta update_profile=Mainīt profilu update_profile_success=Jūsu profila informācija tika saglabāta. +change_username=Lietotājvārds mainīts. +change_username_prompt=Piezīme: Šī darbība izmainīs norādes uz šo kontu. continue=Turpināt cancel=Atcelt +language=Valoda +lookup_avatar_by_mail=Meklēt profila bildes pēc e-pasta federated_avatar_lookup=Apvienotais profila bilžu meklētājs enable_custom_avatar=Iespējot maināmu profila attēlu choose_new_avatar=Izvēlēties jaunu profila attēlu +update_avatar=Saglabāt profila bildi delete_current_avatar=Dzēst pašreizējo profila bildi +uploaded_avatar_not_a_image=Augšupielādētais fails nav attēls. +update_avatar_success=Profila attēls tika saglabāts. +change_password=Atjaunināt paroli old_password=Pašreizējā parole new_password=Jauna parole +retype_new_password=Ievadīt paroli atkāroti +password_incorrect=Ievadīta nepareiza pašreizējā parole. +change_password_success=Parole tika veiksmīgi nomainīta. Tagad varat autorizēties ar jauno paroli. +password_change_disabled=Ārējie konti nevar mainīt paroli, izmantojot, Gitea saskarni. emails=E-pasta adreses +manage_emails=Pārvaldīt e-pasta adreses +manage_openid=Pārvaldīt OpenID adreses email_desc=Primārā e-pasta adrese tiks izmantota sūtot notifikācijas un citām dabībām. primary=Primārā +primary_email=Uzstādīt kā primāro +delete_email=Noņemt +email_deletion=Dzēst e-pasta adresi +email_deletion_desc=E-pasta adrese un ar to saistītā informācija tiks dzēsta no šī konta. Git revīzijas ar šo e-pasta adresi netiks mainītas. Vai turpināt? +email_deletion_success=E-pasta adrese ir veiksmīgi izdzēsta. +openid_deletion=Dzēst OpenID adresi +openid_deletion_desc=Dzēšot šo OpenID adresi no Jūsu konta, ar to vairs nebūs iespējams autorizēties. Vai turpināt? +openid_deletion_success=OpenID adrese tika noņemta. +add_new_email=Pievienot jaunu e-pasta adresi +add_new_openid=Pievienot jaunu OpenID vietrādi +add_email=Pievienot e-pasta adresi add_openid=Pievienot OpenID vietrādi +add_email_confirmation_sent=Jauns apstiprināšanas e-pasts tika nosūtīts uz '%s'. Pārbaudiet savu e-pasta kontu tuvāko %s laikā, lai apstiprinātu savu e-pasta adresi. +add_email_success=Jūsu jaunā e-pasta adrese tika veiksmīgi pievienota. +add_openid_success=Jūsu jaunā OpenID adrese tika veiksmīgi pievienota. +keep_email_private=Paslēpt e-pasta adresi +keep_email_private_popup=Jūsu e-pasta adrese nebūs redzama citiem lietotājiem. +openid_desc=Jūsu OpenID adreses ļauj autorizēties, izmantojot, Jūsu izvēlēto pakalpojumu sniedzēju. manage_ssh_keys=Pārvaldīt SSH atslēgas manage_gpg_keys=Pārvaldīt GPG atslēgas add_key=Pievienot atslēgu +ssh_desc=Šīs SSH atslēgas ir piesaistītas Jūsu kontam. Ir svarīgi pārliecināties, ka visas atpazīstat, jo tās ļauj piekļūt Jūsu repozitorijiem. +gpg_desc=Šīs publiskās GPG atslēgas ir saistītas ar Jūsu kontu. Paturiet privātās atslēgas drošībā, jo tās ļauj parakstīt revīzijas. ssh_helper=Vajadzīga palīdzība? Iepazīstieties ar GitHub pamācību kā izveidot jaunu SSH atslēgu vai atrisinātu biežāk sastopamās problēmas ar kurām varat saskarties, izmantojot SSH. gpg_helper=Vajadzīga palīdzība? Iepazīstieties ar GitHub pamācību par GPG. add_new_key=Pievienot SSH atslēgu add_new_gpg_key=Pievienot GPG atslēgu +ssh_key_been_used=SSH atslēga jau ir pievienota kādam kontam. +ssh_key_name_used=Publiskā atslēga ar šādu nosaukumu jau eksistē Jūsu kontā. +gpg_key_id_used=Publiskā GPG atslēga ar šādu ID jau eksistē. +gpg_no_key_email_found=Jūsu kontam nav piesaistīta neviena no šīs GPG atslēgas e-pasta adresēm. subkeys=Apakšatslēgas key_id=Atslēgas ID key_name=Atslēgas nosaukums key_content=Saturs +add_key_success=SSH atslēga '%s' tika pievienota. +add_gpg_key_success=GPG atslēga '%s' tika pievienota. +delete_key=Noņemt +ssh_key_deletion=Noņemt SSH atslēgu +gpg_key_deletion=Noņemt GPG atslēgu +ssh_key_deletion_desc=Dzēšot šo SSH atslēgu, ar to vairs nebūs iespējams autorizēties Jūsu kontā. Vai turpināt? +gpg_key_deletion_desc=Noņemot GPG atslēgu, ar to parakstītās revīzijas vairs netiks attēlotas kā verificētas. Vai turpināt? +ssh_key_deletion_success=SSH atslēga tika izdzēsta. +gpg_key_deletion_success=GPG atslēga tika izdzēsta. add_on=Pievienota valid_until=Derīga līdz valid_forever=Derīgs mūžīgi @@ -225,40 +427,95 @@ key_state_desc=Šī atslēga ir izmantota pēdējo 7 dienu laikā token_state_desc=Šis talons ir izmantots pēdējo 7 dienu laikā show_openid=Rādīt profilā hide_openid=Paslēpt no profila +ssh_disabled=SSH atspējots manage_social=Pārvaldīt piesaistītos sociālos kontus +social_desc=Šis ir saraksts ar Jūsu Gitea kontam piesaistītajiem sociālajiem kontiem. Drošības nolūkos, pārliecinieties, ka atpazīstat visus no tiem, jo tos var izmantot, lai pieslēgtos Jūsu Gitea kontam. +unbind=Atsaistīt +unbind_success=Sociālais konts tika atsaistīts no Jūsu Gitea konta. +manage_access_token=Pārvaldīt piekļuves talonus generate_new_token=Ģenerēt jaunu talonu +tokens_desc=Ar šiem taloniem ir iespējams piekļūt Jūsu kontam, izmantojot, Gitea API. +new_token_desc=Lietojumprogrammām, izmantojot talonus, ir pilna piekļuve Jūsu kontam. token_name=Talona nosaukums generate_token=Ģenerēt talonu +generate_token_success=Piekļuves talons tika veiksmīgi uzģenerēts! Nokopējiet to tagad, jo vēlāk to vairs nebūs iespējams redzēt. delete_token=Dzēst +access_token_deletion=Dzēst piekļuves talonu +access_token_deletion_desc=Dzēšot piekļuves talonu tiks liegta piekļuve visām aplikācijām, kas to izmanto. Vai turpināt? +delete_token_success=Piekļuves talons tika noņemts. Neaizmirstiet atjaunot informāciju lietojumprogrammās, kas izmantoja šo talonu. +twofa_desc=Divu faktoru autentifikācija uzlabo Jūsu konta drošību. twofa_is_enrolled=Kontam ir ieslēgta divu faktoru autentifikācija. twofa_not_enrolled=Jūsu kontam nav ieslēgta divu faktoru autentifikācija. +twofa_disable=Atslēgt divu faktoru autentifikāciju +twofa_scratch_token_regenerate=Ģenerēt jaunu vienreizējo kodu +twofa_scratch_token_regenerated=Tagad Jūsu vienreizējais kods ir %s. Saglabājiet to drošā vietā. +twofa_enroll=Ieslēgt divu faktoru autentifikāciju +twofa_disable_note=Nepieciešamības gadījumā divu faktoru autentifikāciju ir iespējams atslēgt. +twofa_disable_desc=Atslēdzot divu faktoru autentifikāciju Jūsu konts vairs nebūs tik drošs. Vai turpināt? +regenerate_scratch_token_desc=Ja esat aizmirsis vienreizējo kodu vai jau esat to izmantojis, lai autorizētos, atjaunojiet to šeit. twofa_disabled=Divu faktoru autentifikācija ir atslēgta. scan_this_image=Noskenējiet šo attēlu ar autentifikācijas lietojumprogrammu: or_enter_secret=Vai ievadiet šo noslēpumu: %s +then_enter_passcode=Ievadiet piekļuves kodu no lietojumprogrammas: +passcode_invalid=Nederīgs piekļuves kods. Mēģiniet ievadīt atkārtoti. +twofa_enrolled=Kontam tagad ir ieslēgta divu faktoru autentifikācija. Saglabājiet savu vienreizējo kodu (%s), jo tas vairāk netiks parādīts! +u2f_desc=Drošības atslēgas ir aparatūras ierīces, kas satur kriptogrāfiskās atslēgas. Tās var tikt izmantotas, lai nodrošinātu divu faktoru autentifikāciju. Drošības atslēgām ir jāatbalsta FIDO U2F standarts. +u2f_require_twofa=Jābūt iespējotai divu faktoru autentifikācija, lai varētu izmantot drošības atslēgas. +u2f_register_key=Pievienot drošības atslēgu +u2f_nickname=Segvārds +u2f_press_button=Nospiediet pogu uz Jūsu drošības atslēgas, lai to reģistrētu. +u2f_delete_key=Noņemt drošības atslēgu +u2f_delete_key_desc=Noņemot drošības atslēgu ar to vairs nebūs iespējams autorizēties. Vai turpināt? +manage_account_links=Pārvaldīt saistītos kontus +manage_account_links_desc=Šādi ārējie konti ir piesaistīti Jūsu Gitea kontam. +account_links_not_available=Pašlaik nav neviena ārējā konta piesaistīta šim kontam. +remove_account_link=Noņemt saistīto kontu +remove_account_link_desc=Noņemot saistīto kontu, tam tiks liegta piekļuve Jūsu Gitea kontam. Vai turpināt? +remove_account_link_success=Saistītais konts tika noņemts. orgs_none=Jūs neesat nevienas organizācijas biedrs. repos_none=Jums nepieder neviens repozitorijs delete_account=Dzēst savu kontu +delete_prompt=Šī darbība pilnībā izdzēsīs Jūsu kontu, kā arī tā ir NEATGRIEZENISKA. confirm_delete_account=Apstiprināt dzēšanu +delete_account_title=Dzēst lietotāja kontu +delete_account_desc=Vai tiešām vēlaties dzēst šo kontu? [repo] owner=Īpašnieks repo_name=Repozitorija nosaukums +repo_name_helper=Labi repozitorija nosaukumi ir īsi, unikāli un tādi, ko viegli atcerēties. visibility=Redzamība +visiblity_helper=Padarīt repozitoriju privātu +visiblity_helper_forced=Jūsu sistēmas administrators ir noteicis, ka visiem no jauna izveidotajiem repozitorijiem ir jābūt privātiem. +visiblity_fork_helper=(Šīs vērtības maiņa ietekmēs arī visus atdalītos repozitorijus) +clone_helper=Nepieciešama palīdzība kā veikt klonēšana? Apmeklējiet Palīdzība lapu. fork_repo=Atdalīt repozitoriju fork_from=Atdalīt no +fork_visiblity_helper=Atdalītam repozitorijam nav iespējams nomainīt tā redzamību. repo_desc=Apraksts repo_lang=Valoda +repo_gitignore_helper=Izvēlieties .gitignore sagatavi. license=Licence +license_helper=Izvēlieties licences failu. +readme=LASIMANI +readme_helper=Izvēlieties LASIMANI faila sagatavi. +auto_init=Inicializēt repozitoriju (Pievieno .gitignore, licenci un README) create_repo=Izveidot repozitoriju default_branch=Noklusējuma atzars mirror_prune=Izmest +mirror_prune_desc=Izdzēst visas ārējās atsauces, kas ārējā repozitorijā vairs neeksistē +mirror_interval=Spoguļošanas intervāls (derīgās laika vienības ir "h", "m" un "s") +mirror_interval_invalid=Nekorekts spoguļošanas intervāls. +mirror_address=Spoguļa adrese +mirror_address_desc=Lūdzu iekļaujiet adresē, ja nepieciešams, arī lietotājvārdu un paroli. +mirror_last_synced=Pēdējo reizi sinhronizēts watchers=Novērotāji stargazers=Zvaigžņdevēji forks=Atdalītie repozitoriji @@ -267,22 +524,33 @@ reactions_more=un vēl %d form.reach_limit_of_creation=Ir sasniegts Jums noteiktais %d repozitoriju ierobežojums. form.name_reserved=Repozitorija nosaukums '%s' ir jau rezervēts. +form.name_pattern_not_allowed=Repozitorija nosaukums '%s' nav atļauts. +need_auth=Nepieciešama autorizācija migrate_type=Migrācijas veids migrate_type_helper=Šis repozitorijs būs spogulis migrate_repo=Migrēt repozitoriju +migrate.clone_address=Klonēšanas adrese +migrate.clone_address_desc=Tā var būt HTTP(S) adrese vai Git 'clone' URL eksistējošam repozitorijam +migrate.clone_local_path=vai servera lokālais ceļš migrate.permission_denied=Jums nav tiesību importēt lokālu repozitoriju. +migrate.invalid_local_path=Nederīgs lokālais ceļš. Tas neeksistē vai nav direktorija. migrate.failed=Migrācija neizdevās: %v +migrate.lfs_mirror_unsupported=LFS objektu spoguļošana netiek atbalstīta - tā vietā izmantojiet 'git lfs fetch --all' un 'git lfs push --all'. mirror_from=spogulis no forked_from=atdalīts no +fork_from_self=Nav iespējams atdalīt repozitoriju, kuram esat īpašnieks. copy_link=Kopēt +copy_link_success=Saite nokopēta +copy_link_error=Izmantojiet ⌘C vai Ctrl+C, lai nokopētu copied=Kopēšana notikusi veiksmīgi unwatch=Nevērot watch=Vērot unstar=Noņemt zvaigznīti star=Pievienot zvaigznīti fork=Atdalīts +download_archive=Lejupielādēt repozitoriju no_desc=Nav apraksta quick_guide=Īsa pamācība @@ -292,6 +560,7 @@ push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam bare_message=Repozitorijs ir tukšs. code=Kods +code.desc=Piekļūt pirmkodam, failiem, revīzijām un atzariem. branch=Atzars tree=Koks filter_branch_and_tag=Filtrēt atzarus vai tagus @@ -308,11 +577,26 @@ file_raw=Neapstrādāts file_history=Vēsture file_view_raw=Rādīt neapstrādātu file_permalink=Patstāvīgā saite +file_too_large=Šis fails ir par lielu, lai to parādītu. +video_not_supported_in_browser=Jūsu pārlūks neatbalsta HTML5 video. stored_lfs=Saglabāts Git LFS +commit_graph=Revīziju grafs +editor.new_file=Jauna datne +editor.upload_file=Augšupielādēt failu +editor.edit_file=Labot failu editor.preview_changes=Priekšskatīt izmaiņas +editor.cannot_edit_non_text_files=Nav iespējams labot bināros failus no pārlūka saskarnes. +editor.edit_this_file=Labot failu +editor.must_be_on_a_branch=Ir jābūt izvēlētam atzaram, lai varētu veikt vai piedāvāt izmaiņas šim failam. +editor.fork_before_edit=Lai varētu labot failu, ir nepieciešams atdalīt repozitoriju. +editor.delete_this_file=Dzēst failu +editor.must_have_write_access=Jums ir jābūt rakstīšanas tiesībām, lai varētu veikt vai piedāvāt izmaiņas šim failam. +editor.file_delete_success=Fails '%s' tika izdzēsts. editor.name_your_file=Ievadiet faila nosaukumu… +editor.filename_help=Lai pievienotu direktoriju, ierakstiet tās nosaukumu un slīpsvītru ('/'). Lai noņemtu direktoriju, ielieciet kursoru pirms faila nosaukuma un nospiediet atpakaļatkāpes taustiņu. editor.or=vai +editor.cancel_lower=Atcelt editor.commit_changes=Pabeigt revīziju editor.add_tmpl=Pievienot '%s/' editor.add=Pievienot '%s' @@ -323,22 +607,38 @@ editor.commit_directly_to_this_branch=Apstiprināt revīzijas izmaiņas atzarā editor.create_new_branch=Izveidot jaunu atzaru un izmaiņu pieprasījumu šai revīzijai. editor.new_branch_name_desc=Jaunā atzara nosaukums… editor.cancel=Atcelt +editor.filename_cannot_be_empty=Faila nosaukums nevar būt tukšs. editor.branch_already_exists=Atzars '%s' šajā repozitorijā jau eksistē. +editor.directory_is_a_file=Ieraksts '%s' vecāka ceļā ir fails nevis direktorija šajā repozitorijā. +editor.file_is_a_symlink=Fails '%s' ir norāde, kuru nav iespējams labot no tīmekļa redaktora +editor.filename_is_a_directory=Faila nosaukums '%s' sakrīt ar direktorijas nosaukumu šajā repozitorijā. +editor.file_editing_no_longer_exists=Fails '%s', ko labojat, vairs neeksistē šajā repozitorijā. +editor.file_changed_while_editing=Faila saturs ir mainījies kopš sākāt to labot. Noklikšķiniet šeit, lai apskatītu, vai Nosūtiet izmaiņas atkārtoti, lai pārrakstītu. +editor.file_already_exists=Fails ar nosaukumu '%s' šajā repozitorijā jau eksistē. editor.no_changes_to_show=Nav izmaiņu, ko rādīt. editor.fail_to_update_file=Neizdevās izmainīt/izveidot failu '%s', kļūda: %v +editor.add_subdir=Pievienot direktoriju… editor.unable_to_upload_files=Neizdevās augšupielādēt failus uz direktoriju '%s', kļūda: %v editor.upload_files_to_dir=Augšupielādēt failus uz direktoriju '%s' +editor.cannot_commit_to_protected_branch=Nav atļauts veikt izmaiņas aizsargātam atzaram '%s'. +commits.desc=Pārlūkot pirmkoda izmaiņu vēsturi. commits.commits=Revīzijas +commits.search=Meklēt revīzijas… commits.find=Meklēt +commits.search_all=Visi atzari commits.author=Autors commits.message=Ziņojums commits.date=Datums commits.older=Vecāki commits.newer=Jaunāki commits.signed_by=Parakstījis +commits.gpg_key_id=GPG atslēgas ID +ext_issues=Ārējās problēmas +ext_issues.desc=Saite uz ārējo problēmu sekotāju. +issues.desc=Organizēt kļūdu ziņojumus, uzdevumus un atskaites punktus. issues.new=Jauna problēma issues.new.labels=Etiķetes issues.new.no_label=Nav etiķešu @@ -348,12 +648,19 @@ issues.new.no_milestone=Nav atskaites punktu issues.new.clear_milestone=Notīrīt atskaites punktus issues.new.open_milestone=Atvērtie atskaites punktus issues.new.closed_milestone=Aizvērtie atskaites punkti +issues.new.assignees=Atbildīgie +issues.new.clear_assignees=Noņemt atbildīgo +issues.new.no_assignees=Nav atbildīgā issues.no_ref=Nav norādīts atzars/tags issues.create=Pieteikt problēmu issues.new_label=Jauna etiķete +issues.new_label_placeholder=Etiķetes nosaukums +issues.new_label_desc_placeholder=Apraksts issues.create_label=Izveidot etiķeti issues.label_templates.title=Ielādēt sākotnēji noteikto etiķešu kopu +issues.label_templates.info=Nav izveidota neviena etiķete. Jūs varat noklikšķināt uz "Jauna etiķete" augstāk, lai to izveidotu vai izmantot zemāk piedāvātās etiķetes: issues.label_templates.helper=Izvēlieties etiķešu kopu +issues.label_templates.use=Izmantot etiķešu kopu issues.label_templates.fail_to_load_file=Neizdevās ielādēt etiķetes sagataves failu '%s': %v issues.add_label_at=pievienoja etiķeti
%s
%s issues.remove_label_at=noņēma etiķeti
%s
%s @@ -369,8 +676,11 @@ issues.delete_branch_at=`izdzēsts atzars %s %s` issues.open_tab=%d atvērti issues.close_tab=%d aizvērti issues.filter_label=Etiķete +issues.filter_label_no_select=Visas etiķetes issues.filter_milestone=Atskaites punkts +issues.filter_milestone_no_select=Visi atskaites punkti issues.filter_assignee=Atbildīgais +issues.filter_assginee_no_select=Visi atbildīgie issues.filter_type=Veids issues.filter_type.all_issues=Visas problēmas issues.filter_type.assigned_to_you=Piešķirtās Jums @@ -383,6 +693,10 @@ issues.filter_sort.recentupdate=Nesen atjaunotās issues.filter_sort.leastupdate=Vissenāk atjaunotās issues.filter_sort.mostcomment=Visvairāk komentētās issues.filter_sort.leastcomment=Vismazāk komentētās +issues.filter_sort.moststars=Visvairāk atzīmētie +issues.filter_sort.feweststars=Vismazāk atzīmētie +issues.filter_sort.mostforks=Visvairāk atdalītie +issues.filter_sort.fewestforks=Vismazāk atdalītie issues.action_open=Atvērt issues.action_close=Aizvērt issues.action_label=Etiķete @@ -401,7 +715,9 @@ issues.commented_at=` komentēja %s` issues.delete_comment_confirm=Vai patiešām vēlaties dzēst šo komentāru? issues.no_content=Vēl nav satura. issues.close_issue=Aizvērt +issues.close_comment_issue=Komentēt un aizvērt issues.reopen_issue=Atvērt atkārtoti +issues.reopen_comment_issue=Komentēt un atvērt atkārtoti issues.create_comment=Komentēt issues.closed_at=`aizvērts %[2]s` issues.reopened_at=`atvērts atkārtoti %[2]s` @@ -420,6 +736,10 @@ issues.label_count=%d etiķetes issues.label_open_issues=%d atvērtas problēmas issues.label_edit=Labot issues.label_delete=Dzēst +issues.label_modify=Labot etiķeti +issues.label_deletion=Dzēst etiķeti +issues.label_deletion_desc=Dzēšot etiķeti, tā tiks noņemta no visām problēmām un izmaiņu pieprasījumiem. Vai turpināt? +issues.label_deletion_success=Etiķete tika izdzēsta. issues.label.filter_sort.alphabetically=Alfabētiski issues.label.filter_sort.reverse_alphabetically=Pretēji alfabētiski issues.label.filter_sort.by_size=Izmērs @@ -429,32 +749,70 @@ issues.attachment.open_tab=`Noklikšķiniet, lai apskatītos "%s" jaunā logā` issues.attachment.download=`Noklikšķiniet, lai lejupielādētu "%s"` issues.subscribe=Abonēt issues.unsubscribe=Atrakstīties +issues.tracker=Laika uzskaite issues.start_tracking_short=Sākt +issues.start_tracking=Uzsākt laika uzskaiti issues.start_tracking_history=` uzsāka darbu %s` issues.tracking_already_started=`Jums jau ir iesākta laika uzskaite pie citas problēmas!` issues.stop_tracking=Beigt issues.stop_tracking_history=` beidza strādāt %s` +issues.add_time=Manuāli pievienot laiku +issues.add_time_short=Pievienot laiku issues.add_time_cancel=Atcelt issues.add_time_history=` pievienoja patērēto laiku %s` issues.add_time_hours=Stundas issues.add_time_minutes=Minūtes +issues.add_time_sum_to_small=Nav norādīts laiks. issues.cancel_tracking=Atcelt issues.cancel_tracking_history=` atcēla laika uzskaiti %s` +issues.time_spent_total=Kopējais patērētais laiks +issues.time_spent_from_all_authors=`Kopējais patērētais laiks: %s` +issues.due_date=Izpildes termiņš +issues.invalid_due_date_format=Izpildes termiņam ir jābūt formāta 'yyyy-mm-dd'. +issues.error_modifying_due_date=Neizdevās izmainīt izpildes termiņu. +issues.error_removing_due_date=Neizdevās noņemt izpildes termiņu. +issues.due_date_form=yyyy-mm-dd +issues.due_date_form_add=Pievienot izpildes termiņu +issues.due_date_form_update=Atjaunot izpildes termiņu +issues.due_date_form_remove=Noņemt izpildes termiņu +issues.due_date_not_writer=Jums ir nepieciešamas rakstīšanas tiesības uz šo repozitoriju, lai mainītu izpildes termiņu. +issues.due_date_not_set=Izpildes termiņš nav uzstādīts. +issues.due_date_added=pievienoja izpildes termiņu %s %s +issues.due_date_modified=mainīja izpildes termiņu uz %s no %s %s +issues.due_date_remove=noņēma izpildes termiņu %s %s +issues.due_date_overdue=Nokavēts +pulls.desc=Izmaiņu pieprasījumi ļauj veikt koda pārskatīšanu un sapludināt izmaiņas. pulls.new=Jauns izmaiņu pieprasījums +pulls.compare_changes=Jauns izmaiņu pieprasījums +pulls.compare_changes_desc=Izvēlieties atzaru, kurā sapludināt izmaiņas un atzaru, no kura tās saņemt. +pulls.compare_base=pamata +pulls.compare_compare=salīdzināmais pulls.filter_branch=Filtrēt atzarus pulls.no_results=Nekas netika atrasts. +pulls.nothing_to_compare=Nav ko salīdzināt, jo bāzes un salīdzināmie atzari ir vienādi. +pulls.has_pull_request=`Jau eksistē izmaiņu pieprasījums starp šiem diviem atzariem: %[2]s#%[3]d` pulls.create=Izveidot izmaiņu pieprasījumu pulls.title_desc=vēlas sapludināt %[1]d revīzijas no %[2]s uz %[3]s pulls.merged_title_desc=sapludināja %[1]d revīzijas no %[2]s uz %[3]s %[4]s pulls.tab_conversation=Saruna pulls.tab_commits=Revīzijas +pulls.tab_files=Izmainītie faili pulls.reopen_to_merge=Atkārtoti atveriet izmaiņu pieprasījumu, lai veiktu sapludināšanu. pulls.merged=Sapludināts +pulls.has_merged=Šis izmaiņu pieprasījums tika veiksmīgi sapludināts. +pulls.data_broken=Izmaiņu pieprasījums ir bojāts, jo dzēsta informācija no atdalītā repozitorija. +pulls.is_checking=Notiek konfliktu pārbaude, mirkli uzgaidiet un atjaunojiet lapu. pulls.can_auto_merge_desc=Šo izmaiņu pieprasījumu var automātiski sapludināt. +pulls.cannot_auto_merge_desc=Šis izmaiņu pieprasījums nevar tikt automātiski sapludināts konfliktu dēļ. +pulls.cannot_auto_merge_helper=Sapludiniet manuāli, lai atrisinātu konfliktus. +pulls.no_merge_desc=Šo izmaiņu pieprasījumu nav iespējams sapludināt, jo nav atļauts neviens sapludināšanas veids. +pulls.no_merge_helper=Lai sapludinātu šo izmaiņu pieprasījumu, iespējojiet vismaz vienu sapludināšanas veidu repozitorija iestatījumos vai sapludiniet to manuāli. pulls.merge_pull_request=Izmaiņu pieprasījuma sapludināšana pulls.rebase_merge_pull_request=Pārbāzēt un sapludināt pulls.squash_merge_pull_request=Saspiest un sapludināt +pulls.invalid_merge_option=Nav iespējams izmantot šādu sapludināšanas veidu šim izmaiņu pieprasījumam. +pulls.open_unmerged_pull_exists=`Jūs nevarat veikt atkārtotas atvēršanas darbību, jo jau eksistē izmaiņu pieprasījums (#%d) ar šādu sapludināšanas informāciju.` milestones.new=Jauns atskaites punkts milestones.open_tab=%d atvērti @@ -463,13 +821,22 @@ milestones.closed=Aizvērts %s milestones.no_due_date=Bez termiņa milestones.open=Atvērta milestones.close=Aizvērt +milestones.new_subheader=Atskaites punkti, ļauj organizēt problēmas un sekot to progresam. milestones.create=Izveidot atskaites punktu milestones.title=Virsraksts milestones.desc=Apraksts milestones.due_date=Termiņš (neobligāts) milestones.clear=Notīrīt +milestones.invalid_due_date_format=Izpildes termiņam ir jābūt formāta 'yyyy-mm-dd'. +milestones.create_success=Atskaites punkts '%s' tika veiksmīgi izveidots. milestones.edit=Labot atskaites punktu +milestones.edit_subheader=Atskaites punkti, ļauj organizēt problēmas un sekot to progresam. milestones.cancel=Atcelt +milestones.modify=Labot atskaites punktu +milestones.edit_success=Izmaiņas atskaites punktā '%s' tika veiksmīgi saglabātas. +milestones.deletion=Dzēst atskaites punktu +milestones.deletion_desc=Dzēšot šo atskaites punktu, tas tiks noņemts no visām saistītajām problēmām un izmaiņu pieprasījumiem. Vai turpināt? +milestones.deletion_success=Atskaites punkts tika veiksmīgi izdzēsts. milestones.filter_sort.closest_due_date=Tuvākais termiņš milestones.filter_sort.furthest_due_date=Tālākais termiņš milestones.filter_sort.least_complete=Vismazāk pabeigtais @@ -477,17 +844,26 @@ milestones.filter_sort.most_complete=Visvairāk pabeigtais milestones.filter_sort.most_issues=Visvairāk problēmu milestones.filter_sort.least_issues=Vismazāk problēmu +ext_wiki=Ārējā vikivietne +ext_wiki.desc=Ārējā vikivietne norāda uz ārējo vikivietnes adresi. wiki=Vikivietne +wiki.welcome=Laipni lūgti vikivietnē. +wiki.welcome_desc=Vikivietne ļauj Jums un Jūsu līdzstrādniekiem viegli dokumentēt projektu. +wiki.desc=Vikivietne ir vieta, kur uzglabāt dokumentāciju. +wiki.create_first_page=Izveidot pirmo lapu wiki.page=Lapa wiki.filter_page=Meklēt lapu +wiki.new_page=Lapa wiki.default_commit_message=Ierakstiet piezīmes par šīs lapas izmaiņām (neobligāts). wiki.save_page=Saglabāt lapu wiki.last_commit_info=%s laboja lapu %s wiki.edit_page_button=Labot wiki.new_page_button=Jauna lapa wiki.delete_page_button=Dzēst lapu +wiki.delete_page_notice_1=Šī darbība izdzēsīs vikivietnes lapu '%s'. Vai turpināt? wiki.page_already_exists=Vikivietnes lapa ar šādu nosaukumu jau eksistē. +wiki.reserved_page=Vikivietnes lapas nosaukums '%s' ir rezervēts. wiki.pages=Lapas wiki.last_updated=Pēdējo reizi labota %s @@ -524,6 +900,9 @@ activity.closed_issue_label=Slēgta activity.new_issues_count_1=Jauna problēma activity.new_issues_count_n=Jaunas problēmas activity.new_issue_label=Atvērta +activity.title.unresolved_conv_1=%d neatrisināta diskusija +activity.title.unresolved_conv_n=%d neatrisinātas diskusijas +activity.unresolved_conv_desc=Saraksts ar visām problēmām un izmaiņu pieprasījumiem, kas nesen mainīti un vēl nav atrisināti. activity.unresolved_conv_label=Atvērts activity.title.releases_1=%d versiju activity.title.releases_n=%d versijas @@ -536,6 +915,9 @@ search.results=Meklēšanas rezultāti nosacījumam "%s" repozitorijā tīmekļa āķu rokasgrāmatā. +settings.webhook_deletion=Noņemt tīmekļa āķi +settings.webhook_deletion_desc=Noņemot tīmekļa āķi, tiks dzēsti visi tā iestatījumi un piegādes vēsture. Vai turpināt? +settings.webhook_deletion_success=Tīmekļa āķis tika noņemts. settings.webhook.test_delivery=Testa piegāde +settings.webhook.test_delivery_desc=Veikt viltus push-notikuma piegādi, lai notestētu Jūsu tīmekļa āķa iestatījumus. +settings.webhook.test_delivery_success=Pārbaudes tīmekļa āķis tika veiksmīgi pievienots piegādes rindai. Var paiet vairākas sekundes līdz tas parādās piegādes vēsturē. settings.webhook.request=Pieprasījums settings.webhook.response=Atbilde settings.webhook.headers=Galvenes +settings.webhook.payload=Saturs settings.webhook.body=Saturs +settings.githooks_desc=Git āķus apstrādā pats Git. Jūs varat labot atbalstīto āku failus sarakstā zemāk, lai veiktu pielāgotas darbības. settings.githook_edit_desc=Ja āķis nav aktīvs, tiks attēlots piemērs kā to izmantot. Atstājot āķa saturu tukšu, tas tiks atspējots. settings.githook_name=Āķa nosaukums settings.githook_content=Āķa saturs settings.update_githook=Labot āķi +settings.add_webhook_desc=Uz norādīto URL tiks nosūtīts POST pieprasījums ar notikuma datiem. Detalizētāku informāciju ir iespējams uzzināt tīmekļa āķu rokasgrāmatā. +settings.payload_url=Saņēmēja URL +settings.content_type=POST satura tips settings.secret=Noslēpums settings.slack_username=Lietotājvārds settings.slack_icon_url=Ikonas URL settings.discord_username=Lietotāja vārds settings.discord_icon_url=Ikonas URL settings.slack_color=Krāsa +settings.event_desc=Izsaukt notikumiem: +settings.event_push_only=Izmaiņu nosūtīšanas notikumi +settings.event_send_everything=Visus notikumus +settings.event_choose=Izvēlēties notikumus… settings.event_create=Izveidot +settings.event_create_desc=Atzara vai taga izveidošana. +settings.event_delete=Dzēst +settings.event_delete_desc=Atzars vai tags izdzēsts +settings.event_fork=Atdalīts +settings.event_fork_desc=Repozitorijs atdalīts +settings.event_issues=Problēmas +settings.event_issues_desc=Problēmas atvērtas, aizvērtas, atkārtoti atvērtas, labotas, pievienots vai noņemts atbildīgais, pievienota etiķete, noņemta etiķete, pievienots vai noņemts atskaites punkts. +settings.event_issue_comment=Problēmas komentārs +settings.event_issue_comment_desc=Problēmas komentārs pievienots, labots vai dzēsts. +settings.event_release=Laidiens +settings.event_release_desc=Publicēts, atjaunots vai dzēsts laidiens repozitorijā. settings.event_pull_request=Izmaiņu pieprasījums +settings.event_pull_request_desc=Atvērts, aizvērts, atkāroti atvērts, labots, piešķirts vai noņemts izmaiņu pieprasījums, vai mainīta etiķete, vai veikta sinhronizācija. settings.event_push=Izmaiņu nosūtīšana +settings.event_push_desc=Git izmaiņu nosūtīšana uz repozitoriju. settings.event_repository=Repozitorijs +settings.event_repository_desc=Repozitorijs izveidots vai dzēsts. +settings.active=Iekļaut notikuma detaļas +settings.active_helper=Pievienot pieprasījumam informāciju par notikuma izcelsmi. +settings.add_hook_success=Tīmekļa āķis tika pievienots. settings.update_webhook=Mainīt tīmekļa āķi +settings.update_hook_success=Tīmekļa āķis tika atjaunots. +settings.delete_webhook=Noņemt tīmekļa āķi settings.recent_deliveries=Pēdējās piegādes settings.hook_type=Āķa veids +settings.add_slack_hook_desc=Integrēt Slack repozitorijā. settings.slack_token=Talons settings.slack_domain=Domēns settings.slack_channel=Kanāls +settings.add_discord_hook_desc=Integrēt Discord repozitorijā. +settings.add_dingtalk_hook_desc=Integrēt Dingtalk repozitorijā. settings.deploy_keys=Izvietot atslēgas settings.add_deploy_key=Pievienot izvietošanas atslēgu +settings.deploy_key_desc=Izvietošanas atslēgām ir lasīšanas piekļuve repozitorijam. +settings.is_writable=Iespējot rakstīšanas piekļuvi +settings.is_writable_info=Atļaut šai izvietošanas atslēgai nosūtīt izmaiņas uz repozitoriju. +settings.no_deploy_keys=Pagaidām nav nevienas izvietošanas atslēgas. settings.title=Virsraksts settings.deploy_key_content=Saturs +settings.key_been_used=Izvietošanas atslēga ar šādu saturu jau ir pievienota. +settings.key_name_used=Izvietošanas atslēga ar šādu nosaukumu jau eksistē. +settings.add_key_success=Izvietošanas atslēga '%s' tika pievienota. +settings.deploy_key_deletion=Noņemt izvietošanas atslēgu +settings.deploy_key_deletion_desc=Noņemot izvietošanas atslēgu, tai tiks liegta piekļuve šim repozitorija. Vai turpināt? +settings.deploy_key_deletion_success=Izvietošanas atslēga tika noņemta. settings.branches=Atzari settings.protected_branch=Atzaru aizsargāšana settings.protected_branch_can_push=Atļaut izmaiņu nosūtīšanu? settings.protected_branch_can_push_yes=Jūs varat nosūtīt izmaiņas settings.protected_branch_can_push_no=Jūs nevarat nosūtīt izmaiņas +settings.branch_protection=Atzara aizsardzība atzaram '%s' +settings.protect_this_branch=Iespējot atzara aizsardzību +settings.protect_this_branch_desc=Neļauj dzēšanu un piespiedu Git izmaiņu nosūtīšanu uz atzaru. +settings.protect_whitelist_committers=Iespējot izmaiņu nosūtīšanas ierobežojumus +settings.protect_whitelist_committers_desc=Atļaut tikai noteiktiem lietotājiem vai komandām apiet izmaiņu nosūtīšanas ierobežojumus. +settings.protect_whitelist_users=Lietotāji, kas var veikt izmaiņu nosūtīšanu: +settings.protect_whitelist_search_users=Meklēt lietotājus… +settings.protect_whitelist_teams=Komandas, kas var veikt izmaiņu nosūtīšanu: +settings.protect_whitelist_search_teams=Meklēt komandas… +settings.protect_merge_whitelist_committers=Iespējot sapludināšanas ierobežošanu +settings.protect_merge_whitelist_committers_desc=Atļaut tikai noteiktiem lietotājiem vai komandām sapludināt izmaiņu pieprasījumus šajā atzarā. +settings.protect_merge_whitelist_users=Lietotāji, kas var veikt izmaiņu sapludināšanu: +settings.protect_merge_whitelist_teams=Komandas, kas var veikt izmaiņu sapludināšanu: settings.add_protected_branch=Iespējot aizsargāšanu settings.delete_protected_branch=Atspējot aizsargāšanu +settings.update_protect_branch_success=Atzara aizsardzība atzaram '%s' tika saglabāta. +settings.remove_protected_branch_success=Atzara aizsardzība atzaram '%s' tika atspējota. +settings.protected_branch_deletion=Atspējot atzara aizsardzību +settings.protected_branch_deletion_desc=Atspējojot atzara aizsardzību, ļaus lietotājiem ar rakstīšanas tiesībām nosūtīt izmaiņas uz atzaru. Vai turpināt? +settings.default_branch_desc=Norādiet noklusēto repozitorija atzaru izmaiņu pieprasījumiem un koda revīzijām: settings.choose_branch=Izvēlieties atzaru… +settings.no_protected_branch=Nav neviena aizsargātā atzara. diff.browse_source=Pārlūkot izejas kodu diff.parent=vecāks @@ -609,6 +1111,7 @@ diff.view_file=Parādīt failu diff.file_suppressed=Failā izmaiņas netiks attēlotas, jo tās ir par lielu diff.too_many_files=Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels +releases.desc=Pārvaldiet projekta versijas un lejupielādes. release.releases=Laidieni release.new_release=Jauns laidiens release.draft=Melnraksts @@ -617,31 +1120,60 @@ release.stable=Stabila release.edit=labot release.ahead=%d revīzijas atzarā %s kopš šī laidiena release.source_code=Izejas kods +release.new_subheader=Laidieni palīdz organizēt projekta versijas. +release.edit_subheader=Laidieni palīdz organizēt projekta versijas. release.tag_name=Taga nosaukums release.target=Mērķis +release.tag_helper=Izvēlieties jau esošu tagu vai izveidojiet jaunu. release.title=Virsraksts release.content=Saturs release.write=Rakstīt release.preview=Priekšskatītījums release.loading=Notiek ielāde… +release.prerelease_desc=Atzīmēt kā pirmslaidiena versiju +release.prerelease_helper=Atzīmēt, ka šo laidienu nav ieteicams lietot produkcijā. release.cancel=Atcelt release.publish=Publicēt laidienu release.save_draft=Saglabāt melnrakstu +release.edit_release=Labot laidienu +release.delete_release=Dzēst laidienu +release.deletion=Dzēst laidienu +release.deletion_desc=Dzēšot šo laidienu tiks izdzēsts arī attiecīgais Git tags. Repozitorija saturs un vēsture paliks nemainīta. Vai turpināt? release.deletion_success=Laidiens tika izdzēsts. +release.tag_name_already_exist=Laidiens ar šādu taga nosaukumu jau eksistē. +release.tag_name_invalid=Nekorekts taga nosaukums. release.downloads=Lejupielādes +branch.name=Atzara nosaukums branch.search=Meklēt atzarus +branch.already_exists=Atzars ar nosaukumu '%s' jau eksistē. branch.delete_head=Dzēst +branch.delete=Dzēst atzaru '%s' branch.delete_html=Dzēst atzaru +branch.delete_desc=Atzara dzēšana ir neatgriezeniska, kā arī tā ir NEATGRIEZENISKA. Vai turpināt? +branch.deletion_success=Atzars '%s' tika izdzēsts. +branch.deletion_failed=Neizdevās izdzēst atzaru '%s'. +branch.delete_branch_has_new_commits=Atzars '%s' nevar tik dzēsts, jo pēc sapludināšanas, tam ir pievienotas jaunas revīzijas. branch.create_branch=Izveidot atzaru %s branch.create_from=no '%s' +branch.create_success=Tika izveidots atzars '%s'. branch.branch_already_exists=Atzars '%s' šajā repozitorijā jau eksistē. +branch.branch_name_conflict=Atzara nosaukums '%s' konfliktē ar jau esošu atzaru '%s' šajā repozitorijā. +branch.tag_collision=Atzaru '%s' nevar izveidot, jo repozitorijā eksistē tags ar tādu pašu nosaukumu. branch.deleted_by=Izdzēsa %s +branch.restore_success=Tika atjaunots atzars '%s'. +branch.restore_failed=Neizdevās atjaunot atzaru '%s'. +branch.protected_deletion_failed=Atzars '%s' ir aizsargāts. To nevar izdzēst. +topic.manage_topics=Pārvaldīt tēmas +topic.done=Gatavs +topic.count_prompt=Nevar pievienot vairāk kā 25 tēmas +topic.format_prompt=Tēmas nosaukumam ir jāsākas ar burtu vai ciparu, tas var saturēt defisi(-), kā arī tas nevar būt garāks par 35 simboliem [org] org_name_holder=Organizācijas nosaukums org_full_name_holder=Organizācijas pilnais nosaukums +org_name_helper=Organizāciju nosaukumiem vēlams būt īsiem un tādiem, ko viegli atcerēties. create_org=Izveidot organizāciju repo_updated=Atjaunināts people=Personas @@ -653,20 +1185,37 @@ create_team=Izveidot komandu org_desc=Apraksts team_name=Komandas nosaukums team_desc=Apraksts +team_name_helper=Komandu nosaukumiem vēlams būt īsiem un tādiem, ko viegli atcerēties. +team_desc_helper=Aprakstiet komandas mērķi vai lomu. +team_permission_desc=Atļauja +team_unit_desc=Atļaut piekļuvi repozitorija sadaļām +form.name_reserved=Organizācijas nosaukums '%s' ir rezervēts. +form.name_pattern_not_allowed=Organizācijas nosaukums '%s' nav atļauts. +form.create_org_not_allowed=Jums nav tiesību veidot jauno organizāciju. settings=Iestatījumi +settings.options=Organizācija settings.full_name=Pilns vārds, uzvārds settings.website=Mājas lapa settings.location=Atrašanās vieta settings.update_settings=Mainīt iestatījumus settings.update_setting_success=Organizācijas iestatījumi tika saglabāti. +settings.change_orgname_prompt=Ņemiet vērā: Mainot organizācijas nosaukumu tiks izmainītas šīs organizācijas saites. +settings.update_avatar_success=Organizācijas attēls tika saglabāts. settings.delete=Dzēst organizāciju settings.delete_account=Dzēst šo organizāciju +settings.delete_prompt=Šī darbība pilnībā dzēsīs šo organizāciju, kā arī tā ir NEATGRIEZENISKA! settings.confirm_delete_account=Apstiprināt dzēšanu +settings.delete_org_title=Dzēst organizāciju +settings.delete_org_desc=Organizācija tiks dzēsta neatgriezeniski. Vai turpināt? settings.hooks_desc=Pievienot tīmekļa āķus, kas nostrādās visiem repozitorijiem šajā organizācijā. members.membership_visibility=Dalībnieka redzamība: +members.public=Redzams +members.public_helper=padarīt slēptu +members.private=Slēpts +members.private_helper=padarīt redzemu members.member_role=Dalībnieka loma: members.owner=Īpašnieks members.member=Biedri @@ -678,13 +1227,24 @@ members.invite_now=Uzaicināt tagad teams.join=Pievienoties teams.leave=Atstāt teams.read_access=Lasīšanas piekļuve +teams.read_access_helper=Komanda varēs skatīties un klonēt šīs organizācijas repozitorijus. teams.write_access=Rakstīšanas piekļuve +teams.write_access_helper=Šī komanda varēs lasīt un nosūtīt izmaiņas uz tās repozitorijiem. +teams.admin_access=Administratora piekļuve +teams.admin_access_helper=Šī komanda varēs nosūtīt un saņemt izmaiņas no tās repozitorijiem, kā arī pievienot tiem citus līdzstrādniekus. teams.no_desc=Komandai nav apraksta teams.settings=Iestatījumi +teams.owners_permission_desc=Īpašniekiem ir pilna piekļuve visiem repozitorijiem un ir organizācijas administratora tiesības. teams.members=Komandas biedri teams.update_settings=Saglabāt iestatījumus +teams.delete_team=Dzēst komandu teams.add_team_member=Pievienot komandas biedru +teams.delete_team_title=Dzēst komandu +teams.delete_team_desc=Dzēšot komandu, tās biedri var zaudēt piekļuvi dažiem vai pat visiem repozitorijiem. Vai turpināt? teams.delete_team_success=Komanda tika izdzēsta. +teams.read_permission_desc=Šai komandai ir lasīšanas tiesības: dalībnieki var skatīties un klonēt komandas repozitorijus. +teams.write_permission_desc=Šai komandai ir rakstīšanas tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem. +teams.admin_permission_desc=Šai komandai ir administratora tiesības: dalībnieki var lasīt, rakstīt un pievienot citus dalībniekus komandas repozitorijiem. teams.repositories=Komandas repozitoriji teams.search_repo_placeholder=Meklēt repozitorijā… teams.add_team_repository=Pievienot komandas repozitoriju @@ -693,8 +1253,10 @@ teams.add_nonexistent_repo=Repozitorijs, kuram Jūs mēģinat pievienot neeksist [admin] dashboard=Infopanelis +users=Lietotāju konti organizations=Organizācijas repositories=Repozitoriji +authentication=Autentificēšanas avoti config=Konfigurācija notices=Sistēmas paziņojumi monitor=Uzraudzība @@ -702,6 +1264,10 @@ first_page=Pirmā last_page=Pēdējā total=Kopā: %d +dashboard.statistic=Kopsavilkums +dashboard.operations=Uzturēšanas darbības +dashboard.system_status=Sistēmas statuss +dashboard.statistic_info=Gitea datu bāze satur %d lietotājus, %d organizācijas, %d publiskās atslēgas, %d repozitorijus, %d vērošanas, %d atzīmētas zvaigznītes, %d darbības, %d piekļuves, %d problēmas, %d komentārus, %d sociālos kontus, %d sekošanas, %d spoguļošanas, %d izlaides, %d autorizācijas avotus, %d tīmekļa āķus, %d starpposmus, %d etiķetes, %d āķu uzdevumus, %d komandas, %d labotus uzdevumus, %d pielikumus. dashboard.operation_name=Darbības nosaukums dashboard.operation_switch=Pārslēgt dashboard.operation_run=Palaist @@ -709,16 +1275,30 @@ dashboard.clean_unbind_oauth=Notīrīt nepiesaistītos OAuth savienojumus dashboard.clean_unbind_oauth_success=Visi nepiesaistītie OAuth savienojumu tika izdzēsti. dashboard.delete_inactivate_accounts=Dzēst visus neaktīvos kontus dashboard.delete_inactivate_accounts_success=Visi neaktīvie konti tika izdzēsti. +dashboard.delete_repo_archives=Dzēst visu repozitoriju arhīvus +dashboard.delete_repo_archives_success=Visu repozitoriju arhīvi tika izdzēsti. +dashboard.delete_missing_repos=Dzēst visus repozitorijus, kam trūkst Git failu +dashboard.delete_missing_repos_success=Visi repozitoriji, kam trūka Git failu, tika pilnībā dzēsti. +dashboard.git_gc_repos=Veikt atkritumu uzkopšanas darbus visiem repozitorijiem +dashboard.git_gc_repos_success=Atkritumu uzkopšanas darbi visiem repozitorijiem pabeigti. +dashboard.resync_all_sshkeys=Pārrakstīt '.ssh/authorized_keys' failu ar Gitea SSH atslēgām. (To nav nepieciešams darīt, ja izmantojat iebūvēto SSH serveri.) +dashboard.resync_all_sshkeys_success=Visas Gitea kontrolētās publiskās atslēgas tika pārrakstītas. +dashboard.resync_all_hooks=Pārsinhronizēt pirms-saņemšanas, atjaunošanas un pēc-saņemšanas āķus visiem repozitorijiem. +dashboard.resync_all_hooks_success=Visu repozitoriju pirms-saņemšanas, atjaunošanas un pēc-saņemšanas āķi tika atjaunoti. dashboard.reinit_missing_repos=Atkārtoti inicializēt visus pazaudētos Git repozitorijus par kuriem eksistē ieraksti dashboard.reinit_missing_repos_success=Visi pazaudētie Git repozitoriji, par kuriem eksistēja ieraksti, tika atkārtoti inicializēti. dashboard.sync_external_users=Sinhronizēt ārējo lietotāju datus +dashboard.sync_external_users_started=Uzsākta ārējo lietotāju sinhronizācija. dashboard.git_fsck=Izpildīt korektuma pārbaudes visiem repozoitorijiem +dashboard.git_fsck_started=Repozitorija veselības pārbaudes uzsāktas. dashboard.server_uptime=Servera darbības laiks dashboard.current_goroutine=Izmantotās Gorutīnas dashboard.current_memory_usage=Pašreiz izmantotā atmiņa dashboard.total_memory_allocated=Kopējā piešķirtā atmiņa dashboard.memory_obtained=Iegūtā atmiņa dashboard.pointer_lookup_times=Rādītāju meklēšanas reizes +dashboard.memory_allocate_times=Atmiņas piešķiršanas reizes +dashboard.memory_free_times=Atmiņas atbrīvošanas reizes dashboard.current_heap_usage=Pašreizējā kaudzes izmantošana dashboard.heap_memory_obtained=Iegūtā kaudzes atmiņa dashboard.heap_memory_idle=Neizmantotā kaudzes atmiņa @@ -741,18 +1321,43 @@ dashboard.total_gc_pause=Kopējais GC izpildes laiks dashboard.last_gc_pause=Pedējās GC izpildes laiks dashboard.gc_times=GC reizes +users.user_manage_panel=Lietotāju kontu pārvaldība +users.new_account=Izveidot lietotāja kontu +users.name=Lietotājvārds users.activated=Aktivizēts users.admin=Administrators users.repos=Repozitoriji users.created=Izveidots +users.last_login=Pēdējā autorizācija +users.never_login=Nekad nav autorizējies +users.send_register_notify=Nosūtīt lietotājam reģistrācijas paziņojumu +users.new_success=Lietotāja konts '%s' tika izveidots. users.edit=Labot users.auth_source=Autentificēšanas avots users.local=Iebūvētā +users.auth_login_name=Autentifikācijas pieteikšanās vārds +users.password_helper=Atstājiet paroli tukšu, ja nevēlaties mainīt. +users.update_profile_success=Lietotāja konts tika atjaunots. +users.edit_account=Labot lietotāja kontu +users.max_repo_creation=Maksimāls repozitoriju skaits +users.max_repo_creation_desc=(Ievadiet -1 lai izmantotu noklusēto globālo ierobežojumu) +users.is_activated=Lietotāja konts ir aktivizēts +users.prohibit_login=Atspējota pieslēgšanās +users.is_admin=Administratora tiesības +users.allow_git_hook=Atļaut veidot git āķus +users.allow_import_local=Atļauts importēt lokālus repozitorijus +users.allow_create_organization=Atļauts veidot organizācijas +users.update_profile=Mainīt lietotāja kontu +users.delete_account=Dzēst lietotāja kontu +users.still_own_repo=Lietotājam pieder repozitoriji, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku. +users.still_has_org=Šis lietotājs ir vienas vai vairāku organizāciju biedrs, lietotāju sākumā ir nepieciešams pamest šīs organizācijas vai viņu no tām ir jāizdzēš. +users.deletion_success=Lietotāja konts veiksmīgi izdzēsts. orgs.org_manage_panel=Organizāciju pārvaldība orgs.name=Nosaukums orgs.teams=Komandas orgs.members=Dalībnieki +orgs.new_orga=Jauna organizācija repos.repo_manage_panel=Repozitoriju pārvaldība repos.owner=Īpašnieks @@ -760,12 +1365,16 @@ repos.name=Nosaukums repos.private=Privāts repos.watches=Vērošana repos.stars=Atzīmētās zvaigznītes +repos.forks=Atdalītie repos.issues=Problēmas repos.size=Izmērs +auths.auth_manage_panel=Autentifikācijas avotu pārvaldība +auths.new=Pievienot autentifikācijas avotu auths.name=Nosaukums auths.type=Veids auths.enabled=Iespējots +auths.syncenabled=Iespējot lietotāju sinhronizāciju auths.updated=Atjaunināta auths.auth_type=Autentifikācijas tips auths.auth_name=Autentifikācijas nosaukums @@ -775,8 +1384,18 @@ auths.host=Resursdators auths.port=Ports auths.bind_dn=Saistīšanas DN auths.bind_password=Saistīšanas parole +auths.bind_password_helper=Brīdinājums: Šī parole tiks glabāta nešifrētā veidā. Ieteicams izmantot kontu ar tikai lasīšanas tiesībām. auths.user_base=Lietotāja pamatnosacījumi auths.user_dn=Lietotāja DN +auths.attribute_username=Lietotājvārda atribūts +auths.attribute_username_placeholder=Atstājiet tukšu, ja vēlaties, lai tiek izmantots Gitea ievadītais lietotājvārds. +auths.attribute_name=Vārda atribūts +auths.attribute_surname=Uzvārda atribūts +auths.attribute_mail=E-pasta atribūts +auths.attribute_ssh_public_key=Publiskās SSH atslēgas atribūts +auths.attributes_in_bind=Nolasīt atribūtus no saistīšanas DN konteksta +auths.use_paged_search=Izmantot, dalīto pa lapām, meklēšanu +auths.search_page_size=Lapas izmērs auths.filter=Lietotāju filts auths.admin_filter=Administratoru filtrs auths.ms_ad_sa=MS AD meklēšanas atribūti @@ -784,6 +1403,7 @@ auths.smtp_auth=SMTP autentifikācijas tips auths.smtphost=SMTP resursdators auths.smtpport=SMTP ports auths.allowed_domains=Atļautie domēni +auths.allowed_domains_helper=Atstājiet tukšu, lai atļautu visus domēnus. Lai norādītu vairākus domēnus, tos var atdalīt ar komatu (','). auths.enable_tls=Iespējot TLS šifrēšanu auths.skip_tls_verify=Izlaist TLS pārbaudi auths.pam_service_name=PAM servisa nosaukums @@ -791,6 +1411,7 @@ auths.oauth2_provider=OAuth2 pakalpojuma sniedzējs auths.oauth2_clientID=Klienta ID (atslēga) auths.oauth2_clientSecret=Klienta noslēpums auths.openIdConnectAutoDiscoveryURL=OpenID Connect automātiskās atklāšanas URL +auths.oauth2_use_custom_url=Noklusēto URL vietā izmantot pielāgotos URL auths.oauth2_tokenURL=Talona URL auths.oauth2_authURL=Autorizācijas URL auths.oauth2_profileURL=Profila URL @@ -800,27 +1421,48 @@ auths.tips=Padomi auths.tips.oauth2.general=OAuth2 autentifikācija auths.tips.oauth2.general.tip=Reģistrējot jaunu OAuth2 autentifikāciju, atsauces/pārsūtīšanas URL ir jābūt: /user/oauth2//callback auths.tip.oauth2_provider=OAuth2 pakalpojuma sniedzējs +auths.tip.bitbucket=Reģistrējiet jaunu OAuth klientu adresē https://bitbucket.org/account/user//oauth-consumers/new un piešķiriet tam "Account" - "Read" tiesības auths.tip.dropbox=Izveidojiet jaunu aplikāciju adresē https://www.dropbox.com/developers/apps auths.tip.facebook=Reģistrējiet jaunu aplikāciju adresē https://developers.facebook.com/apps un pievienojiet produktu "Facebook Login auths.tip.github=Reģistrējiet jaunu aplikāciju adresē https://github.com/settings/applications/new auths.tip.gitlab=Reģistrējiet jaunu aplikāciju adresē https://gitlab.com/profile/applications +auths.tip.google_plus=Iegūstiet OAuth2 klienta pilnvaru no Google API konsoles adresē https://console.developers.google.com/ auths.tip.openid_connect=Izmantojiet OpenID pieslēgšanās atklāšanas URL (/.well-known/openid-configuration), lai norādītu galapunktus +auths.tip.twitter=Dodieties uz adresi https://dev.twitter.com/apps, izveidojiet aplikāciju un pārliecinieties, ka ir atzīmēts “Allow this application to be used to Sign in with Twitter” +auths.edit=Labot autentifikācijas avotu +auths.activated=Autentifikācijas avots ir atkivizēts auths.new_success=Jauna autentifikācija'%s' tika pievienota. +auths.update_success=Autentifikācijas avots tika atjaunots. +auths.update=Atjaunot autentifikācijas avotu +auths.delete=Dzēst autentifikācijas avotu auths.delete_auth_title=Dzēst autentifikācijas avotu +auths.delete_auth_desc=Izdzēšot autentifikācijas avotu, tā lietotājiem nebūs iespējams autorizēties. Vai turpināt? +auths.still_in_used=Šo autentificēšanās avotu joprojām izmanto viens vai vairāki lietotāji, tos nepieciešams izdzēst vai pārvietot uz citu autentificēšanās avotu. +auths.deletion_success=Autentifikācijas avots tika atjaunots. +auths.login_source_exist=Autentifikācijas avots ar nosaukumu '%s' jau eksistē. config.server_config=Servera konfigurācija +config.app_name=Vietnes nosaukums +config.app_ver=Gitea versija +config.app_url=Gitea pamata URL config.custom_conf=Konfigurācijas faila ceļš +config.domain=SSH servera domēns +config.offline_mode=Bezsaistes režīms config.disable_router_log=Atspējot maršrutētāja žurnalizēšanu +config.run_user=Izpildes lietotājs config.run_mode=Izpildes režīms config.git_version=Git versija config.repo_root_path=Repozitoriju glabāšanas vieta config.lfs_root_path=LFS saknes ceļš config.static_file_root_path=Statisko failu atrašanās vieta +config.log_file_root_path=Žurnalizēšanas ceļš config.script_type=Skripta veids config.reverse_auth_user=Reversā lietotāja autentifikācija config.ssh_config=SSH konfigurācija config.ssh_enabled=Iespējots +config.ssh_start_builtin_server=Izmantot iebūvēto serveri +config.ssh_domain=Servera domēns config.ssh_port=Ports config.ssh_listen_port=Klausīšanās ports config.ssh_root_path=Saknes ceļš @@ -833,19 +1475,36 @@ config.db_config=Datu bāzes konfigurācija config.db_type=Veids config.db_host=Resursdators config.db_name=Nosaukums +config.db_user=Lietotājvārds +config.db_ssl_mode=SSL config.db_path=Ceļš config.service_config=Pakalpojuma konfigurācija +config.register_email_confirm=Reģistrējoties pieprasīt apstiprināt e-pasta adresi +config.disable_register=Atspējot lietotāju reģistrāciju +config.allow_only_external_registration=Ļaut reģistrēties tikai izmantojot ārējos pakalpojumus +config.enable_openid_signup=Iespējot reģistrāciju, izmantojot OpenID +config.enable_openid_signin=Iespējot OpenID autorizāciju config.show_registration_button=Rādīt reģistrēšanās pogu +config.require_sign_in_view=Iespējot nepieciešamību autorizēties, lai aplūkotu lapas +config.mail_notify=Iespējot e-pasta paziņojumus config.disable_key_size_check=Atspējot atslēgas minimālā garuma pārbaudi +config.enable_captcha=Iespējot drošības kodu config.active_code_lives=Aktīvā koda ilgums config.reset_password_code_lives=Atjaunot paroles koda derīguma laiku +config.default_keep_email_private=Pēc noklusējuma slēpt e-pasta adreses +config.default_allow_create_organization=Pēc noklusējuma ļaut veidot organizācijas +config.enable_timetracking=Iespējot laika uzskaiti +config.default_enable_timetracking=Pēc noklusējuma iespējot laika uzskaiti +config.default_allow_only_contributors_to_track_time=Atļaut tikai dalībniekiem uzskaitīt laiku +config.no_reply_address=Neatbildēt e-pasta adreses domēns config.webhook_config=Tīkla āķu konfigurācija config.queue_length=Rindas garums config.deliver_timeout=Piegādes noildze config.skip_tls_verify=Izlaist TLS pārbaudi +config.mailer_config=SMTP sūtītāja konfigurācija config.mailer_enabled=Iespējota config.mailer_disable_helo=Atspējot HELO config.mailer_name=Nosaukums @@ -853,6 +1512,10 @@ config.mailer_host=Resursdators config.mailer_user=Lietotājs config.mailer_use_sendmail=Izmantot Sendmail config.mailer_sendmail_path=Ceļš līdz sendmail programmai +config.mailer_sendmail_args=Papildus Sendmail komandrindas argumenti +config.send_test_mail=Nosūtīt pārbaudes e-pastu +config.test_mail_failed=Neizdevās nosūtīt pārbaudes e-pastu uz '%s': %v +config.test_mail_sent=Pārbaudes e-pasts tika nosūtīts uz '%s'. config.oauth_config=OAuth konfigurācija config.oauth_enabled=Iespējots @@ -872,6 +1535,7 @@ config.session_life_time=Sesijas ilgums config.https_only=Tikai HTTPS config.cookie_life_time=Sīkdatņu glabāšanas ilgums +config.picture_config=Attēlu un profila bilžu konfigurācija config.picture_service=Lokāli attēli config.disable_gravatar=Atspējot Gravatar config.enable_federated_avatar=Iespējot apvienotās profila bildes @@ -896,6 +1560,7 @@ monitor.name=Nosaukums monitor.schedule=Grafiks monitor.next=Nākošās izpildes laiks monitor.previous=Pēdējās izpildes laiks +monitor.execute_times=Izpildes monitor.process=Darbojošies procesi monitor.desc=Apraksts monitor.start=Sākuma laiks @@ -956,6 +1621,8 @@ raw_seconds=sekundes raw_minutes=minūtes [dropzone] +default_message=Ievelciet failus vai nospiediet šeit, lai augšupielādētu. +invalid_input_type=Šādus failus nav iespējams augšupielādēt. file_too_big=Faila izmērs ({{filesize}} MB) pārsniedz maksimāli atļauto izmēru ({{maxFilesize}} MB). remove_file=Noņemt failu @@ -963,6 +1630,8 @@ remove_file=Noņemt failu notifications=Paziņojumi unread=Neizlasītie read=Izlasītie +no_unread=Nav nelasītu paziņojumu. +no_read=Nav izlasītu paziņojumu. pin=Piespraust paziņojumu mark_as_read=Atzīmēt kā izlasītu mark_as_unread=Atzīmēt kā nelasītu @@ -971,8 +1640,12 @@ mark_all_as_read=Atzīmēt visus kā izlasītus [gpg] error.extract_sign=Neizdevās izgūt parakstu error.generate_hash=Neizdevās uzģenerēt revīzijas jaucējkodu +error.no_committer_account=Revīzijas autora e-pasta adrese nav piesaistīta nevienam kontam error.no_gpg_keys_found=Šim parakstam datu bāzē netika atrasta zināma atslēga error.not_signed_commit=Nav parakstīta revīzija +error.failed_retrieval_gpg_keys=Neizdevās saņemt nevienu atslēgu, kas ir piesaistīta revīzijas autora kontam [units] +error.no_unit_allowed_repo=Jums nav tiesību aplūkot nevienu šī repozitorija sadaļu. +error.unit_not_allowed=Jums nav tiesību piekļūt šai repozitorija sadaļai. diff --git a/options/locale/locale_nb-NO.ini b/options/locale/locale_nb-NO.ini index ad90df481..c1813c92f 100644 --- a/options/locale/locale_nb-NO.ini +++ b/options/locale/locale_nb-NO.ini @@ -61,11 +61,17 @@ smtp_host=SMTP-vert admin_password=Passord [home] +password_holder=Passord [explore] +users=Brukere [auth] +register_helper_msg=Har du allerede en konto? Logg inn nå! +remember_me=Husk meg +forgot_password_title=Glemt passord +forgot_password=Glemt passord? [mail] diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini index 64db50357..576de0d25 100644 --- a/options/locale/locale_nl-NL.ini +++ b/options/locale/locale_nl-NL.ini @@ -1,11 +1,15 @@ +app_desc=Een eenvoudige, self-hosted Git service home=Beginscherm dashboard=Overzicht explore=Verkennen help=Help sign_in=Inloggen +sign_in_with=Inloggen met sign_out=Uitloggen +sign_up=Registreren link_account=Account Koppelen +link_account_signin_or_signup=Login met een bestaande gebruikersnaam/wachtwoord om een bestaand account te koppelen aan dit account, of maak een nieuw account aan. register=Registreren website=Website version=Versie @@ -14,12 +18,29 @@ template=Sjabloon language=Taal notifications=Meldingen create_new=Maken… +user_profile_and_more=Profiel en instellingen… signed_in_as=Aangemeld als +enable_javascript=Deze website werkt beter met JavaScript. username=Gebruikersnaam +email=E-mail adres password=Wachtwoord +re_type=Typ uw wachtwoord opnieuw in +captcha=CAPTCHA +twofa=Twee factor authenticatie +twofa_scratch=Eenmalige twee factor authenticatie code passcode=PIN +u2f_insert_key=Uw beveiligingssleutel invoegen +u2f_sign_in=Druk op de knop op uw beveiligingssleutel. Als u een knop niet kunt vinden, deze opnieuw invoegen. +u2f_press_button=Druk op de knop op uw beveiligingssleutel… +u2f_use_twofa=Gebruik een twee-factor code van uw telefoon +u2f_error=Wij kunnen niet uw beveiligingssleutel lezen! +u2f_unsupported_browser=Uw browser geen ondersteund U2F keys. Probeer een andere browser. +u2f_error_1=Er is een onbekende fout opgetreden. Probeer het opnieuw. +u2f_error_2=Zorg voor een versleutelde verbinding (https://) en een bezoek aan de juiste URL. +u2f_error_3=De server kan uw aanvraag niet verhandelen. +u2f_reload=Herladen repository=Repository organization=Organisatie @@ -32,6 +53,8 @@ new_org=Nieuwe organisatie manage_org=Beheer organisaties account_settings=Accountinstellingen settings=Instellingen +your_profile=Profiel +your_settings=Instellingen all=Alles sources=Bronnen @@ -47,21 +70,36 @@ cancel=Annuleren [install] install=Installatie +title=Initiële configuratie +docker_helper=Als u gebruik maakt van Gitea in Docker, lees dan de documentatie voordat u iets verandert op deze pagina. +requite_db_desc=Gitea vereist MySQL, PostgreSQL, MSSQL, SQLite3 of TiDB. db_title=Database-instellingen db_type=Database-type host=Server +user=Gebruikersnaam password=Wachtwoord db_name=Database naam +ssl_mode=SSL path=Pad +err_empty_db_path=Het SQLite3 of TiDB database pad mag niet leeg zijn. +err_empty_admin_password=Het administrator-wachtwoord mag niet leeg zijn. +general_title=Algemene Instellingen repo_path=Repositories basis map +lfs_path=Git LFS root pad +app_url=Gitea base URL log_root_path=Log-pad optional_title=Optionele instellingen +email_title=E-mail instellingen smtp_host=SMTP host +smtp_from=E-mails versturen als +mailer_user=SMTP gebruikersnaam +mailer_password=SMTP wachtwoord federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. openid_signin=OpenID-inloggen inschakelen enable_captcha_popup=Vereis captcha validatie voor zelf-registratie van gebruiker. +admin_name=Admin gebruikersnaam admin_password=Wachtwoord confirm_password=Verifieer wachtwoord install_btn_confirm=Installeer Gitea @@ -95,6 +133,8 @@ forgot_password=Wachtwoord vergeten? confirmation_mail_sent_prompt=Een nieuwe bevestigingsmail is gestuurd naar %s. De mail moet binnen %s worden bevestigd om je registratie te voltooien. reset_password_mail_sent_prompt=Een bevestigingsmail is gestuurd naar %s. De mail moet binnen %s worden bevestigd om wachtwoord reset proces te voltooien. active_your_account=Activeer uw account +prohibit_login=Inloggen niet toegestaan +prohibit_login_desc=Je mag met dit account niet inloggen, neem contact op met de beheerder van de site. has_unconfirmed_mail=Beste %s, u heeft een onbevestigd e-mailadres (%s). Als u nog geen bevestiging heeft ontvangen, of u een nieuwe aanvraag wilt doen, klik dan op de onderstaande knop. resend_mail=Klik hier om uw activatie mail nog een keer te verzenden email_not_associate=Dit emailadres is niet gekoppeld aan een account. @@ -150,6 +190,8 @@ url_error=is niet een valide URL. include_error=` moet substring '%s' bevatten.` unknown_error=Onbekende fout: +username_been_taken=Deze naam is al in gebruik. +username_password_incorrect=Gebruikersnaam of wachtwoord is onjuist. user_not_exist=De gebruiker bestaat niet. auth_failed=Verificatie mislukt: %v @@ -186,6 +228,7 @@ website=Website location=Locatie update_profile=Profiel bijwerken update_profile_success=Je profiel is bijgewerkt. +change_username=Je gebruikersnaam is gewijzigd. continue=Doorgaan cancel=Annuleren @@ -709,6 +752,7 @@ dashboard.total_gc_pause=Totaal GC verwerkingstijd dashboard.last_gc_pause=Laatste GC verwerkingstijd dashboard.gc_times=GC verwerkingen +users.name=Gebruikersnaam users.activated=Geactiveerd users.admin=Beheerder users.repos=Repos @@ -783,6 +827,7 @@ config.db_config=Databaseconfiguratie config.db_type=Type config.db_host=Host config.db_name=Naam +config.db_user=Gebruikersnaam config.db_path=Pad config.service_config=Serviceconfiguratie diff --git a/options/locale/locale_pl-PL.ini b/options/locale/locale_pl-PL.ini index 3dcb05082..59de43ec9 100644 --- a/options/locale/locale_pl-PL.ini +++ b/options/locale/locale_pl-PL.ini @@ -1,10 +1,13 @@ +app_desc=Bezbolesna usługa Git na własnym serwerze home=Strona główna dashboard=Pulpit explore=Odkrywaj help=Pomoc sign_in=Zaloguj się +sign_in_with=Zaloguj się za pomocą sign_out=Wyloguj +sign_up=Zarejestruj link_account=Powiąż konto register=Zarejestruj się website=Strona @@ -13,12 +16,21 @@ page=Strona template=Szablon language=Język notifications=Powiadomienia +create_new=Utwórz… +user_profile_and_more=Profil i ustawienia… signed_in_as=Zalogowany jako +enable_javascript=Strona działa najlepiej z włączonym JavaScript. username=Nazwa użytkownika +email=Adres e-mail password=Hasło +re_type=Wpisz ponownie hasło +captcha=CAPTCHA +twofa=Autoryzacja dwuskładnikowa +twofa_scratch=Kod jednorazowy weryfikacji dwuetapowej passcode=Kod dostępu +u2f_reload=Odśwież repository=Repozytorium organization=Organizacja @@ -29,8 +41,12 @@ new_mirror=Nowa kopia lustrzana new_fork=Nowy fork repozytorium new_org=Nowa organizacja manage_org=Zarządzaj organizacjami +admin_panel=Administracja stron account_settings=Ustawienia konta settings=Ustawienia +your_profile=Profil +your_starred=Z gwiazdką +your_settings=Ustawienia all=Wszystko sources=Źródła @@ -46,34 +62,61 @@ cancel=Anuluj [install] install=Instalacja +title=Wstępna konfiguracja db_title=Ustawienia bazy danych db_type=Typ bazy danych host=Serwer +user=Nazwa użytkownika password=Hasło db_name=Nazwa bazy danych +ssl_mode=SSL path=Ścieżka +err_empty_db_path=Ścieżka do bazy danych SQLite3 lub TiDB nie może być pusta. +err_empty_admin_password=Hasło administratora nie może być puste. +general_title=Ustawienia ogólne +app_name=Tytuł witryny +app_name_helper=Wprowadź nazwę firmy. repo_path=Katalog repozytoriów +lfs_path=Ścieżka główna Git LFS +run_user=Uruchom jako nazwa użytkownika +domain=Domena serwera SSH +ssh_port=Port serwera SSH +app_url=Podstawowy adres URL Gitea log_root_path=Ścieżka dla logów optional_title=Ustawienia opcjonalne +email_title=Ustawienia e-mail smtp_host=Serwer SMTP +smtp_from=Wyślij e-mail jako +mailer_user=Nazwa użytkownika SMTP +mailer_password=Hasło SMTP +register_confirm=Wymagają potwierdzenia e-mail przy rejestracji +mail_notify=Włącz powiadomienia e-mail +disable_gravatar=Wyłącz Gravatar federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. +disable_registration=Wyłącz rejestrację dwuskładnikową openid_signin=Włącz logowanie za pomocą OpenID +enable_captcha=Włącz CAPTCHA enable_captcha_popup=Wymagaj walidacji CAPTCHA przy samodzielnej rejestracji użytkownika. admin_password=Hasło confirm_password=Potwierdź hasło +admin_email=Adres e-mail install_btn_confirm=Zainstaluj Gitea test_git_failed=Nie udało się przetestować polecenia „git”: %v save_config_failed=Nie udało się zapisać konfiguracji: %v [home] +uname_holder=Nazwa użytkownika lub adres email password_holder=Hasło switch_dashboard_context=Przełącz kontekst pulpitu +my_repos=Repozytoria +show_more_repos=Pokaż więcej repozytoriów… collaborative_repos=Wspólne repozytoria my_orgs=Moje organizacje my_mirrors=Moje kopie lustrzane view_home=Zobacz %s +search_repos=Znajdź repozytorium… issues.in_your_repos=W Twoich repozytoriach @@ -82,12 +125,20 @@ repos=Repozytoria users=Użytkownicy organizations=Organizacje search=Wyszukiwanie +code=Kod +repo_no_results=Nie znaleziono pasujących repozytoriów. +user_no_results=Nie znaleziono pasującego użytkowników. +org_no_results=Nie znaleziono pasujących organizacji. +code_search_results=Wyniki wyszukiwania dla '%s' [auth] +create_new_account=Zarejestruj konto register_helper_msg=Masz już konto? Zaloguj się teraz! +social_register_helper_msg=Masz już konto? Powiąż je teraz! remember_me=Zapamiętaj mnie forgot_password_title=Zapomniałem hasła forgot_password=Zapomniałeś hasła? +sign_up_now=Potrzebujesz konta? Zarejestruj się teraz. confirmation_mail_sent_prompt=Nowy email aktywacyjny został wysłany na adres %s. Sprawdź swoją skrzynkę odbiorczą w ciągu %s aby zakończyć proces rejestracji. reset_password_mail_sent_prompt=Email potwierdzający został wysłany na adres %s. Sprawdź swoją skrzynkę odbiorczą w ciągu %s aby zakończyć proces resetowania hasła. active_your_account=Aktywuj swoje konto @@ -102,6 +153,7 @@ scratch_code=Kod jednorazowy use_scratch_code=Użyj kodu jednorazowego twofa_scratch_used=Użyłeś/aś swojego kodu jednorazowego. Przekierowano Cię do strony z ustawieniami autoryzacji dwuetapowej, gdzie możesz usunąć swoje urządzenie lub wygenerować nowy kod jednorazowy. twofa_scratch_token_incorrect=Twój kod jednorazowy jest niepoprawny. +login_userpass=Zaloguj się login_openid=OpenID openid_connect_submit=Połącz openid_connect_title=Połącz z istniejącym kontem @@ -117,12 +169,14 @@ register_notify=Witamy w Gitea [modal] yes=Tak no=Nie +modify=Aktualizuj [form] UserName=Nazwa użytkownika RepoName=Nazwa repozytorium Email=Adres e-mail Password=Hasło +Retype=Wpisz ponownie hasło SSHTitle=Nazwa klucza SSH HttpsUrl=HTTPS URL PayloadUrl=URL do wywołania @@ -145,7 +199,13 @@ email_error=` nie jest poprawnym adresem e-mail.` url_error=` nie jest poprawnym adresem URL.` include_error=`musi zawierać tekst '%s'.` unknown_error=Nieznany błąd: +captcha_incorrect=Kod CAPTCHA jest nieprawidłowy. +password_not_match=Hasła nie są identyczne. +username_been_taken=Ta nazwa użytkownika jest już zajęta. +repo_name_been_taken=Nazwa repozytorium jest już zajęta. +org_name_been_taken=Nazwa organizacji jest już zajęta. +team_name_been_taken=Nazwa zespołu jest już zajęta. user_not_exist=Użytkownik nie istnieje. auth_failed=Uwierzytelnienie się nie powiodło: %v @@ -154,6 +214,7 @@ auth_failed=Uwierzytelnienie się nie powiodło: %v target_branch_not_exist=Gałąź docelowa nie istnieje. [user] +change_avatar=Zmień swój awatar… join_on=Dołączył repositories=Repozytoria activity=Publiczna aktywność @@ -166,15 +227,21 @@ form.name_reserved=Nazwa użytkownika '%s' jest zarezerwowana. [settings] profile=Profil +account=Konto password=Hasło security=Bezpieczeństwo avatar=Awatar ssh_gpg_keys=Klucze SSH / GPG social=Konta społecznościowe +applications=Aplikacje +orgs=Zarządzaj organizacjami repos=Repozytoria delete=Usuń konto twofa=Autoryzacja dwuetapowa +account_link=Powiązane Konta +organization=Organizacje uid=UID +u2f=Klucze bezpieczeństwa public_profile=Profil publiczny full_name=Imię i nazwisko @@ -182,20 +249,33 @@ website=Strona location=Lokalizacja update_profile=Zaktualizuj profil update_profile_success=Twój profil został zaktualizowany. +change_username=Twój nick został zmieniony. continue=Kontynuuj cancel=Anuluj +language=Język federated_avatar_lookup=Wyszukiwanie zewnętrznych awatarów enable_custom_avatar=Włącz niestandardowe awatary choose_new_avatar=Wybierz nowy avatar +update_avatar=Aktualizuj awatar delete_current_avatar=Usuń obecny Avatar +uploaded_avatar_not_a_image=Załadowany plik nie jest obrazem. +update_avatar_success=Twój awatar został zmieniony. +change_password=Aktualizuj hasło old_password=Aktualne hasło new_password=Nowe hasło +retype_new_password=Powtórz nowe hasło +password_incorrect=Bieżące hasło nie jest prawidłowe. emails=Adresy e-mail +manage_emails=Zarządzaj adresami e-mail email_desc=Twój podstawowy adres e-mail będzie używany do powiadomień i innych działań. primary=Podstawowy +delete_email=Usuń +email_deletion=Usuń adres email +add_new_email=Dodaj nowy e-mail +add_email=Dodaj adres e-mail add_openid=Dodaj OpenID URI manage_ssh_keys=Zarządzaj kluczami SSH @@ -209,6 +289,11 @@ subkeys=Podklucze key_id=ID klucza key_name=Nazwa klucza key_content=Treść +delete_key=Usuń +ssh_key_deletion=Usuń klucz SSH +gpg_key_deletion=Usuń klucz GPG +ssh_key_deletion_success=Klucz SSH został usunięty. +gpg_key_deletion_success=Klucz GPG został usunięty. add_on=Dodano valid_until=Ważne do valid_forever=Ważne bezterminowo @@ -220,8 +305,10 @@ key_state_desc=Ten klucz był użyty w ciągu ostatnich 7 dni token_state_desc=Ten token był użyty w ciągu ostatnich 7 dni show_openid=Pokaż w profilu hide_openid=Ukryj w profilu +ssh_disabled=SSH jest wyłączony manage_social=Zarządzaj powiązanymi kontami społecznościowymi +unbind=Rozłącz generate_new_token=Wygeneruj nowy token token_name=Nazwa tokena @@ -230,6 +317,7 @@ delete_token=Usuń twofa_is_enrolled=Twoje konto ma obecnie włączoną autoryzację dwuetapową. twofa_not_enrolled=Twoje konto obecnie nie ma włączonej autoryzacji dwuetapowej. +twofa_disable=Wyłącz weryfikację dwuetapową twofa_disabled=Dwuetapowa autoryzacja została wyłączona. scan_this_image=Zeskanuj ten obraz za pomocą swojej aplikacji uwierzytelniającej: or_enter_secret=Lub wprowadź sekret: %s @@ -241,6 +329,7 @@ repos_none=Nie posiadasz żadnych repozytoriów delete_account=Usuń swoje konto confirm_delete_account=Potwierdź usunięcie +delete_account_title=Usuń swoje konto [repo] owner=Właściciel @@ -250,7 +339,10 @@ fork_repo=Sforkowane fork_from=Forkuj z repo_desc=Opis repo_lang=Język +repo_gitignore_helper=Wybierz szablony pliku .gitignore. license=Licencja +license_helper=Wybierz plik licencji. +readme=README create_repo=Utwórz repozytorium default_branch=Domyślna gałąź mirror_prune=Wyczyść @@ -272,12 +364,14 @@ migrate.failed=Migracja nie powiodła się: %v mirror_from=kopia lustrzana forked_from=sklonowany z copy_link=Kopiuj +copy_link_success=Link został skopiowany copied=Skopiowano unwatch=Przestań obserwować watch=Obserwuj unstar=Usuń gwiazdkę star=Gwiazdka fork=Forkuj +download_archive=Pobierz repozytorium no_desc=Brak opisu quick_guide=Skrócona instrukcja @@ -305,30 +399,45 @@ file_view_raw=Zobacz czysty file_permalink=Bezpośredni odnośnik stored_lfs=Przechowane za pomocą Git LFS +editor.new_file=Nowy plik +editor.upload_file=Wyślik plik +editor.edit_file=Edytuj plik editor.preview_changes=Podgląd zmian +editor.edit_this_file=Edytuj plik +editor.delete_this_file=Usuń plik +editor.file_delete_success=Plik %s został usunięty. +editor.name_your_file=Nazwij plik… editor.or=lub +editor.cancel_lower=Anuluj editor.commit_changes=Zatwierdź zmiany editor.add_tmpl=Dodaj '%s/' editor.add=Dodaj '%s' editor.update=Zaktualizuj '%s' editor.delete=Usuń '%s' +editor.commit_message_desc=Dodaj dodatkowy rozszerzony opis… editor.commit_directly_to_this_branch=Zmieniaj bezpośrednio gałąź %s. editor.create_new_branch=Stwórz nową gałąź dla tego commita i rozpocznij pull request. +editor.new_branch_name_desc=Nazwa nowej gałęzi… editor.cancel=Anuluj +editor.filename_cannot_be_empty=Nazwa pliku nie może być pusta. editor.branch_already_exists=Gałąź '%s' już istnieje w tym repozytorium. editor.no_changes_to_show=Brak zmian do pokazania. editor.fail_to_update_file=Tworzenie/aktualizacja pliku '%s' nie powiodła się z błędem: %v +editor.add_subdir=Dodaj katalog… editor.unable_to_upload_files=Wysyłanie plików do '%s' nie powiodło się z błędem: %v editor.upload_files_to_dir=Prześlij pliki do '%s' commits.commits=Commity +commits.search=Przeszukaj commity… commits.find=Szukaj +commits.search_all=Wszystkie gałęzie commits.author=Autor commits.message=Wiadomość commits.date=Data commits.older=Starsze commits.newer=Nowsze commits.signed_by=Podpisane przez +commits.gpg_key_id=ID klucza GPG issues.new=Nowy problem @@ -343,6 +452,8 @@ issues.new.closed_milestone=Zamknięte kamienie milowe issues.no_ref=Nie określono gałęzi/etykiety issues.create=Utwórz problem issues.new_label=Nowa etykieta +issues.new_label_placeholder=Nazwa etykiety +issues.new_label_desc_placeholder=Opis issues.create_label=Utwórz etykietę issues.label_templates.title=Załaduj wstępnie przygotowany zestaw etykiet issues.label_templates.helper=Wybierz zestaw etykiet @@ -361,6 +472,7 @@ issues.delete_branch_at=`usunął gałąź %s %s` issues.open_tab=Otwarte %d issues.close_tab=Zamknięte %d issues.filter_label=Etykieta +issues.filter_label_no_select=Wszystkie etykiety issues.filter_milestone=Kamień milowy issues.filter_assignee=Przypisany issues.filter_type=Typ @@ -411,6 +523,8 @@ issues.label_count=Etykiety %d issues.label_open_issues=Otwarte problemy %d issues.label_edit=Edytuj issues.label_delete=Usuń +issues.label_modify=Edytuj etykietę +issues.label_deletion=Usuń etykietę issues.label.filter_sort.alphabetically=Alfabetycznie issues.label.filter_sort.reverse_alphabetically=Alfabetycznie odwrotnie issues.label.filter_sort.by_size=Rozmiar @@ -420,17 +534,20 @@ issues.attachment.open_tab=`Kliknij, aby zobaczyć „%s” w nowej karcie` issues.attachment.download=`Kliknij, aby pobrać „%s”` issues.subscribe=Subskrybuj issues.unsubscribe=Anuluj subskrypcję +issues.tracker=Śledzenie czasu issues.start_tracking_short=Rozpocznij issues.start_tracking_history=`rozpoczął pracę nad %s` issues.tracking_already_started=`Już śledzisz czas pracy nad tą sprawą!` issues.stop_tracking=Zatrzymaj issues.stop_tracking_history=`zakończył pracę nad %s` +issues.add_time_short=Dodaj czas issues.add_time_cancel=Anuluj issues.add_time_history=`dodano spędzony czas %s` issues.add_time_hours=Godziny issues.add_time_minutes=Minuty issues.cancel_tracking=Anuluj issues.cancel_tracking_history=`anulowanie śledzenie czasu %s` +issues.due_date_form=yyyy-mm-dd pulls.new=Nowy pull request pulls.filter_branch=Filtruj branch @@ -471,6 +588,7 @@ milestones.filter_sort.least_issues=Najmniej problemów wiki=Wiki wiki.page=Strona wiki.filter_page=Filtruj stronę +wiki.new_page=Strona wiki.default_commit_message=Opisz tę zmianę (opcjonalne). wiki.save_page=Zapisz stronę wiki.last_commit_info=%s edytuje tę stronę %s @@ -526,6 +644,7 @@ search.results=Wyniki wyszukiwania dla "%s" w %s settings=Ustawienia settings.desc=Ustawienia to miejsce, w którym możesz zmieniać parametry repozytorium +settings.options=Repozytorium settings.collaboration.write=Zapis settings.collaboration.read=Odczyt settings.collaboration.undefined=Niezdefiniowany @@ -533,6 +652,8 @@ settings.hooks=Webhooki settings.githooks=Hooki Git settings.basic_settings=Ustawienia podstawowe settings.mirror_settings=Kopia lustrzana ustawień +settings.sync_mirror=Synchronizuj teraz +settings.site=Strona settings.update_settings=Aktualizuj ustawienia settings.advanced_settings=Ustawienia zaawansowane settings.external_wiki_url=Adres URL zewnętrznego Wiki @@ -546,11 +667,15 @@ settings.transfer=Przeniesienie własności settings.delete=Usuń to repozytorium settings.delete_notices_1=- Ta operacja NIE MOŻE zostać cofnięta. settings.transfer_owner=Nowy właściciel +settings.confirm_delete=Usuń repozytorium +settings.delete_collaborator=Usuń +settings.search_user_placeholder=Szukaj użytkownika… settings.add_webhook=Dodaj webhooka settings.webhook.test_delivery=Testuj dostawę settings.webhook.request=Żądanie settings.webhook.response=Odpowiedź settings.webhook.headers=Nagłówki +settings.webhook.payload=Zawartość settings.webhook.body=Treść settings.githook_edit_desc=Jeśli hook jest nieaktywny, zaprezentowana zostanie przykładowa treść. Pozostawienie pustej wartości wyłączy ten hook. settings.githook_name=Nazwa hooka @@ -583,6 +708,7 @@ settings.protected_branch_can_push_yes=Możesz wysyłać settings.protected_branch_can_push_no=Nie możesz wysyłać settings.add_protected_branch=Włącz ochronę settings.delete_protected_branch=Wyłącz ochronę +settings.choose_branch=Wybierz gałąź… diff.browse_source=Przeglądaj źródła diff.parent=rodzic @@ -611,6 +737,7 @@ release.title=Tytuł release.content=Treść release.write=Napisz release.preview=Podgląd +release.loading=Ładowanie… release.cancel=Anuluj release.publish=Publikuj wersję release.save_draft=Zapisz szkic @@ -625,6 +752,7 @@ branch.create_from=z '%s' branch.branch_already_exists=Gałąź '%s' już istnieje w tym repozytorium. branch.deleted_by=Usunięta przez %s +topic.done=Gotowe [org] org_name_holder=Nazwa organizacji @@ -635,12 +763,16 @@ people=Ludzie teams=Zespoły lower_members=członkowie lower_repositories=repozytoria +create_new_team=Nowy zespół +create_team=Utwórz zespół org_desc=Opis team_name=Nazwa zespołu team_desc=Opis +team_permission_desc=Uprawnienie settings=Ustawienia +settings.options=Organizacja settings.full_name=Imię i nazwisko settings.website=Strona settings.location=Lokalizacja @@ -649,9 +781,12 @@ settings.update_setting_success=Ustawienia organizacji zostały zaktualizowane. settings.delete=Usuń organizację settings.delete_account=Usuń tą organizację settings.confirm_delete_account=Potwierdź usunięcie +settings.delete_org_title=Usuń organizację settings.hooks_desc=Dodaj webhooki, uruchamiane dla wszystkich repozytoriów w tej organizacji. members.membership_visibility=Widoczność członkostwa: +members.public=Widoczny +members.private=Ukryty members.member_role=Rola: members.owner=Właściciel members.member=Członek @@ -668,15 +803,19 @@ teams.no_desc=Ten zespół nie ma opisu teams.settings=Ustawienia teams.members=Członkowie zespołu teams.update_settings=Aktualizuj ustawienia +teams.delete_team=Usuń zespół teams.add_team_member=Dodaj członka zespołu +teams.delete_team_title=Usuń zespół teams.delete_team_success=Zespół został usunięty. teams.repositories=Repozytoria zespołu +teams.search_repo_placeholder=Szukaj repozytorium… teams.add_team_repository=Dodaj repozytorium zespołu teams.remove_repo=Usuń teams.add_nonexistent_repo=Repozytorium, które próbujesz dodać, nie istnieje. Proszę je najpierw utworzyć. [admin] dashboard=Pulpit +users=Konta użytkownika organizations=Organizacje repositories=Repozytoria config=Konfiguracja @@ -686,6 +825,8 @@ first_page=Pierwsza last_page=Ostatnia total=Ogółem: %d +dashboard.statistic=Podsumowanie +dashboard.system_status=Status strony dashboard.operation_name=Nazwa operacji dashboard.operation_switch=Przełącz dashboard.operation_run=Uruchom @@ -724,6 +865,7 @@ dashboard.total_gc_pause=Sumaryczny czas wstrzymania przez GC dashboard.last_gc_pause=Ostatnie wstrzymanie przez GC dashboard.gc_times=Ilość wywołań GC +users.name=Nazwa użytkownika users.activated=Aktywowany users.admin=Administrator users.repos=Repozytoria @@ -731,11 +873,14 @@ users.created=Utworzony users.edit=Edytuj users.auth_source=Źródło uwierzytelniania users.local=Lokalny +users.update_profile=Zaktualizuj konto użytkownika +users.delete_account=Usuń konto użytkownika orgs.org_manage_panel=Zarządzanie organizacją orgs.name=Nazwa orgs.teams=Zespoły orgs.members=Członkowie +orgs.new_orga=Nowa organizacja repos.repo_manage_panel=Zarządzanie repozytoriami repos.owner=Właściciel @@ -760,6 +905,7 @@ auths.bind_dn=DN powiązania auths.bind_password=Hasło Bind auths.user_base=Baza wyszukiwania auths.user_dn=DN użytkownika +auths.search_page_size=Rozmiar strony auths.filter=Filtr użytkownika auths.admin_filter=Filtr administratora auths.ms_ad_sa=Atrybuty wyszukiwania MS AD @@ -791,6 +937,8 @@ auths.new_success=Uwierzytelnienie '%s' zostało dodane. auths.delete_auth_title=Usuń źródło uwierzytelniania config.server_config=Konfiguracja serwera +config.app_name=Tytuł strony +config.app_ver=Wersja Gitea config.custom_conf=Ścieżka do pliku konfiguracyjnego config.disable_router_log=Wyłącz dziennik routera config.run_mode=Tryb uruchamienia @@ -798,11 +946,13 @@ config.git_version=Wersja Git config.repo_root_path=Ścieżka główna repozytoriów config.lfs_root_path=Ścieżka główna katalogu LFS config.static_file_root_path=Ścieżka główna plików statycznych +config.log_file_root_path=Ścieżka dla logów config.script_type=Typ skryptu config.reverse_auth_user=Użytkownik odwrotnego proxy config.ssh_config=Konfiguracja SSH config.ssh_enabled=Włączone +config.ssh_domain=Domena serwera config.ssh_port=Port config.ssh_listen_port=Port nasłuchiwania config.ssh_root_path=Ścieżka do katalogu głównego @@ -815,11 +965,13 @@ config.db_config=Konfiguracja bazy danych config.db_type=Typ config.db_host=Serwer config.db_name=Nazwa +config.db_ssl_mode=SSL config.db_path=Ścieżka config.service_config=Konfiguracja usługi config.show_registration_button=Pokazuj przycisk rejestracji config.disable_key_size_check=Wyłącz sprawdzanie minimalnego rozmiaru klucza +config.enable_captcha=Włącz CAPTCHA config.active_code_lives=Ważność kodów aktywacyjnych config.reset_password_code_lives=Czas wygaśnięcia kodu resetowania hasła diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 14d6335d8..dae81d2cc 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -102,6 +102,7 @@ lfs_path_helper=У цій папці будуть зберігатися фай run_user=Запуск від імені Користувача run_user_helper=Введіть ім'я користувача операційної системи, під яким працює Gitea. Зверніть увагу, що цей користувач повинен бути доступ до кореневого шляху репозиторія. domain=Домен SSH сервера +domain_helper=Домен або хост-адреса для клонування через SSH - впливає на URL-адресу. ssh_port=Порт SSH сервера ssh_port_helper=Номер порту, який використовує SSH сервер. Залиште порожнім, щоб вимкнути SSH. http_port=Gitea HTTP порт @@ -149,6 +150,7 @@ test_git_failed=Не в змозі перевірити 'git' команду: %v sqlite3_not_available=Ця версія Gitea не підтримує SQLite3. Будь ласка, завантажте офіційну бінарну версію з %s (не версію gobuild). invalid_db_setting=Налаштування бази даних є некоректними: %v invalid_repo_path=Помилковий шлях до кореня репозиторію: %v +run_user_not_match=Ім'я користувача 'run as' не є поточним ім'ям користувача: %s -> %s save_config_failed=Не в змозі зберегти конфігурацію: %v invalid_admin_setting=Неприпустимі налаштування облікового запису адміністратора: %v install_success=Ласкаво просимо! Дякуємо вам за вибір Gitea. Розважайтеся, і будьте обережні! @@ -342,6 +344,7 @@ location=Місцезнаходження update_profile=Оновити профіль update_profile_success=Профіль успішно оновлено. change_username=Ваше Ім'я кристувача було змінено. +change_username_prompt=Примітка. Зміни в імені також змінюють URL-адресу облікового запису. continue=Продовжити cancel=Відмінити language=Мова @@ -371,8 +374,10 @@ primary=Основний primary_email=Зробити основним delete_email=Видалити email_deletion=Видалити адресу електронної пошти +email_deletion_desc=Електронна адреса та пов'язана з нею інформація буде видалена з вашого облікового запису. Git коміти, здійснені через цю електронну адресу, залишиться без змін. Продовжити? email_deletion_success=Адресу електронної пошти було видалено. openid_deletion=Видалити адресу OpenID +openid_deletion_desc=Видалення цієї OpenID-адреси з вашого облікового запису забороняє вам входити з ним. Продовжити? openid_deletion_success=Адреса OpenID була видалена. add_new_email=Додати нову адресу електронної пошти add_new_openid=Додати новий OpenID URI @@ -383,6 +388,7 @@ add_email_success=Додано нову адресу електронної по add_openid_success=Нова адреса OpenID була додана. keep_email_private=Приховати адресу електронної пошти keep_email_private_popup=Вашу адресу електронної пошти буде приховано від інших користувачів. +openid_desc=OpenID дозволяє делегувати аутентифікацію зовнішньому постачальнику послуг. manage_ssh_keys=Керувати SSH ключами manage_gpg_keys=Керувати GPG ключами @@ -396,6 +402,7 @@ add_new_gpg_key=Додати GPG ключ ssh_key_been_used=Цей ключ SSH вже додано до вашого облікового запису. ssh_key_name_used=Ключ SSH з таким самим ім'ям вже додано до вашого облікового запису. gpg_key_id_used=Публічний ключ GPG з таким самим ідентифікатором вже існує. +gpg_no_key_email_found=Цей ключ GPG непридатний для використання з будь-якою електронною адресою, що пов'язана з вашим обліковим записом. subkeys=Підключі key_id=ID ключа key_name=Ім'я ключа @@ -407,7 +414,7 @@ ssh_key_deletion=Видалити SSH ключ gpg_key_deletion=Видалити GPG ключ ssh_key_deletion_desc=Видалення ключа SSH скасовує доступ до вашого облікового запису. Продовжити? gpg_key_deletion_desc=Видалення GPG ключа скасовує перевірку підписаних ним комітів. Продовжити? -ssh_key_deletion_success=SSH було видалено. +ssh_key_deletion_success=SSH ключ був видалений. gpg_key_deletion_success=GPG було видалено. add_on=Додано valid_until=Дійсний до @@ -423,7 +430,9 @@ hide_openid=Не показувати у профілі ssh_disabled=SSH вимкнено manage_social=Керувати зв'язаними обліковими записами соціальних мереж +social_desc=Ці адреси соціальних мереж пов'язані з вашим обліковим записом Gitea. Переконайтеся, що ви їх впізнаєте, оскільки вони можуть бути використані для входу в обліковий запис Gitea. unbind=Від'єднати +unbind_success=Зв'язаний зовнішній обліковий запис було видалено. manage_access_token=Керування токенами доступу generate_new_token=Згенерувати новий токен @@ -431,30 +440,43 @@ tokens_desc=Ці токени надають доступ до вашого об new_token_desc=Додатки, що використовують токен, мають повний доступ до вашого облікового запису. token_name=Ім'я токену generate_token=Згенерувати токен +generate_token_success=Ваш новий токен був створений. Скопіюйте його зараз, оскільки він не буде показаний знову. delete_token=Видалити access_token_deletion=Видалити токен доступу +access_token_deletion_desc=Видалення токена скасовує доступ до вашого облікового запису для програм, що використовують його. Продовжити? +delete_token_success=Токен був знищений. Програми, що використовують його, більше не мають доступу до вашого облікового запису. twofa_desc=Двофакторна автентифікація підвищує безпеку вашого облікового запису. twofa_is_enrolled=Ваш обліковий запис на даний час використовує двофакторну автентифікацію. twofa_not_enrolled=Ваш обліковий запис наразі не використовує двофакторну автентифікаціїю. twofa_disable=Вимкнути двофакторну автентифікацію twofa_scratch_token_regenerate=Перестворити токен одноразового пароля +twofa_scratch_token_regenerated=Ваш новий scratch-токен %s. Зберігайте його в безпечному місці. twofa_enroll=Увімкнути двофакторну автентифікацію twofa_disable_note=При необхідності можна відключити двофакторну автентифікацію. +twofa_disable_desc=Вимкнення двофакторної автентифікації зробить ваш обліковий запис менш безпечним. Продовжити? regenerate_scratch_token_desc=Якщо ви втратили свій токен одноразового пароля або вже використовували його для входу, ви можете скинути його тут. twofa_disabled=Двофакторна автентифікація вимкнена. scan_this_image=Проскануйте це зображення вашим додатком для двуфакторної автентифікації: or_enter_secret=Або введіть секрет: %s +then_enter_passcode=І введіть пароль, який відображається в додатку: passcode_invalid=Некоректний пароль. Спробуй ще раз. +twofa_enrolled=Для вашого облікового запису було включена двофакторна автентифікація. Зберігайте свій scratch-токен (%s) у безпечному місці, оскільки він показується лише один раз! u2f_desc=Ключами безпеки є апаратні пристрої, що містять криптографічні ключі. Вони можуть використовуватися для двофакторної автентифікації. Ключ безпеки повинен підтримувати стандарт FIDO U2F. +u2f_require_twofa=Для використання ключів безпеки необхідно зареєструвати двофакторну аутентифікацію. u2f_register_key=Додати ключ безпеки u2f_nickname=Псевдонім +u2f_press_button=Натисніть кнопку на ключі безпеки, щоб зареєструвати його. u2f_delete_key=Видалити ключ безпеки +u2f_delete_key_desc=Якщо ви видалите ключ безпеки, ви не зможете використати його для входу. Ти впевнені? manage_account_links=Керування обліковими записами manage_account_links_desc=Ці зовнішні акаунти прив'язані до вашого аккаунту Gitea. +account_links_not_available=Наразі немає зовнішніх облікових записів, пов'язаних із вашим обліковим записом Gitea. remove_account_link=Видалити облікові записи +remove_account_link_desc=Видалення пов'язаного облікового запису відкликає його доступ до вашого облікового запису Gitea. Продовжити? +remove_account_link_success=Зв'язаний обліковий запис видалено. orgs_none=Ви не є учасником будь-якої організації. repos_none=У вас немає власних репозиторіїв @@ -463,12 +485,15 @@ delete_account=Видалити ваш обліковий запис delete_prompt=Ця операція остаточно видалить обліковий запис користувача. Це НЕ МОЖЛИВО відмінити. confirm_delete_account=Підтвердження видалення delete_account_title=Видалити цей обліковий запис +delete_account_desc=Ви впевнені, що хочете остаточно видалити цей обліковий запис? [repo] owner=Власник repo_name=Назва репозиторію +repo_name_helper=Хороші назви репозиторіїв використовують короткі, унікальні ключові слова що легко запам'ятати. visibility=Видимість visiblity_helper=Зробити репозиторій приватним +visiblity_helper_forced=Адміністратор вашого сайту налаштував параметри нових репозиторіїв: всі нові репозиторії будуть приватними. visiblity_fork_helper=(Зміна цього вплине на всі форки.) clone_helper=Потрібна допомога у клонуванні? Відвідайте Допомогу. fork_repo=Форкнути репозиторій @@ -485,9 +510,11 @@ auto_init=Ініціалізувати репозиторій (Додає .gitig create_repo=Створити репозиторій default_branch=Головна гілка mirror_prune=Очистити +mirror_prune_desc=Видалення застарілих посилань які ви відслідковуєте mirror_interval=Інтервал дзеркалювання (доступні значення 'h', 'm', 's') mirror_interval_invalid=Інтервал дзеркалювання є неприпустимим. mirror_address=Клонування з URL-адреси +mirror_address_desc=Включіть необхідні облікові дані в URL-адресу. mirror_last_synced=Остання синхронізація watchers=Спостерігачі stargazers=Зацікавлені @@ -497,6 +524,7 @@ reactions_more=додати %d більше form.reach_limit_of_creation=Ви досягли максимальної кількості %d створених репозиторіїв. form.name_reserved=Назву репозиторію '%s' зарезервовано. +form.name_pattern_not_allowed=Шаблон '%s' не дозволено в назві сховища. need_auth=Клонувати з авторизацією migrate_type=Тип міграції @@ -506,6 +534,7 @@ migrate.clone_address=Міграція / клонувати з URL-адреси migrate.clone_address_desc=URL-адреса HTTP(S) або Git "clone" існуючого репозиторія migrate.clone_local_path=або шлях до локального серверу migrate.permission_denied=Вам не дозволено імпортувати локальні репозиторії. +migrate.invalid_local_path=Локальний шлях недійсний. Він не існує або не є каталогом. migrate.failed=Міграція не вдалася: %v migrate.lfs_mirror_unsupported=Дзеркалювання LFS об'єктів не підтримується - використовуйте 'git lfs fetch --all' і 'git lfs push --all' вручну. @@ -531,6 +560,7 @@ push_exist_repo=Опублікувати існуючий репозиторій bare_message=Цей репозиторій порожній. code=Код +code.desc=Доступ до коду, файлів, комітів та гілок. branch=Гілка tree=Дерево filter_branch_and_tag=Фільтрувати гілку або тег @@ -564,6 +594,7 @@ editor.delete_this_file=Видалити файл editor.must_have_write_access=Ви повинні мати доступ на запис щоб запропонувати зміни до цього файлу. editor.file_delete_success=Файл '%s' видалено. editor.name_your_file=Дайте назву файлу… +editor.filename_help=Щоб додати каталог, наберіть його назву, а потім - косу риску ('/'). Щоб видалити каталог, перейдіть до початку поля і натисніть backspace. editor.or=або editor.cancel_lower=Скасувати editor.commit_changes=Закомітити зміни @@ -579,13 +610,19 @@ editor.cancel=Відмінити editor.filename_cannot_be_empty=Ім'я файлу не може бути порожнім. editor.branch_already_exists=Гілка '%s' вже присутня в репозиторії. editor.directory_is_a_file=Ім'я каталогу "%s" уже використовується як ім'я файлу в цьому репозиторії. +editor.file_is_a_symlink='%s' є символічним посиланням. Символічні посилання не можливо редагувати в веб-редакторі +editor.filename_is_a_directory=Назва файлу '%s' вже використовується як ім'я каталогу в цьому репозиторії. +editor.file_editing_no_longer_exists=Редагований файл '%s' більше не існує в цьому репозиторії. +editor.file_changed_while_editing=Зміст файлу змінився з моменту початку редагування. Натисніть тут , щоб переглянути що було змінено, або Прийняти зміни ще раз , щоб записати свої зміни. editor.file_already_exists=Файл з назвою "%s" уже існує у цьому репозиторію. editor.no_changes_to_show=Нема змін для показу. editor.fail_to_update_file=Не вдалося оновити/створити файл '%s' через помилку: %v editor.add_subdir=Додати каталог… editor.unable_to_upload_files=Не вдалося завантажити файли до '%s' через помилку: %v editor.upload_files_to_dir=Завантажувати файли до '%s' +editor.cannot_commit_to_protected_branch=Заборонено вносити коміт до захищеної гілки '%s'. +commits.desc=Переглянути історію зміни коду. commits.commits=Коміти commits.search=Знайти коміт… commits.find=Пошук @@ -601,6 +638,7 @@ commits.gpg_key_id=Ідентифікатор GPG ключа ext_issues=Зов. Проблеми ext_issues.desc=Посилання на зовнішню систему відстеження проблем. +issues.desc=Організація звітів про помилки, завдань та етапів. issues.new=Нова проблема issues.new.labels=Мітки issues.new.no_label=Без мітки @@ -620,12 +658,17 @@ issues.new_label_placeholder=Назва мітки issues.new_label_desc_placeholder=Опис issues.create_label=Створити мітку issues.label_templates.title=Завантажити визначений набір міток +issues.label_templates.info=Ще немає міток. Натисніть 'Нова мітка' або використовуйте попередньо визначений набір міток: issues.label_templates.helper=Оберіть набір міток issues.label_templates.use=Використовувати набір міток issues.label_templates.fail_to_load_file=Не вдалося завантажити файл шаблона мітки '%s': %v issues.add_label_at=додав(ла) мітку
%s
%s +issues.remove_label_at=видалив(ла) метку
%s
%s issues.add_milestone_at=`додав(ла) до %s етапу %s` +issues.change_milestone_at=`змінено цільової етап з %s на %s %s` +issues.remove_milestone_at=`видалено з етапу%s %s` issues.deleted_milestone=`(видалено)` +issues.self_assign_at=`самонавчался %s` issues.add_assignee_at=`був призначений %s %s` issues.remove_assignee_at=`видалили із призначених %s` issues.change_title_at=`змінив(ла) заголовок з %s на %s %s` @@ -695,6 +738,7 @@ issues.label_edit=Редагувати issues.label_delete=Видалити issues.label_modify=Редагувати мітку issues.label_deletion=Видалити мітку +issues.label_deletion_desc=Видалення мітки видаляє її з усіх обговорень. Продовжити? issues.label_deletion_success=Мітку було видалено. issues.label.filter_sort.alphabetically=За алфавітом issues.label.filter_sort.reverse_alphabetically=З кінця алфавіту @@ -726,21 +770,28 @@ issues.time_spent_from_all_authors=`Загальний витрачений ча issues.due_date=Дата завершення issues.invalid_due_date_format=Дата закінчення має бути в форматі 'ррр-мм-дд'. issues.error_modifying_due_date=Не вдалося змінити дату завершення. +issues.error_removing_due_date=Не вдалося видалити дату завершення. issues.due_date_form=рррр-мм-дд issues.due_date_form_add=Додати дату завершення issues.due_date_form_update=Оновити дату завершення issues.due_date_form_remove=Видалити дату завершення +issues.due_date_not_writer=Вам потрібен доступ до запису в репозиторії, щоб оновити дату завершення проблем. issues.due_date_not_set=Термін виконання не встановлений. issues.due_date_added=додав(ла) дату завершення %s %s +issues.due_date_modified=термін змінено з %s %s на %s +issues.due_date_remove=видалив(ла) дату завершення %s %s issues.due_date_overdue=Прострочено +pulls.desc=Увімкнути запити на злиття та інтерфейс узгодження правок. pulls.new=Новий запит на злиття pulls.compare_changes=Новий запит на злиття +pulls.compare_changes_desc=Порівняти дві гілки і створити запит на злиття для змін. pulls.compare_base=злити в pulls.compare_compare=pull з pulls.filter_branch=Фільтр по гілці pulls.no_results=Результатів не знайдено. pulls.nothing_to_compare=Ці гілки однакові. Немає необхідності створювати запитів на злиття. +pulls.has_pull_request=`Вже існує запит на злиття між двома цілями: %[2]s#%[3]d` pulls.create=Створити запит на злиття pulls.title_desc=хоче злити %[1]d комітів з %[2]s до %[3]s pulls.merged_title_desc=злито %[1]d комітів з %[2]s до %[3]s %[4]s @@ -750,6 +801,8 @@ pulls.tab_files=Змінені файли pulls.reopen_to_merge=Будь ласка перевідкрийте цей запит щоб здіснити операцію злиття. pulls.merged=Злито pulls.has_merged=Запит на злиття було об'єднано. +pulls.data_broken=Вміст цього запиту було порушено внаслідок видалення інформації ФОРКОМ. +pulls.is_checking=Триває перевірка конфліктів, будь ласка обновіть сторінку дещо пізніше. pulls.can_auto_merge_desc=Цей запит можна об'єднати автоматично. pulls.cannot_auto_merge_desc=Цей запит на злиття не може бути злитий автоматично через конфлікти. pulls.cannot_auto_merge_helper=Злийте вручну для вирішення конфліктів. @@ -758,6 +811,8 @@ pulls.no_merge_helper=Увімкніть параметри злиття в на pulls.merge_pull_request=Об'єднати запит на злиття pulls.rebase_merge_pull_request=Зробити Rebase і злити pulls.squash_merge_pull_request=Об'єднати (Squash) і злити +pulls.invalid_merge_option=Цей параметр злиття не можна використовувати для цього Pull Request'а. +pulls.open_unmerged_pull_exists=`Ви не можете знову відкрити, оскільки вже існує запит на злиття (%d) з того ж сховища з тією ж інформацією про злиття і в очікуванні.` milestones.new=Новий етап milestones.open_tab=%d відкрито @@ -766,17 +821,26 @@ milestones.closed=Закрито %s milestones.no_due_date=Немає дати завершення milestones.open=Відкрити milestones.close=Закрити +milestones.new_subheader=Створюйте етапи для організації ваших завдань. milestones.create=Створити етап milestones.title=Заголовок milestones.desc=Опис milestones.due_date=Дата завершення (опціонально) milestones.clear=Очистити +milestones.invalid_due_date_format=Дата завершення має бути в форматі 'рррр-мм-дд'. +milestones.create_success=Етап '%s' створений. milestones.edit=Редагувати етап +milestones.edit_subheader=Використовуйте кращий опис контрольної точки, щоб уникнути нерозуміння з боку інших людей. milestones.cancel=Відмінити milestones.modify=Оновити етап +milestones.edit_success=Етап '%s' був оновлений. milestones.deletion=Видалити етап +milestones.deletion_desc=Видалення етапу призведе до його видалення з усіх пов'язаних завдань. Продовжити? +milestones.deletion_success=Етап успішно видалено. milestones.filter_sort.closest_due_date=Найближче за датою milestones.filter_sort.furthest_due_date=Далі за датою +milestones.filter_sort.least_complete=Менш повне +milestones.filter_sort.most_complete=Більш повне milestones.filter_sort.most_issues=Найбільш проблем milestones.filter_sort.least_issues=Найменш проблем @@ -785,16 +849,21 @@ ext_wiki.desc=Посилання на зовнішню вікі. wiki=Вікі wiki.welcome=Ласкаво просимо до Вікі. +wiki.welcome_desc=Wiki дозволяє писати та ділитися документацією з співавторами. +wiki.desc=Пишіть та обмінюйтеся документацією із співавторами. wiki.create_first_page=Створити першу сторінку wiki.page=Сторінка wiki.filter_page=Фільтр сторінок wiki.new_page=Сторінка +wiki.default_commit_message=Напишіть примітку про оновлення цієї сторінки (необов'язково). wiki.save_page=Зберегти сторінку wiki.last_commit_info=%s редагував цю сторінку %s wiki.edit_page_button=Редагувати wiki.new_page_button=Нова сторінка wiki.delete_page_button=Видалити сторінку +wiki.delete_page_notice_1=Видалення сторінки вікі '%s' не може бути скасовано. Продовжити? wiki.page_already_exists=Вікі-сторінка з таким самим ім'ям вже існує. +wiki.reserved_page=Назва сторінки вікі '%s' зарезервована. wiki.pages=Сторінки wiki.last_updated=Останні оновлення %s @@ -832,6 +901,8 @@ activity.new_issues_count_1=Нова Проблема activity.new_issues_count_n=%d Проблем activity.new_issue_label=Відкриті activity.title.unresolved_conv_1=%d Незавершене обговорення +activity.title.unresolved_conv_n=%d Незавершених обговорень +activity.unresolved_conv_desc=Список всіх старих тікетів і Pull Request'ів з недавньої активністю, але ще не закритих або прийнятих. activity.unresolved_conv_label=Відкрити activity.title.releases_1=%d Реліз activity.title.releases_n=%d Релізів @@ -840,8 +911,10 @@ activity.published_release_label=Опубліковано search=Пошук search.search_repo=Пошук репозиторію +search.results=Результати пошуку для "%s" в %s settings=Налаштування +settings.desc=У налаштуваннях ви можете змінювати різні параметри цього сховища settings.options=Репозиторій settings.collaboration=Співавтори settings.collaboration.admin=Адміністратор @@ -853,6 +926,7 @@ settings.githooks=Git хуки settings.basic_settings=Базові налаштування settings.mirror_settings=Налаштування дзеркала settings.sync_mirror=Синхронізувати зараз +settings.mirror_sync_in_progress=Синхронізуються репозиторії-дзеркала. Зачекайте хвилину і обновіть сторінку. settings.site=Веб-сайт settings.update_settings=Оновити налаштування settings.advanced_settings=Додаткові налаштування @@ -860,15 +934,24 @@ settings.wiki_desc=Увімкнути репозиторії Вікі settings.use_internal_wiki=Використовувати вбудовані Вікі settings.use_external_wiki=Використовувати зовнішні Вікі settings.external_wiki_url=URL зовнішньої вікі +settings.external_wiki_url_error=Зовнішня URL-адреса wiki не є допустимою URL-адресою. +settings.external_wiki_url_desc=Відвідувачі будуть перенаправлені на URL-адресу, коли вони клацають по вкладці. settings.issues_desc=Увімкнути відстеження проблем в репозиторію settings.use_internal_issue_tracker=Використовувати вбудовану систему відстеження проблем +settings.use_external_issue_tracker=Використовувати зовнішню систему обліку завдань settings.external_tracker_url=URL зовнішньої системи відстеження проблем +settings.external_tracker_url_error=URL зовнішнього баг-трекера не є допустимою URL-адресою. +settings.external_tracker_url_desc=Відвідувачі перенаправляються на зовнішню URL-адресу, коли натискають вкладку 'Проблеми'. settings.tracker_url_format=Формат URL зовнішнього трекера задач +settings.tracker_issue_style=Формат номеру для зовнішньої системи обліку задач settings.tracker_issue_style.numeric=Цифровий settings.tracker_issue_style.alphanumeric=Буквено-цифровий +settings.tracker_url_format_desc=Використовуйте шаблони {user}, {repo} та {index} для імені користувача, репозиторію та номеру задічі. settings.enable_timetracker=Увімкнути відстеження часу +settings.allow_only_contributors_to_track_time=Враховувати тільки учасників розробки в підрахунку часу settings.pulls_desc=Увімкнути запити на злиття в репозиторій settings.pulls.ignore_whitespace=Ігнорувати пробіл у конфліктах +settings.pulls.allow_merge_commits=Дозволити коміти злиття settings.pulls.allow_rebase_merge=Увімкнути Rebasing коміти перед злиттям settings.pulls.allow_squash_commits=Увімкнути об'єднувати коміти перед злиттям settings.admin_settings=Налаштування адміністратора @@ -877,36 +960,60 @@ settings.danger_zone=Небезпечна зона settings.new_owner_has_same_repo=Новий власник вже має репозиторій з такою назвою. Будь ласка, виберіть інше ім'я. settings.convert=Перетворити на звичайний репозиторій settings.convert_desc=Ви можете сконвертувати це дзеркало у звичайний репозиторій. Це не може бути скасовано. +settings.convert_notices_1=Ця операція перетворить дзеркало у звичайний репозиторій і не може бути скасована. settings.convert_confirm=Перетворити репозиторій +settings.convert_succeed=Репозиторій успішно перетворений в звичайний. settings.transfer=Передати новому власнику +settings.transfer_desc=Передати репозиторій користувачеві або організації, де ви маєте права адміністратора. +settings.transfer_notices_1=- Ви втратите доступ до сховища, якщо ви переведете його окремому користувачеві. +settings.transfer_notices_2=- Ви збережете доступ, якщо новим власником стане організація, власником якої ви є. settings.transfer_form_title=Введіть ім'я репозиторія як підтвердження: settings.wiki_delete=Видалити вікі-дані +settings.wiki_delete_desc=Будьте уважні! Як тільки ви видалите Вікі - шляху назад не буде. +settings.wiki_delete_notices_1=- Це назавжди знищить і відключить wiki для %s. settings.confirm_wiki_delete=Видалити Вікі-дані +settings.wiki_deletion_success=Дані wiki були видалені. settings.delete=Видалити цей репозиторій +settings.delete_desc=Будьте уважні! Як тільки ви видалите репозиторій - шляху назад не буде. settings.delete_notices_1=- Цю операцію НЕ МОЖНА відмінити. +settings.delete_notices_2=- Ця операція назавжди видалить все з репозиторію %s, включаючи дані Git, пов'язані з ним завдання, коментарі і права доступу для співробітників. +settings.delete_notices_fork_1=- Всі форки стануть незалежними репозиторіями після видалення. settings.deletion_success=Репозиторій успішно видалено. settings.update_settings_success=Налаштування репозиторію було оновлено. settings.transfer_owner=Новий власник settings.make_transfer=Здіснити перенесення +settings.transfer_succeed=Репозиторій був перенесений. settings.confirm_delete=Видалити репозиторій settings.add_collaborator=Додати співавтора settings.add_collaborator_success=Додано співавтора. settings.delete_collaborator=Видалити settings.collaborator_deletion=Видалити співавтора +settings.collaborator_deletion_desc=Цей користувач більше не матиме доступу для спільної роботи в цьому репозиторії після видалення. Ви хочете продовжити? +settings.remove_collaborator_success=Співавтор видалений. settings.search_user_placeholder=Пошук користувача… +settings.org_not_allowed_to_be_collaborator=Організації не можуть бути додані як співавтори. +settings.user_is_org_member=Користувач є членом організації, члени якої не можуть бути додані в якості співавтора. settings.add_webhook=Додати веб-хук +settings.hooks_desc=Webhooks автоматично робить HTTP POST-запити на сервер, коли відбуваються певні події Gitea. Дізнайтеся більше в керівництві веб-вузла . settings.webhook_deletion=Видалити веб-хук +settings.webhook_deletion_desc=Видалення цього веб-хука призведе до видалення всієї пов'язаної з ним інформації, включаючи історію. Бажаєте продовжити? +settings.webhook_deletion_success=Webhook видалено. settings.webhook.test_delivery=Перевірити доставку settings.webhook.test_delivery_desc=Перевірте цей веб-хук з підробленою подією. +settings.webhook.test_delivery_success=Тест веб-хука був доданий в чергу доставки. Це може зайняти кілька секунд, перш ніж він відобразиться в історії доставки. settings.webhook.request=Запит settings.webhook.response=Відповідь settings.webhook.headers=Заголовки settings.webhook.payload=Зміст settings.webhook.body=Тіло +settings.githooks_desc=Git-хукі надаються Git самим по собі, ви можете змінювати файли підтримуваних хуков зі списку нижче щоб виконувати зовнішні операції. +settings.githook_edit_desc=Якщо хук неактивний, буде представлено зразок вмісту. Порожнє значення у цьому полі призведе до вимкнення хуку. settings.githook_name=Ім'я хуку settings.githook_content=Зміст хука settings.update_githook=Оновити хук +settings.add_webhook_desc=Gitea буде відправляти POST запити на вказану URL адресу, з інформацією про події, що відбуваються. Подробиці на сторінці інструкції по використанню webhooks . settings.payload_url=Цільова URL-адреса +settings.content_type=Тип вмісту settings.secret=Секрет settings.slack_username=Ім'я кристувача settings.slack_icon_url=URL іконки @@ -928,6 +1035,7 @@ settings.event_issues_desc=Проблему відкрито, закрито, п settings.event_issue_comment=Коментар проблеми settings.event_issue_comment_desc=Коментар проблеми створено, видалено чи відредаговано. settings.event_release=Реліз +settings.event_release_desc=Випуск опубліковано, оновлено чи видалено в сховища. settings.event_pull_request=Запити до злиття settings.event_pull_request_desc=Запит до злиття відкрито, закрито, перевідкрито, змінено, призначено, знято, мітку оновлено, мітку прибрано або синхронізовано. settings.event_push=Push @@ -935,6 +1043,7 @@ settings.event_push_desc=Git push до репозиторію. settings.event_repository=Репозиторій settings.event_repository_desc=Репозиторій створений або видалено. settings.active=Додавати інформацію про події +settings.active_helper=Також буде відправлена ​​інформація про подію, що відбулася. settings.add_hook_success=Веб-хук було додано. settings.update_webhook=Оновити веб-хук settings.update_hook_success=Веб-хук було оновлено. @@ -949,27 +1058,50 @@ settings.add_discord_hook_desc=Інтеграція Discord у settings.add_dingtalk_hook_desc=Інтеграція Dingtalk у ваш репозиторії. settings.deploy_keys=Ключі для розгортування settings.add_deploy_key=Додати ключ для розгортування +settings.deploy_key_desc=Ключі розгортання доступні тільки для читання. Це не те ж саме що і SSH-ключі аккаунта. settings.is_writable=Увімкнути доступ для запису +settings.is_writable_info=Чи може цей ключ бути використаний для виконання push в репозиторій? Ключі розгортання завжди мають доступ на pull. +settings.no_deploy_keys=Ви не додавали ключі розгортання. settings.title=Заголовок settings.deploy_key_content=Зміст +settings.key_been_used=Вміст ключа розгортання вже використовується. +settings.key_name_used=Ключ розгортання з таким заголовком вже існує. +settings.add_key_success=Новий ключ розгортання '%s' успішно доданий. settings.deploy_key_deletion=Видалити ключ для розгортування +settings.deploy_key_deletion_desc=Видалення ключа розгортки унеможливить доступ до сховища з його допомогою. Ви впевнені? settings.deploy_key_deletion_success=Ключі розгортання було видалено. settings.branches=Гілки settings.protected_branch=Захист гілки settings.protected_branch_can_push=Дозволити push? settings.protected_branch_can_push_yes=Ви можете виконувати push settings.protected_branch_can_push_no=Ви не можете виконувати push +settings.branch_protection=Захист гілки %s +settings.protect_this_branch=Захистити цю гілку +settings.protect_this_branch_desc=Вимкнути примусовий push і захистити від видалення. +settings.protect_whitelist_committers=Білий список тих, хто може робити push в цю гілку +settings.protect_whitelist_committers_desc=Додати користувачів або команди в білий список гілки. На них не будуть поширюватися звичайні обмеження на push. +settings.protect_whitelist_users=Користувачі, які можуть робити push в цю гілку: settings.protect_whitelist_search_users=Пошук користувачів… +settings.protect_whitelist_teams=Команди, члени яких можуть робити push в цю гілку: settings.protect_whitelist_search_teams=Пошук команд… +settings.protect_merge_whitelist_committers=Обмежити право на прийняття Pull Request'ів в цю гілку списком +settings.protect_merge_whitelist_committers_desc=Ви можете додавати користувачів або цілі команди в 'білий' список цієї гілки. Тільки присутні в списку зможуть приймати Pull Request'и. В іншому випадку будь-хто з правами запису до головного сховища буде володіти такою можливістю. +settings.protect_merge_whitelist_users=Користувачі з правом на прийняття Pull Request'ів в цю гілку: +settings.protect_merge_whitelist_teams=Команди, члени яких мають право на прийняття Pull Request'ів в цю гілку: settings.add_protected_branch=Увімкнути захист settings.delete_protected_branch=Вимкнути захист +settings.update_protect_branch_success=Налаштування захисту гілки '%s' були успішно змінені. +settings.remove_protected_branch_success=Захист гілки '%s' був успішно відключений. settings.protected_branch_deletion=Відключити захист гілки +settings.protected_branch_deletion_desc=Будь-який користувач з дозволами на запис зможе виконувати push в цю гілку. Ви впевнені? +settings.default_branch_desc=Головна гілка є 'базовою' для вашого сховища, на яку за замовчуванням спрямовані всі Pull Request'и і яка є обличчям вашого сховища. Перше, що побачить відвідувач - це вміст головною гілки. Виберіть її з уже існуючих: settings.choose_branch=Оберіть гілку… settings.no_protected_branch=Немає захищених гілок. diff.browse_source=Переглянути джерело diff.parent=джерело diff.commit=коміт +diff.data_not_available=Різниця недоступна diff.show_diff_stats=Показати статистику Diff diff.show_split_view=Розділений перегляд diff.show_unified_view=Об'єднаний перегляд @@ -979,6 +1111,7 @@ diff.view_file=Переглянути файл diff.file_suppressed=Різницю між файлами не показано, бо вона завелика diff.too_many_files=Деякі файли не було показано, через те що забагато файлів було змінено +releases.desc=Відслідковувати версії проекту (релізи) та завантаження. release.releases=Релізи release.new_release=Новий реліз release.draft=Чернетка @@ -987,6 +1120,8 @@ release.stable=Стабільний release.edit=редагувати release.ahead=%d комітів %s після цього релізу release.source_code=Код +release.new_subheader=Публікація релізів допоможе зберігати чітку історію розвитку вашого проекту. +release.edit_subheader=Публікація релізів допоможе зберігати чітку історію розвитку вашого проекту. release.tag_name=Назва тегу release.target=Ціль release.tag_helper=Виберіть існуючий тег або створіть новий. @@ -1003,25 +1138,37 @@ release.save_draft=Зберегти чернетку release.edit_release=Оновити реліз release.delete_release=Видалити реліз release.deletion=Видалити реліз +release.deletion_desc=Видалення релізу видаляє Git-тег зі сховищ. Вміст сховища і історія залишаться незмінними. Продовжити? release.deletion_success=Реліз, було видалено. +release.tag_name_already_exist=Реліз з цим ім'ям мітки вже існує. release.tag_name_invalid=Неприпустиме ім'я тега. release.downloads=Завантажити branch.name=Ім'я гілки branch.search=Пошук гілок +branch.already_exists=Гілка з ім'ям '%s' вже існує. branch.delete_head=Видалити branch.delete=Видалити гілку '%s' branch.delete_html=Видалити гілку +branch.delete_desc=Видалення гілки НЕЗВОРОТНЕ. Дію не можна скасувати. Продовжити? branch.deletion_success=Гілка '%s' видалена. branch.deletion_failed=Не вдалося видалити гілку "%s". +branch.delete_branch_has_new_commits=Гілку '%s' не можна видалити, оскільки після злиття були додані нові коміти. +branch.create_branch=Створити гілку %s branch.create_from=з '%s' branch.create_success=Створено гілку "%s". branch.branch_already_exists=Гілка '%s' вже присутня в репозиторії. +branch.branch_name_conflict=Ім'я гілки '%s' конфліктує з уже існуючою гілкою '%s'. +branch.tag_collision=Гілка '%s' не може бути створена, так як вже існує тег з таким ім'ям. branch.deleted_by=Видалено %s branch.restore_success=Гілку "%s" відновлено. +branch.restore_failed=Не вдалося відновити гілку '%s'. +branch.protected_deletion_failed=Гілка '%s' захищена. Її не можна видалити. topic.manage_topics=Керувати тематичними мітками topic.done=Готово +topic.count_prompt=Ви не можете вибрати більше 25 тем +topic.format_prompt=Теми мають починатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів [org] org_name_holder=Назва організації @@ -1044,6 +1191,8 @@ team_permission_desc=Права доступу team_unit_desc=Дозволити доступ до розділів репозиторію form.name_reserved=Назву організації '%s' зарезервовано. +form.name_pattern_not_allowed=Шаблон '%s' не дозволено в назві організації. +form.create_org_not_allowed=Вам не дозволено створювати організації. settings=Налаштування settings.options=Організація @@ -1056,8 +1205,11 @@ settings.change_orgname_prompt=Ця зміна змінить посилання settings.update_avatar_success=Аватар організації оновлений. settings.delete=Видалити організацію settings.delete_account=Видалити цю організацію +settings.delete_prompt=Організація буде остаточно видалена. Це НЕ МОЖЛИВО відмінити! settings.confirm_delete_account=Підтвердіть видалення settings.delete_org_title=Видалити організацію +settings.delete_org_desc=Ця організація буде безповоротно видалена. Продовжити? +settings.hooks_desc=Додайте webhooks, який буде викликатися для всіх репозиторіїв якими володіє ця організація. members.membership_visibility=Видимість учасника: members.public=Показувати @@ -1075,8 +1227,11 @@ members.invite_now=Запросити зараз teams.join=Приєднатися teams.leave=Покинути teams.read_access=Доступ для читання +teams.read_access_helper=Учасники можуть переглядати та клонувати репозиторії команд. teams.write_access=Доступ на запис +teams.write_access_helper=Учасники можуть читати і виконувати push в репозиторії команд. teams.admin_access=Доступ адміністратора +teams.admin_access_helper=Учасники можуть виконувати pull, push в репозиторії команд і додавати співавторів в команду. teams.no_desc=Ця команда не має опису teams.settings=Налаштування teams.owners_permission_desc=Власник має повний доступ до усіх репозиторіїв та має права адміністратора організації. @@ -1085,6 +1240,7 @@ teams.update_settings=Оновити налаштування teams.delete_team=Видалити команду teams.add_team_member=Додати учасника команди teams.delete_team_title=Видалити команду +teams.delete_team_desc=Видалення команди скасовує доступ до сховища для її членів. Продовжити? teams.delete_team_success=Команду було видалено. teams.read_permission_desc=Ця команда має доступ для читання: учасники можуть переглядати та клонувати репозиторії. teams.write_permission_desc=Ця команда надає доступ на запис: учасники можуть отримувати й виконувати push команди до репозитрію. @@ -1111,13 +1267,30 @@ total=Разом: %d dashboard.statistic=Підсумок dashboard.operations=Технічне обслуговування dashboard.system_status=Статус системи +dashboard.statistic_info=У базі даних Gitea записано %d користувачів, %d організацій, %d публічних ключів, %d репозиторіїв, %d підписок на репозиторії, %d додавань в обране, %d дій, %d доступів, %d задач, %d коментарів, %d соціальних облікових записів, %d підписок на користувачів, %d зеркал, %d релізів, %d джерел входу, %d веб-хуків, %d етапів, %d міток, %d задач хуків, %d команд, %d задач по оновленню, %d приєднаних файлів. dashboard.operation_name=Назва операції dashboard.operation_switch=Перемкнути dashboard.operation_run=Запустити +dashboard.clean_unbind_oauth=Очистити список незавершених авторизацій OAuth +dashboard.clean_unbind_oauth_success=Всі незавершені зв'язки OAuth були видалені. dashboard.delete_inactivate_accounts=Видалити всі неактивні облікові записи dashboard.delete_inactivate_accounts_success=Усі неактивні облікові записи успішно видалено. dashboard.delete_repo_archives=Видалити всі архіви репозиторіїв +dashboard.delete_repo_archives_success=Всі архіви репозиторіїв були видалені. +dashboard.delete_missing_repos=Видалити всі записи про репозиторії з відсутніми файлами Git +dashboard.delete_missing_repos_success=Всі записи про репозиторії з відсутніми файлами Git видалені. +dashboard.git_gc_repos=Виконати очистку сміття для всіх репозиторіїв dashboard.git_gc_repos_success=Всі репозиторії завершили збирання сміття. +dashboard.resync_all_sshkeys=Перезаписати файл '.ssh/authorized_keys' для SSH ключів Gitea. (Не потрібно для вбудованого SSH сервера.) +dashboard.resync_all_sshkeys_success=Всі відкриті ключі були перезаписані. +dashboard.resync_all_hooks=Пересинхронізувати перед-прийнятні, оновлюючі та пост-прийнятні хуки в усіх репозиторіях. +dashboard.resync_all_hooks_success=Були пересинхронізовані всі pre-receive, update і post-receive Git хуки. +dashboard.reinit_missing_repos=Переініціалізувати усі репозитрії git-файли яких втрачено +dashboard.reinit_missing_repos_success=Усі репозитрії git-файли яких втрачено, успішно переініціалізовано. +dashboard.sync_external_users=Синхронізувати дані зовнішніх користувачів +dashboard.sync_external_users_started=Запущена синхронізація зовнішніх користувачів. +dashboard.git_fsck=Запустити перевірку даних всіх репозиторіїв (git fsck) +dashboard.git_fsck_started=Перевірка даних репозиторіїв запущена. dashboard.server_uptime=Uptime серверу dashboard.current_goroutine=Поточна кількість Goroutines dashboard.current_memory_usage=Поточне використання пам'яті @@ -1125,6 +1298,7 @@ dashboard.total_memory_allocated=Виділено пам'яті загалом dashboard.memory_obtained=Отримано пам'яті dashboard.pointer_lookup_times=Пошуків вказівника dashboard.memory_allocate_times=Виділення пам'яті +dashboard.memory_free_times=Звільнень пам'яті dashboard.current_heap_usage=Поточне використання динамічної пам'яті dashboard.heap_memory_obtained=Отримано динамічної пам'яті dashboard.heap_memory_idle=Не використовується динамічною пам'яттю @@ -1161,6 +1335,8 @@ users.new_success=Обліковий запис '%s' створений. users.edit=Редагувати users.auth_source=Джерело автентифікації users.local=Локальні +users.auth_login_name=Логін для авторизації +users.password_helper=Залиште пароль порожнім, щоб не змінювати його. users.update_profile_success=Обліковий запис користувача було оновлено. users.edit_account=Редагувати обліковий запис users.max_repo_creation=Максимальна кількість репозиторіїв @@ -1173,6 +1349,8 @@ users.allow_import_local=Може імпортувати локальні реп users.allow_create_organization=Може створювати організацій users.update_profile=Оновити обліковий запис users.delete_account=Видалити цей обліковий запис +users.still_own_repo=Ваш обліковий запис все ще володіє одним або кількома репозиторіями, спочатку вам потрібно видалити або передати їх. +users.still_has_org=Цей обліковий запис все ще є членом однієї або декількох організацій. Для продовження, покиньте або видаліть організації. users.deletion_success=Обліковий запис користувача було видалено. orgs.org_manage_panel=Керування організаціями @@ -1206,22 +1384,34 @@ auths.host=Хост auths.port=Порт auths.bind_dn=Прив'язати DN auths.bind_password=Прив'язати пароль +auths.bind_password_helper=Попередження: цей пароль зберігається у вигляді простого тексту. Використовуйте обліковий запис тільки для читання, якщо це можливо. auths.user_base=База пошуку користувачів auths.user_dn=DN користувача auths.attribute_username=Атрибут імені користувача +auths.attribute_username_placeholder=Залиште порожнім, щоб використовувати ім'я користувача для реєстрації. +auths.attribute_name=Атрибут імені +auths.attribute_surname=Атрибут Surname +auths.attribute_mail=Атрибут Email +auths.attribute_ssh_public_key=Атрибут Відкритий SSH ключ +auths.attributes_in_bind=Витягувати атрибути в контексті Bind DN +auths.use_paged_search=Використовувати посторінковий пошук auths.search_page_size=Розмір сторінки auths.filter=Користувацький фільтр auths.admin_filter=Фільтр адміністратора +auths.ms_ad_sa=Атрибути пошуку MS AD auths.smtp_auth=Тип автентифікації SMTP auths.smtphost=SMTP хост auths.smtpport=SMTP порт auths.allowed_domains=Дозволені домени +auths.allowed_domains_helper=Залиште порожнім, щоб дозволити всі домени. Розділіть кілька доменів за допомогою коми (','). auths.enable_tls=Увімкнути TLS-шифрування auths.skip_tls_verify=Пропустити перевірку TLS auths.pam_service_name=Ім'я служби PAM auths.oauth2_provider=Постачальник OAuth2 auths.oauth2_clientID=ID клієнта (ключ) auths.oauth2_clientSecret=Ключ клієнта +auths.openIdConnectAutoDiscoveryURL=OpenID Connect URL для автоматизації входу +auths.oauth2_use_custom_url=Використовувати для користувача URL замість URL за замовчуванням auths.oauth2_tokenURL=URL токену auths.oauth2_authURL=URL авторизації auths.oauth2_profileURL=URL профілю @@ -1231,15 +1421,25 @@ auths.tips=Поради auths.tips.oauth2.general=OAuth2 автентифікація auths.tips.oauth2.general.tip=При додаванні нового OAuth2 провайдера, URL адреса переадресації по завершенні автентифікації повинена виглядати так:/user/oauth2//callback auths.tip.oauth2_provider=Постачальник OAuth2 +auths.tip.bitbucket=Створіть OAuth URI на сторінці https://bitbucket.org/account/user//oauth-consumers/new і додайте права 'Account' - 'Read' auths.tip.dropbox=Додайте новий додаток на https://www.dropbox.com/developers/apps auths.tip.facebook=Створіть новий додаток на https://developers.facebook.com/apps і додайте модуль "Facebook Login auths.tip.github=Додайте OAuth додаток на https://github.com/settings/applications/new auths.tip.gitlab=Додайте новий додаток на https://gitlab.com/profile/applications +auths.tip.google_plus=Отримайте облікові дані клієнта OAuth2 в консолі Google API на сторінці https://console.developers.google.com/ auths.tip.openid_connect=Використовуйте OpenID Connect Discovery URL (/.well-known/openid-configuration) для автоматичної настройки входу OAuth +auths.tip.twitter=Перейдіть на https://dev.twitter.com/apps, створіть програму і переконайтеся, що включена опція «Дозволити цю програму для входу в систему за допомогою Twitter» auths.edit=Редагувати джерело автентифікації +auths.activated=Ця аутентифікація активована +auths.new_success=Метод аутентифікації '%s' був доданий. +auths.update_success=Параметри аутентифікації оновлені. auths.update=Оновити джерело автентифікації auths.delete=Видалити джерело автентифікації auths.delete_auth_title=Видалити джерело автентифікації +auths.delete_auth_desc=Це джерело аутентифікації буде видалене, ви впевнені, що ви хочете продовжити? +auths.still_in_used=Ця перевірка справжності досі використовується деякими користувачами. Видаліть або змініть для цих користувачів тип входу в систему. +auths.deletion_success=Канал аутентифікації успішно знищений. +auths.login_source_exist=Джерело входу '%s' вже існує. config.server_config=Конфігурація сервера config.app_name=Назва сайту @@ -1257,6 +1457,7 @@ config.lfs_root_path=Кореневої шлях LFS config.static_file_root_path=Повний шлях до статичного файлу config.log_file_root_path=Шлях до лог файлу config.script_type=Тип скрипта +config.reverse_auth_user=Ім'я користувача для авторизації на reverse proxy config.ssh_config=Конфігурація SSH config.ssh_enabled=Увімкнено @@ -1281,6 +1482,7 @@ config.db_path=Шлях config.service_config=Конфігурація сервісу config.register_email_confirm=Потрібно підтвердити електронну пошту для реєстрації config.disable_register=Вимкнути самостійну реєстрацію +config.allow_only_external_registration=Включити реєстрацію тільки через сторонні сервіси config.enable_openid_signup=Увімкнути самостійну реєстрацію за допомогою OpenID config.enable_openid_signin=Увімкнути реєстрацію за допомогою OpenID config.show_registration_button=Показувати кнопку "Реєстрація @@ -1289,10 +1491,12 @@ config.mail_notify=Увімкнути сповіщення електронно config.disable_key_size_check=Вимкнути перевірку мінімального розміру ключа config.enable_captcha=Увімкнути CAPTCHA config.active_code_lives=Час актуальності кода підтвердження +config.reset_password_code_lives=Час життя коду на скидання пароля config.default_keep_email_private=Приховати адресу електронної пошти за замовчуванням config.default_allow_create_organization=Дозволити створення організацій за замовчуванням config.enable_timetracking=Увімкнути відстеження часу config.default_enable_timetracking=Увімкнути відстеження часу за замовчуванням +config.default_allow_only_contributors_to_track_time=Враховувати тільки учасників розробки в підрахунку часу config.no_reply_address=Прихований домен електронної пошти config.webhook_config=Конфігурація web-хуків @@ -1300,6 +1504,7 @@ config.queue_length=Довжина черги config.deliver_timeout=Затримка доставки config.skip_tls_verify=Пропустити перевірку TLS +config.mailer_config=Конфігурація SMTP-сервера config.mailer_enabled=Увімкнено config.mailer_disable_helo=Вимкнути HELO config.mailer_name=Ім'я @@ -1307,7 +1512,9 @@ config.mailer_host=Хост config.mailer_user=Користувач config.mailer_use_sendmail=Використовувати Sendmail config.mailer_sendmail_path=Шлях до Sendmail +config.mailer_sendmail_args=Додаткові аргументи до Sendmail config.send_test_mail=Відправити тестового листа +config.test_mail_failed=Не вдалося відправити тестовий лист на «%s»: %v config.test_mail_sent=Тестового листа було відправлено до '%s'. config.oauth_config=Конфігурація OAuth @@ -1431,8 +1638,14 @@ mark_as_unread=Позначити як непрочитане mark_all_as_read=Позначити всі як прочитані [gpg] +error.extract_sign=Не вдалося витягти підпис error.generate_hash=Не вдалося згенерувати хеш коміту +error.no_committer_account=Аккаунт користувача з таким Email не знайдено +error.no_gpg_keys_found=Не вдалося знайти GPG ключ що відповідає даному підпису error.not_signed_commit=Непідписаний коміт +error.failed_retrieval_gpg_keys=Не вдалося отримати відповідний GPG ключ користувача [units] +error.no_unit_allowed_repo=У вас немає доступу до жодного розділу цього репозитория. +error.unit_not_allowed=У вас немає доступу до жодного розділу цього репозитория. diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 4e59ed08e..1484e6a8f 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -1167,6 +1167,8 @@ branch.protected_deletion_failed=分支 '%s' 已被保护,不可删除。 topic.manage_topics=管理主题 topic.done=保存 +topic.count_prompt=您最多选择25个主题 +topic.format_prompt=主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符 [org] org_name_holder=组织名称 diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index 8a6914af2..dece41485 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -1,11 +1,15 @@ +app_desc=一個無痛、自託管的 Git 服務 home=首頁 dashboard=控制面版 explore=探索 help=說明 sign_in=登入 +sign_in_with=登入方式 sign_out=登出 +sign_up=註冊 link_account=連結帳戶 +link_account_signin_or_signup=使用現有的帳戶登入以連結到此帳號,或註冊新帳戶 register=註冊 website=網站 version=版本 @@ -13,12 +17,32 @@ page=頁面 template=樣板 language=語言 notifications=訊息 +create_new=建立... +user_profile_and_more=設定檔和設置... signed_in_as=已登入用戶 +enable_javascript=本網站在啟用 JavaScript 的情況下可以運作的更好。 username=用戶名稱 +email=電子郵件地址 password=密碼 +re_type=再次輸入密碼 +captcha=驗證碼 +twofa=兩步驟驗證 +twofa_scratch=兩步驟驗證備用碼 passcode=驗證碼 +u2f_insert_key=插入安全金鑰 +u2f_sign_in=按下安全金鑰上的按鈕。如果找不到按鈕, 請重新插入。 +u2f_press_button=請按下安全金鑰上的按鈕… +u2f_use_twofa=使用來自手機的兩步驟驗證碼 +u2f_error=找不到您的安全金鑰! +u2f_unsupported_browser=您的瀏覽器不支援 U2F 二步驟驗證技術。請嘗試其他瀏覽器。 +u2f_error_1=發生未知的錯誤,請重試。 +u2f_error_2=請確保您使用的是加密連接 (https://) 並且 URL 是正確的。 +u2f_error_3=伺服器無法執行您的請求。 +u2f_error_4=所提交的金鑰不符合此請求。如果您嘗試註冊它, 請確保該金鑰尚未註冊。 +u2f_error_5=在讀取金鑰之前已逾時,請重新載入以重試。 +u2f_reload=重新載入 repository=儲存庫 organization=組織 @@ -29,8 +53,12 @@ new_mirror=新鏡像 new_fork=Fork 新的儲存庫 new_org=新增組織 manage_org=管理組織 +admin_panel=網站管理 account_settings=帳號設定 settings=設定 +your_profile=個人訊息 +your_starred=標記星號 +your_settings=設定 all=所有 sources=來源 @@ -46,34 +74,105 @@ cancel=取消 [install] install=安裝頁面 +title=初始設定 +docker_helper=如果您正在使用 Docker 容器運行 Gitea,請務必先仔細閱讀官方文件後再對本頁面進行填寫。 +requite_db_desc=Gitea 需要安裝 MySQL、PostgreSQL、SQLite3、MSSQL 或 TiDB 其中一項。 db_title=資料庫設定 db_type=資料庫類型 host=主機 +user=使用者名稱 password=密碼 db_name=資料庫名稱 +db_helper=MySQL 使用者注意: 請使用 InnoDB 儲存引擎和 "utf8_general_ci" 字元集。 +ssl_mode=SSL path=資料庫文件路徑 +sqlite_helper=SQLite3 或 TiDB 資料庫的檔路徑。如果將 Gitea 作為服務運行,
請輸入絕對路徑。 +err_empty_db_path=SQLite3 或 TiDB 的資料庫路徑不能為空。 +err_invalid_tidb_name=TiDB 資料庫名稱不能包含 "." 和 "-" 字元。 +no_admin_and_disable_registration=您不能夠在未建立管理員使用者的情況下禁止註冊。 +err_empty_admin_password=管理員密碼不能為空。 +general_title=一般設定 +app_name=網站標題 +app_name_helper=您可以在此輸入您的公司名稱。 repo_path=儲存庫的根目錄 +repo_path_helper=所有遠端 Git 儲存庫會儲存到此目錄。 +lfs_path=Git LFS 根目錄 +lfs_path_helper=以 Git LFS 儲存檔案時會被儲存在此目錄中。請留空以停用 LFS 功能。 +run_user=以使用者名稱執行 +run_user_helper=輸入 Gitea 運行的作業系統使用者名稱。請注意, 此使用者必須具有對存儲庫根目錄的存取權限。 +domain=SSH 伺服器域名 +domain_helper=用於 SSH 複製的域名或主機位置。 +ssh_port=SSH 伺服器埠 +ssh_port_helper=SSH 伺服器使用的埠號,留空以停用此設定。 +http_port=Gitea HTTP 埠 +http_port_helper=Giteas web 伺服器將偵聽的埠號。 +app_url=Gitea 基本 URL。 +app_url_helper=用於 HTTP(S) 複製和電子郵件通知的基本地址。 log_root_path=日誌路徑 +log_root_path_helper=日誌檔將寫入此目錄。 optional_title=可選設定 +email_title=電子郵件設定 smtp_host=SMTP 主機 +smtp_from=電子郵件寄件者 +smtp_from_helper=Gitea 將會使用的電子郵件地址,輸入一個普通的電子郵件地址或使用 "名稱" 格式。 +mailer_user=SMTP 帳號 +mailer_password=SMTP 密碼 +register_confirm=要求註冊時確認電子郵件 +mail_notify=啟用郵件通知 +server_service_title=伺服器和其他服務設定 +offline_mode=啟用本地模式 +offline_mode_popup=停用其他服務並在本地提供所有資源。 +disable_gravatar=禁用 Gravatar 大頭貼 +disable_gravatar_popup=禁用 Gravatar 和其他大頭貼服務。除非使用者在本地上傳大頭貼, 否則將使用預設的大頭貼。 +federated_avatar_lookup=開啟聯合大頭貼 federated_avatar_lookup_popup=開啟聯合頭像查詢並使用基於開放源碼的 libravatar 服務 +disable_registration=關閉註冊功能 +disable_registration_popup=關閉註冊功能,只有管理員可以新增帳號。 +allow_only_external_registration_popup=僅允許通過外部服務註冊。 openid_signin=啟用 OpenID 登入 +openid_signin_popup=啟用 OpenID 登入 +openid_signup=啟用 OpenID 註冊 +openid_signup_popup=啟用基於 OpenID 的註冊 +enable_captcha=啟用驗證碼 enable_captcha_popup=要求在用戶註冊時輸入驗證碼 +require_sign_in_view=需要登錄才能查看頁面 +require_sign_in_view_popup=限制對使用者的頁面存取權限,未登入的使用者只會看到“登錄”和註冊頁面。 +admin_setting_desc=建立管理員帳號是選用的。 第一個註冊的使用者將自動成為管理員。 +admin_title=管理員帳號設定 +admin_name=管理員使用者名稱 admin_password=管理員密碼 confirm_password=確認密碼 +admin_email=電子郵件地址 install_btn_confirm=立即安裝 test_git_failed=無法識別 'git' 命令:%v +sqlite3_not_available=您目前的版本不支援 SQLite3,請從 %s 下載官方的預先編譯版本(不是 gobuild 版本)。 +invalid_db_setting=資料庫設定不正確: %v +invalid_repo_path=儲存庫根目錄設定不正確:%v save_config_failed=儲存設定失敗:%v +invalid_admin_setting=管理員帳戶設定不正確:%v +install_success=歡迎!非常感謝您選擇 Gitea,祝你一切順利。 +invalid_log_root_path=日誌根目錄設定不正確: %v +default_keep_email_private=預設隱藏電子郵件地址 +default_keep_email_private_popup=預設隱藏新使用者的電子郵件地址。 +default_allow_create_organization=預設允許建立組織 +default_allow_create_organization_popup=預設允許新使用者建立組織 +default_enable_timetracking=預設啟用時間追蹤 +default_enable_timetracking_popup=預設情況下啟用新存儲庫的時間跟蹤。 +no_reply_address=隱藏電子郵件域名 [home] +uname_holder=使用者名稱或電子郵件地址 password_holder=密碼 switch_dashboard_context=切換控制面版用戶 +my_repos=儲存庫 +show_more_repos=顯示更多儲存庫... collaborative_repos=參與協作的儲存庫 my_orgs=我的組織 my_mirrors=我的鏡像 view_home=訪問 %s +search_repos=搜尋儲存庫... issues.in_your_repos=屬於該用戶儲存庫的 @@ -82,30 +181,50 @@ repos=儲存庫 users=用戶 organizations=組織 search=搜尋 +code=程式碼 +repo_no_results=沒有找到符合的儲存庫。 +user_no_results=沒有找到符合的使用者。 +org_no_results=沒有找到符合的組織。 +code_search_results=搜尋結果:'%s' [auth] +create_new_account=註冊帳號 register_helper_msg=已經註冊?立即登錄! +social_register_helper_msg=已有帳號?立即連結! +disable_register_prompt=註冊功能已停用。 請聯繫您的網站管理員。 remember_me=記住登錄 forgot_password_title=忘記密碼 forgot_password=忘記密碼? +sign_up_now=還沒有帳戶?馬上註冊。 confirmation_mail_sent_prompt=一封新的確認郵件已發送至 %s。請檢查您的收件箱並在 %s 小時內完成確認註冊操作。 reset_password_mail_sent_prompt=一封新的確認郵件已發送至 %s。請檢查您的收件箱並在 %s 小時內完成重設密碼操作。 active_your_account=啟用您的帳戶 +prohibit_login=禁止登錄 +prohibit_login_desc=您的帳號被禁止登入,請聯繫網站管理員 +resent_limit_prompt=抱歉,您請求發送驗證電子郵件太過頻繁,請等待 3 分鐘後再試一次。 has_unconfirmed_mail=%s 您好,您有一封發送至( %s) 但未被確認的郵件。如果您未收到啟用郵件,或需要重新發送,請單擊下方的按鈕。 resend_mail=單擊此處重新發送確認郵件 email_not_associate=此電子郵件地址未與任何帳戶連結 send_reset_mail=點選此處重發您的密碼重製郵件 reset_password=重置密碼 +invalid_code=您的確認代碼無效或已過期。 reset_password_helper=單擊此處重置密碼 +non_local_account=非本機帳號無法透過 Gitea 的網頁介面更改密碼 verify=驗證 scratch_code=備用碼 use_scratch_code=使用備用碼 twofa_scratch_used=你已經使用了你的備用碼。你將會被轉到兩步驟驗證設定頁面以便移除你已註冊設備或重新產生新的備用碼。 +twofa_passcode_incorrect=你的驗證碼不正確。如果您遺失設備,請使用您的備用碼登入。 twofa_scratch_token_incorrect=您的備用碼不正確 +login_userpass=登入 login_openid=OpenID openid_connect_submit=連接 openid_connect_title=連接到現有帳戶 +openid_connect_desc=所選的 OpenID URI 未知。在這裡連結一個新帳戶。 openid_register_title=建立新帳戶 +openid_register_desc=所選的 OpenID URI 未知。在這裡連結一個新帳戶。 +openid_signin_desc=輸入您的 OpenID URI。例如: https://anne.me、bob.openid.org.cn 或 gnusocial.net/carry。 +disable_forgot_password_mail=註冊功能已停用。 請聯繫您的網站管理員。 [mail] activate_account=請啟用您的帳戶 @@ -117,12 +236,14 @@ register_notify=歡迎來到 Gitea [modal] yes=確認操作 no=取消操作 +modify=更新 [form] UserName=用戶名 RepoName=儲存庫名稱 Email=郵箱地址 Password=密碼 +Retype=再次輸入密碼 SSHTitle=SSH 金鑰名稱 HttpsUrl=HTTPS URL 地址 PayloadUrl=推送地址 @@ -138,6 +259,8 @@ TreeName=檔案路徑 Content=內容 require_error=不能為空。 +alpha_dash_error=`應該只包含英文字母、數字、破折號 ("-")、和底線 ("_") 字元。` +alpha_dash_dot_error=`應該只包含英文字母、數字、破折號 ("-")、下底線("_")和小數點 (".") 字元。` size_error=長度必須為 %s。 min_size_error=長度最小為 %s 個字符。 max_size_error=長度最大為 %s 個字符。 @@ -145,19 +268,40 @@ email_error=不是一個有效的郵箱地址。 url_error=不是一個有效的 URL。 include_error=必須包含子字符串 '%s'。 unknown_error=未知錯誤: +captcha_incorrect=驗證碼不正確。 +password_not_match=密碼錯誤。 +username_been_taken=使用者名稱已被使用 +repo_name_been_taken=儲存庫名稱已被使用。 +org_name_been_taken=組織名稱已被使用。 +team_name_been_taken=團隊名稱已被使用。 +email_been_used=此電子信箱已被使用 +openid_been_used=OpenID 位址 '%s' 已被使用。 +username_password_incorrect=使用者名稱或密碼不正確 +enterred_invalid_repo_name=輸入的儲存庫名稱不正確。 +enterred_invalid_owner_name=新的擁有者名稱無效。 +enterred_invalid_password=輸入的密碼不正確。 user_not_exist=該用戶名不存在 +cannot_add_org_to_team=組織不能被新增為團隊成員。 +invalid_ssh_key=無法驗證您的 SSH 密鑰:%s +invalid_gpg_key=無法驗證您的 GPG 密鑰:%s +unable_verify_ssh_key=無法驗證 SSH 密鑰; 請再次檢查是否有錯誤。 auth_failed=授權認證失敗:%v +still_own_repo=此帳戶仍然擁有一個或多個儲存庫,您必須先刪除或轉移它們。 +still_has_org=此帳戶仍是一個或多個組織的成員,您必須先離開它們。 +org_still_own_repo=該組織仍然是某些儲存庫的擁有者,您必須先轉移或刪除它們才能執行刪除組織! target_branch_not_exist=目標分支不存在 [user] +change_avatar=更改大頭貼... join_on=加入於 repositories=儲存庫列表 activity=公開活動 followers=關註者 +starred=已收藏 following=關註中 follow=關注 unfollow=取消關注 @@ -166,15 +310,21 @@ form.name_reserved=用戶名 '%s' 是被保留的。 [settings] profile=個人訊息 +account=帳號 password=修改密碼 security=安全性 avatar=頭像 ssh_gpg_keys=SSH / GPG 金鑰 social=社交帳號綁定 +applications=應用程式 +orgs=管理組織 repos=儲存庫 delete=刪除帳戶 twofa=兩步驟驗證 +account_link=已連結帳號 +organization=組織 uid=用戶 ID +u2f=安全密鑰 public_profile=公開訊息 full_name=自定義名稱 @@ -182,21 +332,51 @@ website=個人網站 location=所在地區 update_profile=更新訊息 update_profile_success=您的個人資料已被更新 +change_username=您的使用者名稱已更改。 +change_username_prompt=注意:使用者名更改也會更改您的帳戶的 URL。 continue=繼續操作 cancel=取消操作 +language=語言 +lookup_avatar_by_mail=以電子郵件查找大頭貼 federated_avatar_lookup=Federated Avatar 查詢 enable_custom_avatar=啟動自定義頭像 choose_new_avatar=選擇新的頭像 +update_avatar=更新大頭貼 delete_current_avatar=刪除當前頭像 +uploaded_avatar_not_a_image=上傳的文件不是圖片 +update_avatar_success=您的大頭貼已更新 +change_password=更新密碼 old_password=當前密碼 new_password=新的密碼 +retype_new_password=重新輸入新的密碼 +password_incorrect=輸入的密碼不正確! +change_password_success=您的密碼已更新。 從現在起使用您的新密碼登錄。 +password_change_disabled=非本機帳號無法透過 Gitea 的網頁介面更改密碼 emails=電子郵件地址 +manage_emails=管理電子郵件地址 +manage_openid=管理 OpenID 位址 email_desc=您的主要邮箱地址将被用于通知提醒和其它操作。 primary=主要 +primary_email=設為主要 +delete_email=移除 +email_deletion=移除電子郵件地址 +email_deletion_desc=電子郵件地址和相關資訊將從您的帳戶中刪除,此電子郵件地址所提交的 Git 將保持不變,繼續執行? +email_deletion_success=該電子郵件地址已被刪除 +openid_deletion=移除 OpenID 位址 +openid_deletion_desc=從您的帳戶刪除此 OpenID 位址將會無法使用它進行登入。你確定要繼續嗎? +openid_deletion_success=該 OpenID 已被刪除 +add_new_email=新增電子郵件地址 +add_new_openid=新增 OpenID URI +add_email=新增電子郵件地址 add_openid=新增 OpenID URI +add_email_confirmation_sent=一封新的確認郵件已發送至 '%s',請檢查您的收件匣並在 %s 內確認您的電郵地址。 +add_email_success=該電子郵件地址已添加。 +add_openid_success=該 OpenID 已添加。 +keep_email_private=隱藏電子郵件地址 +keep_email_private_popup=您的電子郵件地址將對其他使用者隱藏。 manage_ssh_keys=管理 SSH 金鑰 manage_gpg_keys=管理 GPG 金鑰 @@ -209,6 +389,13 @@ subkeys=次金鑰 key_id=金鑰 ID key_name=金鑰名稱 key_content=金鑰內容 +add_key_success=SSH 金鑰 "%s" 已被添加。 +add_gpg_key_success=GPG 金鑰 "%s" 已被添加。 +delete_key=移除 +ssh_key_deletion=移除 SSH 金鑰 +gpg_key_deletion=移除 GPG 金鑰 +ssh_key_deletion_success=SSH 金鑰已被移除。 +gpg_key_deletion_success=GPG 金鑰已被移除。 add_on=增加於 valid_until=有效期至 valid_forever=永遠有效 @@ -220,63 +407,112 @@ key_state_desc=該金鑰在 7 天內被使用過 token_state_desc=此 token 在過去七天內曾經被使用過 show_openid=在設定檔顯示 hide_openid=從設定檔隱藏 +ssh_disabled=已停用 SSH manage_social=管理關聯社交帳戶 +unbind=解除連結 +manage_access_token=管理訪問權杖 generate_new_token=生成新的令牌 token_name=令牌名稱 generate_token=生成令牌 delete_token=删除令牌 +access_token_deletion=刪除訪問權杖 twofa_is_enrolled=您的帳號已經啟用兩步驟驗證。 twofa_not_enrolled=您的帳號目前尚未啟用兩步驟驗證。 +twofa_disable=停用兩步驟驗證 +twofa_scratch_token_regenerate=重新產生備用碼 +twofa_enroll=啟用兩步驟驗證 +twofa_disable_note=如有需要,您可以停用兩步驟驗證。 +twofa_disable_desc=關閉兩步驟驗證會使您的帳號安全性降低,繼續執行? +regenerate_scratch_token_desc=如果您遺失了臨時令牌或已經使用它登錄,您可以在此處重置。 twofa_disabled=兩步驟驗證已經被關閉。 scan_this_image=使用您的授權應用程式來掃瞄圖片: or_enter_secret=或者輸入密碼: %s +then_enter_passcode=然後輸入應用程序中顯示的驗證碼: +passcode_invalid=無效的驗證碼,請重試。 +u2f_desc=安全密鑰是包含加密密鑰的硬體設備。 它們可以用於兩步驟認證。 安全密鑰必須符合 FIDO U2F 標準。 +u2f_require_twofa=必須先開啟兩步驟驗證才能使用安全密鑰。 +u2f_register_key=新增安全密鑰 +u2f_nickname=暱稱 +u2f_press_button=按下安全密鑰上的密碼進行註冊。 +u2f_delete_key=移除安全密鑰 +u2f_delete_key_desc=如果您移除安全密鑰,則無法再使用它登錄。 確定嗎? +manage_account_links=管理已連結的帳號 +manage_account_links_desc=這些外部帳號與您的 Gitea 帳號相關聯。 +account_links_not_available=目前沒有連結到您的 Gitea 帳號的外部帳號 +remove_account_link=刪除連結的帳號 +remove_account_link_success=已取消連結帳號。 orgs_none=您尚未成為任一組織的成員。 repos_none=您不擁有任何存儲庫 delete_account=刪除當前帳戶 +delete_prompt=此動作將永久刪除您的帳號,而且無法復原。 confirm_delete_account=確認刪除帳戶 +delete_account_title=刪除使用者帳號 +delete_account_desc=您是否確定要永久刪除此帳號? [repo] owner=擁有者 repo_name=儲存庫名稱 +repo_name_helper=好的儲存庫名稱通常是簡短的、好記的、且獨特的。 visibility=可見度 +visiblity_helper=將儲存庫設為私人 +visiblity_helper_forced=您的網站管理員強制新的存儲庫必需設定為私人。 +visiblity_fork_helper=(修改該值將會影響到所有派生倉庫) +clone_helper=不知道如何操作?瀏覽 幫助 ! fork_repo=複製儲存庫 fork_from=複製自 repo_desc=儲存庫描述 repo_lang=儲存庫語言 +repo_gitignore_helper=選擇 .gitignore 範本 license=授權許可 +license_helper=請選擇授權許可文件 +readme=讀我 +readme_helper=選擇讀我檔案範本。 +auto_init=初始化儲存庫(建立 .gitignore、授權許可文件和讀我檔案) create_repo=建立儲存庫 default_branch=默認分支 mirror_prune=裁減 +mirror_interval_invalid=鏡像周期無效 +mirror_address=由 URL 複製 +mirror_last_synced=上次同步 watchers=關注者 stargazers=稱讚者 forks=複製儲存庫 pick_reaction=選擇你的表情反應 +reactions_more=再多添加 %d個 form.reach_limit_of_creation=您已經達到了儲存庫 %d 的上限。 form.name_reserved=儲存庫名稱 '%s' 是預留的。 +form.name_pattern_not_allowed=儲存庫名稱無法使用 "%s"。 +need_auth=複製授權驗證 migrate_type=遷移類型 migrate_type_helper=該儲存庫將是一個鏡像 migrate_repo=遷移儲存庫 +migrate.clone_local_path=或者是本地端伺服器路徑 migrate.permission_denied=您並沒有導入本地儲存庫的權限。 +migrate.invalid_local_path=無效的本地路徑,該路徑不存在或不是一個目錄! migrate.failed=遷移失敗:%v mirror_from=镜像来自 forked_from=複製自 +fork_from_self=您無法複製您的儲存庫! copy_link=複製連結 +copy_link_success=已複製連結 +copy_link_error=請按下 ⌘-C 或 Ctrl-C 複製 copied=複製成功 unwatch=取消關注 watch=關注 unstar=取消收藏 star=收藏 fork=複製 +download_archive=下载此儲存庫 no_desc=暫無描述 quick_guide=快速幫助 @@ -302,10 +538,23 @@ file_raw=原始文件 file_history=歷史記錄 file_view_raw=查看原始文件 file_permalink=永久連結 +file_too_large=檔案太大,無法顯示。 +video_not_supported_in_browser=您的瀏覽器不支援使用 HTML5 播放影片。 stored_lfs=儲存到到 Git LFS +commit_graph=提交線圖 +editor.new_file=新增文件 +editor.upload_file=上傳文件 +editor.edit_file=編輯文件 editor.preview_changes=預覽更改 +editor.cannot_edit_non_text_files=網站介面不能編輯二進位檔案 +editor.edit_this_file=編輯文件 +editor.must_be_on_a_branch=你必須在一個分支或提出對此檔的更改。 +editor.delete_this_file=刪除檔案 +editor.file_delete_success=文件 %s 已刪除。 +editor.name_your_file=命名您的檔案... editor.or=或 +editor.cancel_lower=取消 editor.commit_changes=提交更改嗎? editor.add_tmpl=新增 %s/' editor.add=新增 '%s' @@ -313,7 +562,9 @@ editor.update=更新 '%s' editor.delete=刪除 '%s' editor.commit_directly_to_this_branch=直接提交到 %s 分支。 editor.create_new_branch=建立 新的分支 為此提交和開始合併請求。 +editor.new_branch_name_desc=新的分支名稱... editor.cancel=取消 +editor.filename_cannot_be_empty=檔案名稱不能為空。 editor.branch_already_exists='%s' 已存在於此存儲庫。 editor.no_changes_to_show=沒有可以顯示的變更。 editor.fail_to_update_file=上傳/建立檔案 '%s' 失敗, 錯誤訊息: %v @@ -321,14 +572,18 @@ editor.unable_to_upload_files=上傳檔案失敗到 '%s', 錯誤訊息: %v editor.upload_files_to_dir=上傳檔案到 '%s' commits.commits=次程式碼提交 +commits.search=搜尋提交歷史... commits.find=搜尋 +commits.search_all=所有分支 commits.author=作者 commits.message=備註 commits.date=提交日期 commits.older=更舊的提交 commits.newer=更新的提交 commits.signed_by=簽署人 +commits.gpg_key_id=GPG 金鑰 ID +ext_issues=外部問題 issues.new=建立問題 issues.new.labels=標籤 @@ -339,12 +594,18 @@ issues.new.no_milestone=未選擇里程碑 issues.new.clear_milestone=清除已選取里程碑 issues.new.open_milestone=開啟中的里程碑 issues.new.closed_milestone=已關閉的里程碑 +issues.new.assignees=指派成員 +issues.new.clear_assignees=取消指派成員 +issues.new.no_assignees=未指派成員 issues.no_ref=未指定分支或標籤 issues.create=建立問題 issues.new_label=建立標籤 +issues.new_label_placeholder=標籤名稱 +issues.new_label_desc_placeholder=描述 issues.create_label=建立標籤 issues.label_templates.title=載入一組預定義的標籤 issues.label_templates.helper=選擇一個標籤集 +issues.label_templates.use=使用標籤集 issues.label_templates.fail_to_load_file=載入標籤範本檔案 '%s' 失敗: %v issues.add_label_at=加上了
%s
標籤 %s issues.remove_label_at=刪除了
%s
標籤 %s @@ -360,8 +621,11 @@ issues.delete_branch_at=`刪除分支 %s %s` issues.open_tab=%d 個開啓中 issues.close_tab=%d 個已關閉 issues.filter_label=標籤篩選 +issues.filter_label_no_select=所有標籤 issues.filter_milestone=里程碑篩選 +issues.filter_milestone_no_select=所有里程碑 issues.filter_assignee=指派人篩選 +issues.filter_assginee_no_select=所有指派成員 issues.filter_type=類型篩選 issues.filter_type.all_issues=所有問題 issues.filter_type.assigned_to_you=指派給您的 @@ -374,6 +638,10 @@ issues.filter_sort.recentupdate=最近更新 issues.filter_sort.leastupdate=最少更新 issues.filter_sort.mostcomment=最多評論 issues.filter_sort.leastcomment=最少評論 +issues.filter_sort.moststars=最多收藏 +issues.filter_sort.feweststars=最少收藏 +issues.filter_sort.mostforks=最多複製 +issues.filter_sort.fewestforks=最少複製 issues.action_open=開啟 issues.action_close=關閉 issues.action_label=標籤 @@ -392,7 +660,9 @@ issues.commented_at=` 評論 %s` issues.delete_comment_confirm=您確定要刪除該條評論嗎? issues.no_content=尚未有任何內容 issues.close_issue=關閉 +issues.close_comment_issue=評論並關閉 issues.reopen_issue=重新開啟 +issues.reopen_comment_issue=重新開啟並評論 issues.create_comment=評論 issues.closed_at=`於 %[2]s 關閉` issues.reopened_at=`於 %[2]s 重新開啟` @@ -405,11 +675,16 @@ issues.edit=編輯 issues.cancel=取消 issues.save=儲存 issues.label_title=標籤名稱 +issues.label_description=標籤描述 issues.label_color=標籤顏色 issues.label_count=%d 個標籤 issues.label_open_issues=%d 個開啓的問題 issues.label_edit=編輯 issues.label_delete=刪除 +issues.label_modify=編輯標籤 +issues.label_deletion=刪除標籤 +issues.label_deletion_desc=刪除標籤會將其從所有問題中刪除,繼續? +issues.label_deletion_success=標籤已刪除。 issues.label.filter_sort.alphabetically=按字母顺序排序 issues.label.filter_sort.reverse_alphabetically=按字母反向排序 issues.label.filter_sort.by_size=大小 @@ -419,19 +694,43 @@ issues.attachment.open_tab=`在新的標籤頁中查看 '%s'` issues.attachment.download=`點擊下載 '%s'` issues.subscribe=訂閱 issues.unsubscribe=取消訂閱 +issues.tracker=時間追蹤 issues.start_tracking_short=開始 +issues.start_tracking=開始時間追蹤 issues.start_tracking_history=`開始工作 %s` issues.tracking_already_started=`您已經開始時間追蹤這個 問題!` issues.stop_tracking=停止 issues.stop_tracking_history=`結束工作 %s` +issues.add_time=手動新增時間 +issues.add_time_short=新增時間 issues.add_time_cancel=取消 issues.add_time_history=`加入了花費時間 %s` issues.add_time_hours=小時 issues.add_time_minutes=分鐘 +issues.add_time_sum_to_small=沒有輸入時間。 issues.cancel_tracking=取消 issues.cancel_tracking_history=`取消時間追蹤 %s` +issues.time_spent_total=總花費時間 +issues.time_spent_from_all_authors=`總花費時間:%s` +issues.due_date=截止日期 +issues.invalid_due_date_format=截止日期的格式錯誤,必須是 "yyyy-mm-dd" 的形式。 +issues.error_modifying_due_date=無法修改截止日期。 +issues.error_removing_due_date=無法移除截止日期。 +issues.due_date_form=yyyy年mm月dd日 +issues.due_date_form_add=新增截止日期 +issues.due_date_form_update=更改截止日期 +issues.due_date_form_remove=移除截止日期 +issues.due_date_not_writer=您需要儲存庫寫入權限來更改問題的截止日。 +issues.due_date_not_set=未設定截止日期。 +issues.due_date_added=已新增截止日期 %s %s +issues.due_date_modified=已將截止日期修改為 %s ,原截止日期: %s %s +issues.due_date_remove=已移除截止日期 %s %s +issues.due_date_overdue=逾期 +pulls.desc=啟用合併請求及程式碼審核 pulls.new=建立合併請求 +pulls.compare_changes=建立合併請求 +pulls.compare_base=合併到 pulls.filter_branch=過濾分支 pulls.no_results=未找到結果 pulls.create=建立合併請求 @@ -439,8 +738,10 @@ pulls.title_desc=請求將 %[1]d 次程式碼提交從 %[2]s 合併 pulls.merged_title_desc=於 %[4]s 將 %[1]d 次代碼提交從 %[2]s合併至 %[3]s pulls.tab_conversation=對話內容 pulls.tab_commits=程式碼提交 +pulls.tab_files=檔案變動 pulls.reopen_to_merge=請重新開啟合併請求來完成合併操作。 pulls.merged=已合併 +pulls.has_merged=合併請求已合併。 pulls.can_auto_merge_desc=這個拉請求可以自動合併。 pulls.merge_pull_request=合併請求 pulls.rebase_merge_pull_request=Rebase 合併 @@ -460,6 +761,10 @@ milestones.due_date=截止日期(可選) milestones.clear=清除 milestones.edit=編輯里程碑 milestones.cancel=取消 +milestones.modify=更新里程碑 +milestones.edit_success=里程碑 '%s' 已更新。 +milestones.deletion=刪除里程碑 +milestones.deletion_success=里程碑已刪除 milestones.filter_sort.closest_due_date=到期日由近到遠 milestones.filter_sort.furthest_due_date=到期日由遠到近 milestones.filter_sort.least_complete=完成度由低到高 @@ -467,10 +772,17 @@ milestones.filter_sort.most_complete=完成度由高到低 milestones.filter_sort.most_issues=問題由多到少 milestones.filter_sort.least_issues=問題由少到多 +ext_wiki=外部 Wiki +ext_wiki.desc=連結外部 Wiki。 wiki=Wiki +wiki.welcome=歡迎使用 Wiki! +wiki.welcome_desc=Wiki 允許你撰寫和與協作者分享文件 +wiki.desc=撰寫與和協作者分享文件。 +wiki.create_first_page=建立第一個頁面 wiki.page=頁面 wiki.filter_page=過濾頁面 +wiki.new_page=頁面 wiki.default_commit_message=關於此次頁面修改的說明(非必要)。 wiki.save_page=儲存頁面 wiki.last_commit_info=%s 於 %s 修改了此頁面 @@ -478,6 +790,7 @@ wiki.edit_page_button=修改 wiki.new_page_button=新的頁面 wiki.delete_page_button=刪除頁面 wiki.page_already_exists=相同名稱的 Wiki 頁面已經存在。 +wiki.reserved_page=Wiki 頁面名稱 "%s" 是被保留的。 wiki.pages=所有頁面 wiki.last_updated=最後更新於 %s @@ -496,6 +809,9 @@ activity.title.user_n=%d 使用者 activity.title.prs_1=%d 合併請求 activity.title.prs_n=%d 合併請求 activity.merged_prs_label=已合併 +activity.opened_prs_label=提案 +activity.active_issues_count_1=%d 個問題 +activity.active_issues_count_n=%d 個問題 activity.closed_issues_count_1=已關閉的 Issue activity.closed_issues_count_n=已關閉的 Issue activity.title.issues_1=%d Issue @@ -506,6 +822,9 @@ activity.closed_issue_label=已關閉 activity.new_issues_count_1=建立問題 activity.new_issues_count_n=建立問題 activity.new_issue_label=已開啟 +activity.title.unresolved_conv_1=%d 未解決的對話 +activity.title.unresolved_conv_n=%d 未解決的對話 +activity.unresolved_conv_desc=這些最近更改的問題和合併請求尚未解決。 activity.unresolved_conv_label=打開 activity.title.releases_1=%d 版本發佈 activity.title.releases_n=%d 版本發佈 @@ -518,6 +837,9 @@ search.results=在 %s 中搜尋 "%s" 的结果 settings=儲存庫設定 settings.desc=設定是您可以管理儲存庫設定的地方 +settings.options=儲存庫 +settings.collaboration=協作者 +settings.collaboration.admin=管理員 settings.collaboration.write=可寫權限 settings.collaboration.read=可讀權限 settings.collaboration.undefined=未定義 @@ -525,24 +847,47 @@ settings.hooks=管理 Webhooks settings.githooks=管理 Git Hooks settings.basic_settings=基本設定 settings.mirror_settings=鏡像設定 +settings.sync_mirror=現在同步 +settings.mirror_sync_in_progress=鏡像同步正在進行中。 請稍後再回來看看。 +settings.site=網站 settings.update_settings=更新儲存庫設定 settings.advanced_settings=高級設定 +settings.wiki_desc=啟用儲存庫 Wiki +settings.use_internal_wiki=使用內建 Wiki +settings.use_external_wiki=使用外部 Wiki settings.external_wiki_url=外部 Wiki 連結 +settings.external_wiki_url_error=外部 Wiki 網址不是有效的網址。 +settings.external_wiki_url_desc=點擊問題標籤時,使用者會被導向到外部 Wiki URL。 settings.external_tracker_url=外部 Issue 追蹤網址 settings.tracker_url_format=外部問題管理系統的 URL 格式 settings.tracker_issue_style.numeric=數字 settings.tracker_issue_style.alphanumeric=字母及數字 +settings.enable_timetracker=啟用時間追蹤 settings.danger_zone=危險操作區 settings.new_owner_has_same_repo=新的儲存庫擁有者已經存在同名儲存庫! +settings.convert=轉換為普通儲存庫 +settings.convert_desc=您可以將此鏡像轉成普通儲存庫。此動作不可恢復。 +settings.convert_confirm=轉換儲存庫 +settings.convert_succeed=鏡像儲存庫已成功轉換為一般儲存庫。 settings.transfer=轉移儲存庫所有權 settings.delete=刪除本儲存庫 settings.delete_notices_1=- 此操作 不可以 被回滾。 settings.transfer_owner=新擁有者 +settings.confirm_delete=刪除儲存庫 +settings.add_collaborator=增加協作者 +settings.add_collaborator_success=成功增加協作者! +settings.delete_collaborator=移除 +settings.collaborator_deletion=移除協作者 +settings.remove_collaborator_success=已移除協作者。 +settings.search_user_placeholder=搜尋使用者... settings.add_webhook=建立 Webhook +settings.webhook_deletion=刪除 Webhook +settings.webhook_deletion_success=Webhook 已刪除。 settings.webhook.test_delivery=測試推送 settings.webhook.request=請求內容 settings.webhook.response=響應內容 settings.webhook.headers=標題 +settings.webhook.payload=內容 settings.webhook.body=響應內容 settings.githook_edit_desc=如果 Hook 未啟動,則會顯示樣例文件中的內容。如果想要刪除某個 Hook,則提交空白文本即可。 settings.githook_name=Hook 名稱 @@ -554,11 +899,26 @@ settings.slack_icon_url=圖標 URL settings.discord_username=使用者名稱 settings.discord_icon_url=Icon URL settings.slack_color=顏色代碼 +settings.event_desc=觸發條件: +settings.event_push_only=推送事件 +settings.event_send_everything=所有事件 +settings.event_choose=自訂事件... settings.event_create=建立 +settings.event_create_desc=建立分支或標籤 +settings.event_delete=刪除 +settings.event_delete_desc=分支或標籤已刪除 +settings.event_fork=複製 +settings.event_issues=問題 +settings.event_issues_desc=問題被開啟,關閉,重新開啟,編輯,指派,取消指派,更新標籤,清除標籤,設置里程碑或取消設置里程碑。 +settings.event_issue_comment=問題評論 +settings.event_issue_comment_desc=已經建立、編輯或刪除的問題評論。 settings.event_pull_request=合併請求 settings.event_push=推送 settings.event_repository=儲存庫 +settings.add_hook_success=Webhook 新增成功! settings.update_webhook=更新 Webhook +settings.update_hook_success=Webhook 更新成功! +settings.delete_webhook=刪除 Webhook settings.recent_deliveries=最近推送記錄 settings.hook_type=Hook 類型 settings.slack_token=令牌 @@ -573,8 +933,11 @@ settings.protected_branch=分支保護 settings.protected_branch_can_push=允許推送? settings.protected_branch_can_push_yes=你可以推送 settings.protected_branch_can_push_no=你不能推送 +settings.protect_whitelist_search_users=搜尋使用者... +settings.protect_whitelist_search_teams=搜尋團隊... settings.add_protected_branch=啟用保護 settings.delete_protected_branch=停用保護 +settings.choose_branch=選擇一個分支... diff.browse_source=瀏覽代碼 diff.parent=父節點 @@ -603,19 +966,34 @@ release.title=標題 release.content=內容 release.write=內容編輯 release.preview=效果預覽 +release.loading=載入中… +release.prerelease_helper=標記此版本不適合生產使用。 release.cancel=取消 release.publish=發佈版本 release.save_draft=儲存草稿 +release.edit_release=編輯發佈訊息 +release.delete_release=刪除發佈 +release.deletion=刪除發佈 release.deletion_success=已刪除此版本發佈。 +release.tag_name_already_exist=已經存在使用相同標籤的發佈版本。 +release.tag_name_invalid=標籤名稱無效。 release.downloads=下載附件 +branch.name=分支名稱 branch.search=搜尋分支 +branch.already_exists=分支名稱 ”%s“ 已經存在 branch.delete_head=刪除 +branch.delete=刪除分支 '%s' branch.delete_html=刪除分支 +branch.delete_desc=刪除分支是永久的。 此動作無法復原,繼續? +branch.deletion_success=分支 '%s' 已被刪除。 +branch.deletion_failed=刪除分支 '%s' 失敗。 branch.create_branch=建立分支 %s +branch.create_from=從 '%s' branch.branch_already_exists=分支 '%s' 已存在此儲存庫 branch.deleted_by=刪除人: %s +topic.done=完成 [org] org_name_holder=組織名稱 @@ -626,23 +1004,37 @@ people=組織成員 teams=組織團隊 lower_members=名成員 lower_repositories=個儲存庫 +create_new_team=建立團隊 +create_team=建立新的團隊 org_desc=組織描述 team_name=團隊名稱 team_desc=團隊描述 +team_permission_desc=權限 +form.name_reserved=組織名稱 '%s' 是被保留的。 +form.name_pattern_not_allowed=儲存庫名稱無法使用 "%s"。 +form.create_org_not_allowed=此帳號禁止建立組織。 settings=組織設定 +settings.options=組織 settings.full_name=組織全名 settings.website=官方網站 settings.location=所在地區 settings.update_settings=更新組織設定 settings.update_setting_success=組織設定已更新。 +settings.change_orgname_prompt=注意:修改組織名稱將會同時修改對應的 URL。 +settings.update_avatar_success=組織大頭貼已經更新。 settings.delete=刪除組織 settings.delete_account=刪除當前組織 settings.confirm_delete_account=確認刪除組織 +settings.delete_org_title=刪除組織 settings.hooks_desc=新增 webhooks 將觸發在這個組織下 全部的儲存庫 。 members.membership_visibility=成員可見性: +members.public=可見 +members.public_helper=隱藏 +members.private=隱藏 +members.private_helper=顯示 members.member_role=成員角色: members.owner=管理員 members.member=普通成員 @@ -654,22 +1046,30 @@ members.invite_now=立即邀請 teams.join=加入團隊 teams.leave=離開團隊 teams.read_access=讀取權限 +teams.read_access_helper=成員可以查看和複製團隊儲存庫。 teams.write_access=寫入權限 +teams.write_access_helper=成員可以查看和推送到團隊儲存庫。 +teams.admin_access=管理員權限 teams.no_desc=該團隊暫無描述 teams.settings=團隊設定 teams.members=團隊成員 teams.update_settings=更新團隊設定 +teams.delete_team=刪除團隊 teams.add_team_member=新增團隊成員 +teams.delete_team_title=刪除團隊 teams.delete_team_success=該團隊已被刪除。 teams.repositories=團隊儲存庫 +teams.search_repo_placeholder=搜尋儲存庫... teams.add_team_repository=新增團隊儲存庫 teams.remove_repo=移除儲存庫 teams.add_nonexistent_repo=您嘗試新增到團隊的儲存庫不存在,請先建立儲存庫! [admin] dashboard=控制面版 +users=使用者帳號 organizations=組織管理 repositories=儲存庫管理 +authentication=認證來源 config=應用設定管理 notices=系統提示管理 monitor=應用監控面版 @@ -677,6 +1077,10 @@ first_page=首頁 last_page=末頁 total=總計:%d +dashboard.statistic=摘要 +dashboard.operations=維護操作 +dashboard.system_status=系統狀態 +dashboard.statistic_info=Gitea 資料庫統計:%d 位使用者,%d 個組織,%d 個公鑰,%d 個儲存庫,%d 個儲存庫關注,%d 個讚,%d 次行為,%d 條權限記錄,%d 個問題,%d 次評論,%d 個社交帳號,%d 個用戶關註,%d 個鏡像,%d 個版本發佈,%d 個登錄源,%d 個 Webhook ,%d 個里程碑,%d 個標籤,%d 個 Hook 任務,%d 個團隊,%d 個更新任務,%d 個附件。 dashboard.operation_name=操作名稱 dashboard.operation_switch=開關 dashboard.operation_run=執行 @@ -684,6 +1088,12 @@ dashboard.clean_unbind_oauth=清理未綁定OAuth的連結 dashboard.clean_unbind_oauth_success=所有未綁定 OAuth 的連結已刪除。 dashboard.delete_inactivate_accounts=刪除所有未啟用帳戶 dashboard.delete_inactivate_accounts_success=成功清除所有未啟用帳號! +dashboard.delete_repo_archives=刪除所有儲存庫存檔 +dashboard.delete_repo_archives_success=所有儲存庫存檔已刪除。 +dashboard.delete_missing_repos=刪除所有遺失 Git 檔案的儲存庫記錄 +dashboard.delete_missing_repos_success=所有缺少 Git 檔案的儲存庫記錄均已刪除。 +dashboard.git_gc_repos=對儲存庫進行垃圾回收 +dashboard.git_gc_repos_success=所有儲存庫的垃圾回收已完成執行。 dashboard.reinit_missing_repos=重新初始化所有遺失具已存在記錄的Git 儲存庫 dashboard.reinit_missing_repos_success=所有遺失具已存在記錄的Git 儲存庫已重新初始化。 dashboard.sync_external_users=同步外部使用者資料 @@ -693,6 +1103,8 @@ dashboard.current_memory_usage=當前內存使用量 dashboard.total_memory_allocated=所有被分配的內存 dashboard.memory_obtained=內存佔用量 dashboard.pointer_lookup_times=指針查找次數 +dashboard.memory_allocate_times=記憶體分配次數 +dashboard.memory_free_times=記憶體釋放次數 dashboard.current_heap_usage=當前 Heap 內存使用量 dashboard.heap_memory_obtained=Heap 內存佔用量 dashboard.heap_memory_idle=Heap 內存空閒量 @@ -715,18 +1127,35 @@ dashboard.total_gc_pause=垃圾收集暫停時間總量 dashboard.last_gc_pause=上次垃圾收集暫停時間 dashboard.gc_times=垃圾收集執行次數 +users.user_manage_panel=帳號管理 +users.new_account=建立新帳號 +users.name=使用者名稱 users.activated=已啟用 users.admin=管理員 users.repos=儲存庫數 users.created=建立時間 +users.last_login=上次登入 +users.never_login=從未登入 users.edit=編輯 users.auth_source=認證源 users.local=本地 +users.edit_account=編輯帳號 +users.max_repo_creation=最大儲存庫數量 +users.max_repo_creation_desc=(設定 -1 使用全域預設限制) +users.is_activated=該使用者帳號已被啟用 +users.prohibit_login=停用登入 +users.is_admin=是管理員 +users.allow_import_local=允許匯入本地儲存庫 +users.allow_create_organization=允許建立組織 +users.update_profile=更新帳號 +users.delete_account=刪除帳號 +users.deletion_success=使用者帳號已被刪除。 orgs.org_manage_panel=組織管理 orgs.name=組織名稱 orgs.teams=團隊數 orgs.members=成員數 +orgs.new_orga=新增組織 repos.repo_manage_panel=儲存庫管理 repos.owner=所有者 @@ -734,12 +1163,15 @@ repos.name=儲存庫名稱 repos.private=私有庫 repos.watches=關註數 repos.stars=讚好數 +repos.forks=複製 repos.issues=問題數 repos.size=由小到大 +auths.new=新增認證來源 auths.name=認證名稱 auths.type=認證類型 auths.enabled=已啟用 +auths.syncenabled=啟用使用者同步 auths.updated=最後更新時間 auths.auth_type=認證類型 auths.auth_name=認證名稱 @@ -749,8 +1181,15 @@ auths.host=主機地址 auths.port=主機端口 auths.bind_dn=綁定DN auths.bind_password=綁定密碼 +auths.bind_password_helper=警告:此密碼以明文存儲。 如果可能請使用只讀帳號。 auths.user_base=用戶搜尋基準 auths.user_dn=用戶 DN +auths.attribute_username=使用者名稱屬性 +auths.attribute_username_placeholder=留空將使用「Gitea」作為使用者名稱 +auths.attribute_name=名字屬性 +auths.attribute_surname=姓氏屬性 +auths.attribute_mail=電子郵件屬性 +auths.search_page_size=頁面大小 auths.filter=使用者篩選器 auths.admin_filter=管理者篩選器 auths.ms_ad_sa=MS AD 搜尋屬性 @@ -765,6 +1204,7 @@ auths.oauth2_provider=OAuth2 提供者 auths.oauth2_clientID=用戶端 ID (金鑰) auths.oauth2_clientSecret=用戶端金鑰 auths.openIdConnectAutoDiscoveryURL=OpenID 連接自動探索 URL +auths.oauth2_use_custom_url=使用自定義 URL 而不是預設 URL auths.oauth2_tokenURL=Token URL auths.oauth2_authURL=授權 URL auths.oauth2_profileURL=個人訊息 URL @@ -779,22 +1219,35 @@ auths.tip.facebook=在 https://developers.facebook.com/apps 註冊一個新的 auths.tip.github=在 https://github.com/settings/applications/new 註冊一個新的 OAuth 應用程式 auths.tip.gitlab=在 https://gitlab.com/profile/applications 註冊一個新的應用程式 auths.tip.openid_connect=使用 OpenID 連接探索 URL (/.well-known/openid-configuration) 來指定節點 +auths.edit=修改認證來源 +auths.activated=該授權來源已啟用 auths.new_success=已增加認證'%s'。 +auths.update_success=認證來源已更新。 +auths.update=更新驗證來源 +auths.delete=刪除驗證來源 auths.delete_auth_title=刪除認證來源 config.server_config=伺服器設定 +config.app_name=網站標題 +config.app_ver=Gitea 版本 +config.app_url=Gitea 基本 URL config.custom_conf=設定檔案路徑 +config.domain=SSH 伺服器域名 +config.offline_mode=本地模式 config.disable_router_log=關閉路由日誌 config.run_mode=執行模式 config.git_version=Git 版本 config.repo_root_path=儲存庫目錄 config.lfs_root_path=LFS 根目錄 config.static_file_root_path=靜態檔案目錄 +config.log_file_root_path=日誌路徑 config.script_type=腳本類型 config.reverse_auth_user=反向代理認證 config.ssh_config=SSH 設定 config.ssh_enabled=已啟用 +config.ssh_start_builtin_server=使用內建的伺服器 +config.ssh_domain=伺服器域名 config.ssh_port=連接埠 config.ssh_listen_port=監聽埠 config.ssh_root_path=根路徑 @@ -807,13 +1260,28 @@ config.db_config=資料庫設定 config.db_type=資料庫類型 config.db_host=主機地址 config.db_name=資料庫名稱 +config.db_user=使用者名稱 +config.db_ssl_mode=SSL config.db_path=資料庫路徑 config.service_config=服務設定 +config.register_email_confirm=要求註冊時確認電子郵件 +config.disable_register=關閉註冊功能 +config.allow_only_external_registration=僅允許通過外部服務註冊 +config.enable_openid_signup=啟用 OpenID 註冊 +config.enable_openid_signin=啟用 OpenID 登入 config.show_registration_button=顯示註冊按鈕 +config.require_sign_in_view=啓用登錄瀏覽限制 +config.mail_notify=啟用郵件通知 config.disable_key_size_check=禁用金鑰最小長度檢查 +config.enable_captcha=啟用驗證碼 config.active_code_lives=啟用用戶連結有效期 config.reset_password_code_lives=重設密碼代碼過期時間 +config.default_keep_email_private=預設隱藏電子郵件地址 +config.default_allow_create_organization=預設允許新增組織 +config.enable_timetracking=啟用時間追蹤 +config.default_enable_timetracking=預設啟用時間追蹤 +config.no_reply_address=隱藏電子郵件域名 config.webhook_config=Webhook 設定 config.queue_length=隊列長度 @@ -827,6 +1295,9 @@ config.mailer_host=郵件主機地址 config.mailer_user=發送者帳號 config.mailer_use_sendmail=使用 Sendmail config.mailer_sendmail_path=Sendmail 路徑 +config.send_test_mail=傳送測試郵件 +config.test_mail_failed=傳送測試郵件到 '%s' 時失敗:'%v +config.test_mail_sent=測試郵件已發送到 '%s' config.oauth_config=社交帳號設定 config.oauth_enabled=啟用服務 @@ -846,6 +1317,7 @@ config.session_life_time=Session 生命周期 config.https_only=僅限 HTTPS config.cookie_life_time=Cookie 生命周期 +config.picture_config=圖片和大頭貼設定 config.picture_service=圖片服務 config.disable_gravatar=禁用 Gravatar 頭像 config.enable_federated_avatar=開啟聯合頭像 @@ -870,6 +1342,7 @@ monitor.name=任務名稱 monitor.schedule=任務安排 monitor.next=下次執行時間 monitor.previous=上次執行時間 +monitor.execute_times=執行時間 monitor.process=執行中進程 monitor.desc=進程描述 monitor.start=開始時間 @@ -928,6 +1401,7 @@ raw_seconds=秒 raw_minutes=分鐘 [dropzone] +invalid_input_type=您無法上傳此類型的檔案 file_too_big=檔案大小({{filesize}} MB) 超過了最大允許大小({{maxFilesize}} MB) remove_file=移除文件 @@ -935,6 +1409,8 @@ remove_file=移除文件 notifications=訊息 unread=未讀 read=已讀 +no_unread=沒有未讀通知 +no_read=沒有通知 pin=固定通知 mark_as_read=標記為已讀 mark_as_unread=標記為未讀 From 547f95417d88796c14901f9e7cec6cf4359eff7e Mon Sep 17 00:00:00 2001 From: Alexey Terentyev Date: Sun, 1 Jul 2018 09:02:18 +0300 Subject: [PATCH 043/124] Add myself as a maintainer (#4345) --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index 5deb40961..020a44c51 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -23,3 +23,4 @@ Matti Ranta (@techknowlogick) Michael Lustfield (@MTecknology) Jonas Franz (@JonasFranzDEV) Flynn Lufmons (@flufmonster) +Alexey Terentyev (@axifive) From f4b7b424c146ed1dcdf6ee4fa5c19ad0c1b5ed66 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Sun, 1 Jul 2018 06:03:32 +0000 Subject: [PATCH 044/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_it-IT.ini | 890 ++++++++++++++++++++++++++++++++ 1 file changed, 890 insertions(+) diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini index d3aa6c609..494141667 100644 --- a/options/locale/locale_it-IT.ini +++ b/options/locale/locale_it-IT.ini @@ -1,11 +1,15 @@ +app_desc=Un servizio auto-ospitato per Git pronto all'uso home=Home dashboard=Pannello di controllo explore=Esplora help=Aiuto sign_in=Accedi +sign_in_with=Accedi con sign_out=Esci +sign_up=Registrati link_account=Collega account +link_account_signin_or_signup=Effettua il login con le credenziali esistenti per collegare il tuo account esistente con questo; oppure crea un nuovo account. register=Registrati website=Sito Web version=Versione @@ -13,12 +17,32 @@ page=Pagina template=Template language=Lingua notifications=Notifiche +create_new=Crea… +user_profile_and_more=Profilo ed Impostazioni… signed_in_as=Accesso effettuato come +enable_javascript=Il sito funziona meglio con JavaScript. username=Nome utente +email=Indirizzo Email password=Password +re_type=Reinserisci la password +captcha=CAPTCHA +twofa=Verifica in due passaggi +twofa_scratch=Codice di recupero per la verifica in due passaggi passcode=Codice di sicurezza +u2f_insert_key=Inserisci la chiave di sicurezza +u2f_sign_in=Premi il pulsante sulla tua chiave di sicurezza. Se non riesci a trovare alcun pulsante, reinseriscilo. +u2f_press_button=Si prega di premere il pulsante sulla tua chiave di sicurezza… +u2f_use_twofa=Usa un codice di verifica in due passaggi dal tuo telefono +u2f_error=Non riusciamo a leggere la tua chiave di sicurezza! +u2f_unsupported_browser=Il tuo browser non supporta le chiavi U2F. Si prega di provare un altro browser. +u2f_error_1=Si è verificato un errore sconosciuto. Si prega di riprovare. +u2f_error_2=Si prega di assicurarsi che si sta utilizza una connessione crittografata (https://) e visitando l'URL corretto. +u2f_error_3=Il server non ha potuto eseguire la richiesta. +u2f_error_4=La chiave data non è idonea per questa richiesta. Se stai provando a registrarla, assicurati che la chiave non sia già stata registrata. +u2f_error_5=Timeout raggiunto prima che la tua chiave potesse essere letta. Si prega di ricaricare per riprovare. +u2f_reload=Ricarica repository=Repository organization=Organizzazione @@ -29,8 +53,12 @@ new_mirror=Nuovo Mirror new_fork=Nuovo Fork new_org=Nuova organizzazione manage_org=Gestisci le organizzazioni +admin_panel=Amministrazione Sito account_settings=Impostazioni dell'account settings=Impostazioni +your_profile=Profilo +your_starred=Repository votate +your_settings=Impostazioni all=Tutti sources=Sorgenti @@ -46,34 +74,107 @@ cancel=Annulla [install] install=Installazione +title=Configurazione Iniziale +docker_helper=Se stai usando Gitea con Docker, si prega di leggere la documentazione prima di cambiare qualsiasi impostazione. +requite_db_desc=Gitea necessita di MySQL, PostgreSQL, MSSQL, SQLite3 o TiDB. db_title=Impostazioni Database db_type=Tipo di database host=Host +user=Nome utente password=Password db_name=Nome del database +db_helper=Nota agli utenti MySQL: si prega di utilizza l'engine InnoDB ed il carattere di tipo 'utf8_general_ci'. +ssl_mode=SSL path=Percorso +sqlite_helper=Percorso del file per il SQLite3 o TiDB.
Inserisci un percorso assoluto se stai usando Gitea come un servizio. +err_empty_db_path=Il percorso per il database SQLite3 o TiDB non può essere vuoto. +err_invalid_tidb_name=Il nome del database TiDB non può contenere i caratteri '.' e '-'. +no_admin_and_disable_registration=Non puoi disabilitare l'auto-registrazione degli utenti senza creare un account amministratore. +err_empty_admin_password=La password dell'amministratore non può essere vuota. +general_title=Impostazioni Generali +app_name=Titolo del Sito +app_name_helper=Qui puoi inserire il nome della tua società. repo_path=Percorso Root del Repository +repo_path_helper=Le Remote Git repositories saranno salvate in questa directory. +lfs_path=Percorso radice di Git LFS +lfs_path_helper=I file trovati da Git LFS saranno salvati in questa directory. Lasciare vuoto per disattivare. +run_user=Esegui come Nome utente +run_user_helper=Inserisci il nome utente del sistema operativo su cui Gitea viene eseguito. Nota che l'utente deve avere accesso al percorso radice dei repository. +domain=Dominio Server SSH +domain_helper=Dominio o nome host per SSH clone URLs. +ssh_port=Porta Server SSH +ssh_port_helper=Numero di porta in ascolto sul server SSH. Lasciare vuoto per disattivare. +http_port=Porta in ascolto HTTP Gitea +http_port_helper=Numero della porta sul quale i server web Gitea ascolteranno. +app_url=URL di base di Gitea +app_url_helper=URL di base per gli HTTP(S) clone URLs e notifiche email. log_root_path=Percorso dei log +log_root_path_helper=I file di log saranno scritti in questa directory. optional_title=Impostazioni Facoltative +email_title=Impostazioni Email smtp_host=Host SMTP +smtp_from=Invia Email come +smtp_from_helper=Indirizzo Email che Gitea utilizzerà. Enter a plain email address o usa il formato "Name" . +mailer_user=Nome utente SMTP +mailer_password=Password SMTP +register_confirm=Richiedere la conferma Email per registrarsi +mail_notify=Attila le notifiche Email +server_service_title=Impostazioni Server e Servizi di Terza Parte +offline_mode=Attiva la Modalità in Locale +offline_mode_popup=Disattivila le reti di distribuzione dei contenuti di terze parti and serve all resources locally. +disable_gravatar=Disattiva Gravatar +disable_gravatar_popup=Disattiva Gravatar e le fonti di avatar di terze parti. Verrà usato un avatar predefinito almeno che un utente non carichi un avatar in locale. +federated_avatar_lookup=Attiva i Federated Avatar federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. +disable_registration=Disattiva Self-Registration +disable_registration_popup=Disattiva la user self-registration. Solo gli amministratori saranno in grado di creare account. +allow_only_external_registration_popup=Attiva la registrazione solo tramite servizi esterni. openid_signin=Attiva l'accesso OpenID +openid_signin_popup=Attiva registrazione utente via OpenID. +openid_signup=Attiva OpenID Self-Registration +openid_signup_popup=Attiva OpenID-based user self-registration. +enable_captcha=Attiva CAPTCHA enable_captcha_popup=Richiedi convalida captcha per i nuovi utenti. +require_sign_in_view=Richiedi l'accesso per visualizzare le pagine +require_sign_in_view_popup=Limita l'accesso alle pagine agli utenti che hanno eseguito l'accesso. I visitatori visualizzeranno solamente le pagine di accesso e registrazione. +admin_setting_desc=Creare un account amministratore è opzionale. Il primo utente registrato sarà automaticamente un amministratore. +admin_title=Impostazioni Account Amministratore +admin_name=Nome utente dell'Amministratore admin_password=Password confirm_password=Conferma Password +admin_email=Indirizzo Email install_btn_confirm=Installare Gitea test_git_failed=Fallito il test del comando git: %v +sqlite3_not_available=Questa versione di Gitea non supporta SQLite3. Si prega di scaricare la versione binaria ufficiale da %s (not the 'gobuild' version). +invalid_db_setting=Le impostazioni del database sono invalide: %v +invalid_repo_path=Il percorso radice del Repository è invalido: %v +run_user_not_match=Il nome utente 'esegui come' non è il nome utente attuale: %s -> %s save_config_failed=Salvataggio della configurazione non riuscito: %v +invalid_admin_setting=Le impostazioni dell'account amministratore sono invalide: %v +install_success=Benvenuto! Grazie per aver scelto Gitea. Attenzione e buon divertimento! +invalid_log_root_path=Il percorso del log è invalido: %v +default_keep_email_private=Nascondi Indirizzo Email di Default +default_keep_email_private_popup=Nasconi l'indirizzo email dei nuovi account utente di default. +default_allow_create_organization=Consenti la Creazione di Organizzazioni di Default +default_allow_create_organization_popup=Consenti ai nuovi account utente di creare organizzazioni di default. +default_enable_timetracking=Attiva il cronografo di Default +default_enable_timetracking_popup=Attiva il cronografo per le nuove repositories di default. +no_reply_address=Dominio email nascosto +no_reply_address_helper=Nome dominio per utenti con un indirizzo email nascosto. Ad esempio, il nome utente 'joe' accederà a Git come 'joe@noreply.example.org' se il dominio email nascosto è impostato a 'noreply.example.org'. [home] +uname_holder=Nome utente o Indirizzo Email password_holder=Password switch_dashboard_context=Cambia Dashboard Context +my_repos=Repositories +show_more_repos=Mostra altre repositories… collaborative_repos=Repository Condivisi my_orgs=Le mie Organizzazioni my_mirrors=I miei Mirror view_home=Vedi %s +search_repos=Trova un repository… issues.in_your_repos=Nei tuoi repository @@ -82,30 +183,53 @@ repos=Repository users=Utenti organizations=Organizzazioni search=Cerca +code=Codice +repo_no_results=Nessuna repository corrispondente. +user_no_results=Nessun utente corrispondente. +org_no_results=Nessun'organizzazione corrispondente trovata. +code_no_results=Nessun codice sorgente corrispondente ai termini di ricerca. +code_search_results=Risultati di ricerca per '%s' [auth] +create_new_account=Registra un account register_helper_msg=Hai già un account? Accedi ora! +social_register_helper_msg=Hai già un account? Accedi ora! +disable_register_prompt=La registrazione è disabilitata. Si prega di contattare l'amministratore del sito. +disable_register_mail=Email di conferma per la registrazione disabilitata. remember_me=Ricordami forgot_password_title=Password Dimenticata forgot_password=Password dimenticata? +sign_up_now=Hai bisogno di un account? Registrati adesso. confirmation_mail_sent_prompt=Una nuova email di conferma è stata inviata a %s. Per favore controlla la tua posta in arrivo nelle prossime %s per completare il processo di registrazione. reset_password_mail_sent_prompt=Una email di conferma è stata inviata a %s. Per favore controlla la tua posta in arrivo nelle prossime %s per completare il processo di reset della password. active_your_account=Attiva il tuo Account +prohibit_login=Accesso proibito +prohibit_login_desc=Al tuo account è vietato l'accesso, si prega di contattare l'amministratore del sito. +resent_limit_prompt=Hai già richiesto un'e-mail d'attivazione recentemente. Si prega di attenere 3 minuti e poi riprovare. has_unconfirmed_mail=Ciao %s, hai un indirizzo di posta elettronica non confermato (%s). Se non hai ricevuto una e-mail di conferma o vuoi riceverla nuovamente, fare clic sul pulsante qui sotto. resend_mail=Clicca qui per inviare nuovamente l'e-mail di attivazione email_not_associate=L'indirizzo email non è associato ad alcuna conta. send_reset_mail=Clicca qui per inviare nuovamente la tua email di reimpostazione della password reset_password=Reimposta la tua Password +invalid_code=Il tuo codice di conferma è invalido oppure è scaduto. reset_password_helper=Clicca qui per reimpostare la password +password_too_short=La lunghezza della password non può essere minore di %d caratteri. +non_local_account=Gli utenti non locali non possono cambiare la loro password attraverso l'interfaccia web. verify=Verifica scratch_code=Codice Gratta e Vinci use_scratch_code=Utilizza un codice di zero twofa_scratch_used=Hai usato il tuo codice zero. Sei stato reindirizzato alla pagina di configurazione a due fattori quindi puoi rimuovere la registrazione dal dispositivo o generare un nuovo codice zero. +twofa_passcode_incorrect=Il tuo passcode non è corretto. Se hai smarrito il tuo dispositivo, utilizza il tuo scratch code per accedere. twofa_scratch_token_incorrect=I tuo codice scratch non è corretto. +login_userpass=Accedi login_openid=OpenID openid_connect_submit=Connetti openid_connect_title=Connetti a una conta esistente +openid_connect_desc=L'URI OpenID scelto è sconosciuto. Qui puoi associarlo a un nuovo account. openid_register_title=Crea Nuovo Account +openid_register_desc=L'URI OpenID scelto è sconosciuto. Qui puoi associarlo a un nuovo account. +openid_signin_desc=Inserisci il tuo URI OpenID. Ad esempio: https://anne.me, bob.openid.org.cn o gnusocial.net/carry. +disable_forgot_password_mail=La reimpostazione della password è disabilitata. Si prega di contattare l'amministratore del sito. [mail] activate_account=Per favore attiva il tuo account @@ -117,12 +241,14 @@ register_notify=Benvenuto su Gitea [modal] yes=Sì no=No +modify=Aggiorna [form] UserName=Nome utente RepoName=Nome Repository Email=Indirizzo E-mail Password=Password +Retype=Reinserisci la password SSHTitle=Nome chiave SSH HttpsUrl=URL HTTPS PayloadUrl=URL Payload @@ -138,6 +264,9 @@ TreeName=Percorso del file Content=Contenuto require_error=` non può essere vuoto.` +alpha_dash_error=` può contenere solo caratteri alfanumerici, dash ('-') e underscore ('_').` +alpha_dash_dot_error=` può contenere solo caratteri alfanumerici, dash ('-'), underscore ('_') e dot ('.').` +git_ref_name_error=` deve essere un Git reference name ben formato.` size_error='deve essere %s.' min_size_error=` deve contenere almeno %s caratteri.` max_size_error=` deve contenere massimo %s caratteri.` @@ -145,70 +274,148 @@ email_error=` non è un indirizzo e-mail valido.` url_error=` non è un URL valido.` include_error=` deve contenere la stringa '%s'.` unknown_error=Errore sconosciuto: +captcha_incorrect=Il codice CAPTCHA non è corretto. +password_not_match=Le password non corrispondono. +username_been_taken=Il Nome utente esiste già. +repo_name_been_taken=Il nome del repository esiste già. +org_name_been_taken=Il nome della organizzazione esiste già. +team_name_been_taken=Il nome del team esiste già. +team_no_units_error=Consenti l'accesso ad almeno una sezione del repository. +email_been_used=L'indirizzo email è già in uso. +openid_been_used=L'indirizzo OpenID '%s' è già in uso. +username_password_incorrect=Nome utente o password non corretti. +enterred_invalid_repo_name=Il nome del repository inserito non è corretto. +enterred_invalid_owner_name=Il nuovo nome del proprietario non è valido. +enterred_invalid_password=La password inserita non è corretta. user_not_exist=L'utente non esiste. +last_org_owner=Non è possibile rimuovere l'ultimo utente del team 'proprietari'. Deve esserci almeno un proprietario in qualsiasi team specificato. +cannot_add_org_to_team=Un'organizzazione non può essere aggiunto come membro del team. +invalid_ssh_key=Impossibile verificare la tua chiave SSH: %s +invalid_gpg_key=Impossibile verificare la tua chiave GPG: %s +unable_verify_ssh_key=Impossibile verificare la tua chiave SSH; si prega di ricontrollarla per verificare eventuali errori. auth_failed=Autenticazione non riuscita: %v +still_own_repo=Il tuo account possiede una o più repositories; rimuovile o trasferiscile per proseguire. +still_has_org=Il tuo account è un membro di una o più organizzazioni; abbandonali prima di proseguire. +org_still_own_repo=Questa organizzazione possiede ancora una o più repositories, rimuoverle o trasferirle per continuare. target_branch_not_exist=Il ramo (branch) di destinazione non esiste. [user] +change_avatar=Modifica il tuo avatar… join_on=Si è unito il repositories=Repository activity=Attività pubblica followers=Seguaci +starred=Repositories votate following=Seguiti follow=Segui unfollow=Non seguire più form.name_reserved=L'username '%s' è riservato. +form.name_pattern_not_allowed=Il modello '%s' non è consentito come nome di un utente. [settings] profile=Profilo +account=Account password=Password security=Sicurezza avatar=Avatar ssh_gpg_keys=Chiavi SSH / GPG social=Account Sociali +applications=Applicazioni +orgs=Gestisci le organizzazioni repos=Repository delete=Elimina account twofa=Verifica in due passaggi +account_link=Account collegati +organization=Organizzazioni uid=Uid +u2f=Chiavi di sicurezza public_profile=Profilo pubblico +profile_desc=Il tuo indirizzo email sarà utilizzato per le notifiche e altre operazioni. +password_username_disabled=Gli utenti non locali non hanno il permesso di cambiare il proprio nome utente. per maggiori dettagli si prega di contattare l'amministratore del sito. full_name=Nome Completo website=Sito web location=Posizione update_profile=Aggiorna Profilo update_profile_success=Il tuo profilo è stato aggiornato. +change_username=Il tuo nome utente è stato modificato. +change_username_prompt=Nota: i cambiamenti al nome utente vanno a modificare anche l'URL del tuo account. continue=Continua cancel=Annulla +language=Lingua +lookup_avatar_by_mail=Cerca Avatar per indirizzo Email federated_avatar_lookup=Ricerca per avatar federata enable_custom_avatar=Abilita avatar personalizzato choose_new_avatar=Scegli un nuovo avatar +update_avatar=Aggiorna Avatar delete_current_avatar=Elimina Avatar attuale +uploaded_avatar_not_a_image=Il file caricato non è un'immagine. +update_avatar_success=Il tuo avatar è stato aggiornato. +change_password=Aggiorna Password old_password=Password attuale new_password=Nuova Password +retype_new_password=Digitare nuovamente la nuova Password +password_incorrect=La password attuale non è corretta. +change_password_success=La password è stata aggiornata. Utilizza la nuova password la prossima volta che effettui il login. +password_change_disabled=Gli utenti non locali non possono cambiare la loro password attraverso l'interfaccia web. emails=Indirizzi e-mail +manage_emails=Gestisci indirizzi email +manage_openid=Gestisci gli indirizzi OpenID email_desc=Il tuo indirizzo e-mail primario sarà usato per le notifiche e altre operazioni. primary=Primario +primary_email=Rendi primario +delete_email=Rimuovi +email_deletion=Rimuovi indirizzo Email +email_deletion_desc=L'indirizzo email e le relativa informazioni verranno rimosse dal tuo account. I Git commits di questa email rimarranno invariati. Continuare? +email_deletion_success=L'indirizzo email è stato eliminato. +openid_deletion=Rimuovi Indirizzo OpenID +openid_deletion_desc=La rimozione di questo indirizzo OpenID della tua conta ti impedirà di accedere con esso. Sei sicuro di voler continuare? +openid_deletion_success=L'indirizzo OpenID è stato eliminato. +add_new_email=Aggiungi nuovo indirizzo email +add_new_openid=Aggiungi nuovo URI OpenID +add_email=Aggiungi indirizzo email add_openid=Aggiungere OpenID URI +add_email_confirmation_sent=Una nuova email di conferma è stata inviata a '%s'. Si prega di controllare la tua casella di posta entro il prossimo %s per confermare la tua email. +add_email_success=Il nuovo indirizzo email è stato aggiunto. +add_openid_success=Il nuovo indirizzo OpenID è stato aggiunto. +keep_email_private=Nascondi indirizzo email +keep_email_private_popup=Il tuo indirizzo email sarà nascosto agli altri utenti. +openid_desc=OpenID consente di delegare l'autenticazione ad un provider esterno. manage_ssh_keys=Gestisci chiavi SSH manage_gpg_keys=Gestisci Chiavi GPG add_key=Aggiungi Chiave +ssh_desc=Queste chiavi SSH pubbliche sono associate con il tuo account. Le corrispondenti chiavi private consentono l'accesso completo alle tue repositories. +gpg_desc=Queste chiavi GPG pubbliche sono associate con il tuo account. Proteggi le tue chiavi private perché permettono di verificare i commits. ssh_helper= Hai bisogno di aiuto? Dai un'occhiata alla guida di GitHub percrea le tue chiavi SSH o risolvere problemi comuni che potresti trovare utilizzando SSH. gpg_helper=Hai bisogno di aiuto? Dai un'occhiata alla guida di GitHub riguardo il GPG. add_new_key=Aggiungi Chiave SSH add_new_gpg_key=Aggiungi Chiave GPG +ssh_key_been_used=Questa chiave SSH è stata già aggiunta al tuo account. +ssh_key_name_used=Una chiave SSH con lo stesso nome è stata già aggiunta al tuo account. +gpg_key_id_used=Esiste già una chiave GPG pubblica con lo stesso ID. +gpg_no_key_email_found=Questa chiave GPG non è utilizzabile con nessun indirizzo email associato al tuo account. subkeys=Sottochiavi key_id=ID chiave key_name=Nome della Chiave key_content=Contenuto +add_key_success=La chiave SSH '%s' è stata aggiunta. +add_gpg_key_success=La chiave GPG %s' è stata aggiunta. +delete_key=Rimuovi +ssh_key_deletion=Rimuovi chiave SSH +gpg_key_deletion=Rimuovi chiave GPG +ssh_key_deletion_desc=Rimuovere una chiave SSH ne revoca l'accesso al tuo account. Continuare? +gpg_key_deletion_desc=La rimozione di una chiave GPG invalida i commits firmati da essa. Continuare? +ssh_key_deletion_success=La chiave SSH è stata rimossa. +gpg_key_deletion_success=La chiave GPG è stata rimossa. add_on=Aggiunto il valid_until=Valido fino al valid_forever=Valido per sempre @@ -220,100 +427,219 @@ key_state_desc=Questa chiave è stata utilizzata negli ultimi 7 giorni token_state_desc=Questo token è stato utilizzato negli ultimi 7 giorni show_openid=Mostra nel profilo hide_openid=Nascondi dal profilo +ssh_disabled=SSH disabilitato manage_social=Gestisci gli Account Sociali Associati +social_desc=Questi account sociali sono collegati al tuo account Gitea. Assicurati di riconoscerli tutti in quanto possono essere usati per effettuare il login con il tuo account Gitea. +unbind=Rimuovi il collegamento +unbind_success=L'account sociale è stato scollegato dal tuo account Gitea. +manage_access_token=Gestisci i tokens di accesso generate_new_token=Genera Nuovo Token +tokens_desc=Questi tokens garantiscono l'accesso al tuo account utilizzando l'API di Gitea. +new_token_desc=Le applicazioni che utilizzano un token hanno accesso completo al tuo account. token_name=Nome Token generate_token=Genera Token +generate_token_success=Il nuovo token è stato generato. Copia ora in quanto non verrà mostrato nuovamente. delete_token=Elimina +access_token_deletion=Elimina token di accesso +access_token_deletion_desc=Eliminare un token revocherà l'accesso al tuo account alle applicazioni che lo utilizzano. Continuare? +delete_token_success=Il token è stato eliminato. Le applicazioni che lo utilizzavano non hanno più accesso al tuo account. +twofa_desc=L'autenticazione a due fattori migliora la sicurezza del tuo account. +twofa_is_enrolled=La verifica in due passaggi è attualmente abilitata sul tuo account. +twofa_not_enrolled=La verifica in due passaggi al momento non è abilitata sul tuo account. +twofa_disable=Disattiva la verifica in due passaggi +twofa_scratch_token_regenerate=Rigenera il token di sicurezza +twofa_scratch_token_regenerated=Ora il tuo token di sicurezza è %s. Conservalo in un posto sicuro. +twofa_enroll=Iscriviti alla verifica in due passaggi +twofa_disable_note=Se necessario, è possibile disattivare la verifica in due passaggi. +twofa_disable_desc=Disattivare la verifica in due passaggi renderà il tuo account meno sicuro. Continuare? +regenerate_scratch_token_desc=Se hai smarrito il tuo token di sicurezza o lo hai già utilizzato per effettuare il login è possibile resettarlo qui. twofa_disabled=L'autenticazione a due fattori è stata disattivata. +scan_this_image=Scannerizza questa immagine con l'applicazione di autenticazione: or_enter_secret=O immettere il segreto: %s +then_enter_passcode=E immetti il codice di accesso indicato nell'applicazione: +passcode_invalid=Il codice di accesso non è corretto. Riprova. +twofa_enrolled=Il tuo account è stato registrato alla verifica in due passaggi. Conserva il token di sicurezza (%s) in un luogo sicuro in quanto viene visualizzato sono una volta! +u2f_desc=Le chiavi di sicurezza sono dispositivi hardware contenenti chiavi crittografiche. Potrebbero essere usate per la verifica in due passaggi. +La chiave di sicurezza deve supportare lo standard FIDO U2F. +u2f_require_twofa=La verifica in due passaggi deve essere attiva per poter utilizzare le chiavi di protezione. +u2f_register_key=Aggiungi chiave di sicurezza +u2f_nickname=Nickname +u2f_press_button=Premi il pulsante sulla tua chiave di sicurezza per registrarla. +u2f_delete_key=Rimuovi chiave di sicurezza +u2f_delete_key_desc=Se si rimuove una chiave di sicurezza non sarà più possibile effettuare l'accesso con essa. Sei sicuro? +manage_account_links=Gestisci gli account collegati +manage_account_links_desc=Questi account esterni sono collegati al tuo account Gitea. +account_links_not_available=Attualmente non è collegato alcun account esterno al tuo account Gitea. +remove_account_link=Rimuovi account collegato +remove_account_link_desc=Rimuovere un account collegato ne revoca l'accesso al tuo account Gitea. Continuare? +remove_account_link_success=L'account collegato è stato rimosso. +orgs_none=Non sei membro di alcuna organizzazione. repos_none=Non possiedi alcun repository delete_account=Elimina Account +delete_prompt=Questa operazione eliminerà permanentemente il tuo account utente. NON PUÒ essere annullata. confirm_delete_account=Conferma Eliminazione +delete_account_title=Elimina account utente +delete_account_desc=Sei sicuro di voler rimuovere questo account utente permanentemente? [repo] owner=Proprietario repo_name=Nome Repository +repo_name_helper=Un buon nome per un repository è costituito da parole chiave corte, facili da ricordare e uniche. visibility=Visibilità +visiblity_helper=Rendi il repository privato +visiblity_helper_forced=L'amministratore del sito impone che le nuove repositories siano private. +visiblity_fork_helper=(Questa modifica avrà effetto su tutti i fork) +clone_helper=Hai bisogno di aiuto per la clonazione? Visita Aiuto. fork_repo=Forka Repository fork_from=Forka da +fork_visiblity_helper=La visibilità di un repository forkato non può essere modificata. repo_desc=Descrizione repo_lang=Lingua +repo_gitignore_helper=Seleziona i templates di .gitignore. license=Licenza +license_helper=Seleziona un file di licenza. +readme=LEGGIMI +readme_helper=Seleziona un template per il file LEGGIMI. +auto_init=Inizializza Repository (Aggiungi .gitignore, Licenza e LEGGIMI) create_repo=Crea Repository default_branch=Ramo (Branch) predefinito mirror_prune=Rimuovi +mirror_prune_desc=Rimuovi i riferimenti di puntamento-remoto obsoleti +mirror_interval=Intervallo di aggiornamento dei mirror (le unità di tempo valide sono 'h', 'm', 's') +mirror_interval_invalid=L'intervallo di aggiornamento dei mirror non è valido. +mirror_address=Clona da URL +mirror_address_desc=Includere eventuali credenziali di autorizzazione necessarie nell'URL. +mirror_last_synced=Ultima sincronizzazione watchers=Osservatori stargazers=Fan forks=Fork +pick_reaction=Scegli la tua reazione reactions_more=e %d più form.reach_limit_of_creation=Hai già raggiunto il tuo limite %d repository. +form.name_reserved=Il nome repository '%s' è riservato. +form.name_pattern_not_allowed=Il modello '%s' non è consentito come nome di un repository. +need_auth=Autorizzazione clone migrate_type=Tipo di migrazione migrate_type_helper=Questo repository sarà un mirror migrate_repo=Migra Repository +migrate.clone_address=Migra / Clona da URL +migrate.clone_address_desc=URL HTTP (S) o Git 'clone' di un repository esistente +migrate.clone_local_path=o un percorso del server locale migrate.permission_denied=Non è consentito importare repository locali. +migrate.invalid_local_path=Percorso locale non valido, non esiste o non è una cartella. migrate.failed=Migrazione non riuscita: %v +migrate.lfs_mirror_unsupported=La duplicazione di oggetti LFS non è supportata - usa ' git lfs fetch --all e 'git lfs push --all' invece. mirror_from=mirror da forked_from=forkato da +fork_from_self=Non puoi forkare il tuo stesso repository. copy_link=Copia +copy_link_success=Il link è stato copiato +copy_link_error=Premere ⌘-C o Ctrl-C per copiare copied=OK copiato unwatch=Non seguire più watch=Segui unstar=Togli il voto star=Vota fork=Forka +download_archive=Scarica Repository no_desc=Nessuna descrizione quick_guide=Guida rapida clone_this_repo=Clona questo repository +create_new_repo_command=Creazione di un nuovo repository da riga di comando +push_exist_repo=Push di un repository esistente da riga di comando +bare_message=Questo repository non contiene alcun contenuto. code=Codice +code.desc=Accedi al codice sorgente, file, commits e branches. branch=Ramo (Branch) tree=Albero (Tree) filter_branch_and_tag=Filtra per branch o tag branches=Rami (Branch) tags=Tag issues=Problemi +pulls=Pull Requests labels=Etichette milestones=Traguardi commits=Commit +commit=Commit releases=Rilasci file_raw=Originale file_history=Cronologia file_view_raw=Vedi originale +file_permalink=Permalink +file_too_large=Il file è troppo grande per essere visualizzato. +video_not_supported_in_browser=Il tuo browser non supporta i tag "video" di HTML5. +stored_lfs=Memorizzati con Git LFS +commit_graph=Grafico dei commit +editor.new_file=Nuovo file +editor.upload_file=Carica File +editor.edit_file=Modifica File editor.preview_changes=Anteprima modifiche +editor.cannot_edit_non_text_files=I file binari non possono essere modificati tramite interfaccia web. +editor.edit_this_file=Modifica file +editor.must_be_on_a_branch=È necessario essere in un branch per eseguire o proporre modifiche su questo file. +editor.fork_before_edit=È necessario forkare questo repository per eseguire o proporre modifiche su questo file. +editor.delete_this_file=Elimina file +editor.must_have_write_access=È necessaria l'autorizzazione di scrittura per eseguire o proporre modifiche su questo file. +editor.file_delete_success=Il file '%s' è stato eliminato. +editor.name_your_file=Dai un nome al file… +editor.filename_help=Aggiungi una directory digitando il suo nome nome seguito da il carattere slash ('/'). Rimuovi una directory digitando backspace all'inizio del campo di input. editor.or=o +editor.cancel_lower=Annulla editor.commit_changes=Apporta le modifiche editor.add_tmpl=Aggiungi '%s/' editor.add=Aggiungi '%s' editor.update=Aggiornare '%s' editor.delete=Eliminare '%s' +editor.commit_message_desc=Aggiungi una descrizione estesa facoltativa… editor.commit_directly_to_this_branch=Impegnarsi direttamente con il %s branch. editor.create_new_branch=Creare un nuovo branch per questo commit e inizia una pull request. +editor.new_branch_name_desc=Nome del nuovo branch… editor.cancel=Cancellare +editor.filename_cannot_be_empty=Il nome del file non può essere vuoto. editor.branch_already_exists=Il branch '%s' esiste già in questo repository. +editor.directory_is_a_file=Il nome di directory '%s' è già utilizzato come nome di un file in questo repository. +editor.file_is_a_symlink='%s' è un collegamento simbolico. I collegamenti simbolici non possono essere modificati nell'editor web +editor.filename_is_a_directory=Il nome di file '%s' è già utilizzato come nome di una directory in questo repository. +editor.file_editing_no_longer_exists=Il file in fase di modifica, '%s', non esiste più in questo repository. +editor.file_changed_while_editing=I contenuti di questo file hanno subito dei cambiamento da quando hai iniziato la modifica. Clicca qui per visualizzarli o Committa nuovemente i Cambiamenti per sovrascriverli. +editor.file_already_exists=Un file di nome '%s' esiste già in questo repository. editor.no_changes_to_show=Non ci sono cambiamenti da mostrare. editor.fail_to_update_file=Errore durante l'aggiornamento/ creazione del file '%s' con errore: %v +editor.add_subdir=Aggiungi una directory… editor.unable_to_upload_files=Impossibile caricare i file su '%s' con errore:%v +editor.upload_files_to_dir=Carica file su '%s' +editor.cannot_commit_to_protected_branch=Impossibile eseguire un commit sul branch protetto '%s'. +commits.desc=Sfoglia la cronologia di modifiche del codice rogente. +commits.commits=Commit +commits.search=Ricerca commits… +commits.find=Cerca +commits.search_all=Tutti i branch commits.author=Autore commits.message=Messaggio commits.date=Data commits.older=Più vecchio commits.newer=Più recente +commits.signed_by=Firmato da +commits.gpg_key_id=ID Chiave GPG +ext_issues=Issue esterne +ext_issues.desc=Collegamento al puntatore di una issue esterna. +issues.desc=Organizza le segnalazioni di bug, attività e pietre miliari. issues.new=Nuovo Problema issues.new.labels=Etichette issues.new.no_label=Nessuna etichetta @@ -323,14 +649,39 @@ issues.new.no_milestone=Nessuna milestone issues.new.clear_milestone=Milestone pulita issues.new.open_milestone=Apri Milestone issues.new.closed_milestone=Milestone chiuse +issues.new.assignees=Assegnatari +issues.new.clear_assignees=Cancella assegnatari +issues.new.no_assignees=Nessuno assegnato +issues.no_ref=Nessun Branch/Tag specificato issues.create=Crea Problema issues.new_label=Nuova etichetta +issues.new_label_placeholder=Nome etichetta +issues.new_label_desc_placeholder=Descrizione issues.create_label=Crea Etichetta +issues.label_templates.title=Carica un set predefinito di etichette +issues.label_templates.info=Non esistono etichette. Crea una etichetta con 'Nuova Etichetta' o usa un set predefinito di etichette: +issues.label_templates.helper=Scegli un set di etichette +issues.label_templates.use=Usa Set Etichette +issues.label_templates.fail_to_load_file=Impossibile caricare il file template di etichetta '%s': %v +issues.add_label_at=aggiunta l'etichetta
%s
%s +issues.remove_label_at=rimossa l'etichetta
%s
%s +issues.add_milestone_at=`aggiunta alle pietre miliari %s %s` +issues.change_milestone_at=`pietra miliare modificata da %s a %s %s` +issues.remove_milestone_at=`rimossa dalle pietre miliari %s %s` +issues.deleted_milestone='(rimosso)' +issues.self_assign_at=`%s auto-assegnato` +issues.add_assignee_at=`è stato assegnato da %s %s` +issues.remove_assignee_at=`rimossa la loro assegnazione %s` +issues.change_title_at=' titolo modificato da %s a %s %s ' +issues.delete_branch_at=`branch %s eliminato %s` issues.open_tab=%d Aperti issues.close_tab=%d Chiusi issues.filter_label=Etichetta +issues.filter_label_no_select=Tutte le etichette issues.filter_milestone=Traguardo +issues.filter_milestone_no_select=Tutte le pietre miliari issues.filter_assignee=Assegnatario +issues.filter_assginee_no_select=Tutte le assegnazioni issues.filter_type=Tipo issues.filter_type.all_issues=Tutti i problemi issues.filter_type.assigned_to_you=Assegnati a te @@ -343,6 +694,10 @@ issues.filter_sort.recentupdate=Aggiornati di recente issues.filter_sort.leastupdate=Aggiornati tempo fa issues.filter_sort.mostcomment=I più commentati issues.filter_sort.leastcomment=I meno commentati +issues.filter_sort.moststars=Più favoriti +issues.filter_sort.feweststars=Meno favoriti +issues.filter_sort.mostforks=Maggior numero di fork +issues.filter_sort.fewestforks=Minor numero di fork issues.action_open=Aperto issues.action_close=Chiuso issues.action_label=Etichetta @@ -357,40 +712,108 @@ issues.next=Pagina successiva issues.open_title=Aperto issues.closed_title=Chiuso issues.num_comments=%d commenti +issues.commented_at=`%s ha commentato` +issues.delete_comment_confirm=Sei sicuro/a di voler eliminare questo commento? issues.no_content=Non ci sono ancora contenuti. issues.close_issue=Chiudi +issues.close_comment_issue=Commenta e Chiudi issues.reopen_issue=Riapri +issues.reopen_comment_issue=Commenta e Riapri issues.create_comment=Commento issues.closed_at=`chiuso %[2]s` issues.reopened_at=`riaperto %[2]s` +issues.commit_ref_at=`ha fatto riferimento a questa issue dal commit %[2]s` issues.poster=Autore issues.collaborator=Collaboratori issues.owner=Proprietario +issues.sign_in_require_desc=Effettua l'accesso per partecipare alla conversazione. issues.edit=Modifica issues.cancel=Annulla issues.save=Salva issues.label_title=Nome etichetta +issues.label_description=Descrizione etichetta issues.label_color=Colore etichetta issues.label_count=%d etichette issues.label_open_issues=%d problemi aperti issues.label_edit=Modifica issues.label_delete=Elimina +issues.label_modify=Modifica Etichetta +issues.label_deletion=Elimina Etichetta +issues.label_deletion_desc=Eliminare un'etichetta la rimuove da tutte le issue. Continuare? +issues.label_deletion_success=L'etichetta è stata eliminata. +issues.label.filter_sort.alphabetically=In ordine alfabetico +issues.label.filter_sort.reverse_alphabetically=In ordine alfabetico inverso +issues.label.filter_sort.by_size=Dimensione +issues.label.filter_sort.reverse_by_size=Inverti dimensione issues.num_participants=%d Partecipanti +issues.attachment.open_tab=`Clicca per vedere "%s" in una nuova scheda` +issues.attachment.download=`Clicca qui per scaricare "%s"` +issues.subscribe=Iscriviti +issues.unsubscribe=Annulla iscrizione +issues.tracker=Cronografo +issues.start_tracking_short=Inizio +issues.start_tracking=Avvia cronografo +issues.start_tracking_history='ha iniziato a lavorare %s` +issues.tracking_already_started=`Hai già avviato il cronografo su questa issue!` +issues.stop_tracking=Interrompi +issues.stop_tracking_history=`ha smesso di funzionare %s` +issues.add_time=Aggiungi Tempo manualmente +issues.add_time_short=Aggiungi tempo +issues.add_time_cancel=Annulla +issues.add_time_history=`aggiunto tempo trascorso %s` +issues.add_time_hours=Ore +issues.add_time_minutes=Minuti +issues.add_time_sum_to_small=Non è stato inserito alcun tempo. +issues.cancel_tracking=Annulla +issues.cancel_tracking_history=`ha cancellato il cronografo %s` +issues.time_spent_total=Tempo totale trascorso +issues.time_spent_from_all_authors=`Totale tempo trascorso: %s` +issues.due_date=Data di scadenza +issues.invalid_due_date_format=Il formato della data di scadenza deve essere 'yyyy-mm-dd'. +issues.error_modifying_due_date=Impossibile modificare la data di scadenza. +issues.error_removing_due_date=Impossibile rimuovere la data di scadenza. +issues.due_date_form=yyyy-mm-dd +issues.due_date_form_add=Aggiungi data di scadenza +issues.due_date_form_update=Aggiorna data di scadenza +issues.due_date_form_remove=Rimuovi data di scadenza +issues.due_date_not_writer=E' necessario l'accesso di scrittura del repository per aggiornare la data di una sua issue. +issues.due_date_not_set=Nessuna data di scadenza impostata. +issues.due_date_added=la data di scadenza %s è stata aggiunta %s +issues.due_date_modified=data di scadenza modificata da %s a %s %s +issues.due_date_remove=rimossa la data di scadenza %s %s +issues.due_date_overdue=Scaduto +pulls.desc=Attiva le richieste di merge e le recensioni di codice. pulls.new=Nuova Pull Request +pulls.compare_changes=Nuova Pull Request +pulls.compare_changes_desc=Selezione il branch su cui eseguire il merge e il branch da cui eseguire il pull. +pulls.compare_base=unisci a +pulls.compare_compare=esegui un pull da pulls.filter_branch=Filtra branch pulls.no_results=Nessun risultato trovato. +pulls.nothing_to_compare=Questi rami sono uguali. Non c'è alcuna necessità di creare una pull request. +pulls.has_pull_request=`Una pull request tra questi rami già esiste: %[2]s#%[3]d` pulls.create=Crea Pull Request pulls.title_desc=vorrebbe unire %[1]d commit da %[2]s a %[3]s pulls.merged_title_desc=ha unito %[1]d commit da %[2]s a %[3]s %[4]s pulls.tab_conversation=Conversazione pulls.tab_commits=Commit +pulls.tab_files=File modificati pulls.reopen_to_merge=Riapri questa pull request per effettuare l'unione. pulls.merged=Unito +pulls.has_merged=La pull request è stata unita. +pulls.data_broken=Questa pull request è rovinata a causa di informazioni mancanti del fork. +pulls.is_checking=Verifica dei conflitti di merge in corso. Riprova tra qualche istante. pulls.can_auto_merge_desc=La pull request non può essere mergiata automaticamente. +pulls.cannot_auto_merge_desc=Questa pull request non può essere unita automaticamente a causa di conflitti. +pulls.cannot_auto_merge_helper=Unire manualmente per risolvere i conflitti. +pulls.no_merge_desc=Questa pull request non può essere unita perché tutte le opzioni di merge del repository sono disattivate. +pulls.no_merge_helper=Attiva le opzioni di merge nelle impostazioni del repository o unisci la pull request manualmente. pulls.merge_pull_request=Unisci Pull Request pulls.rebase_merge_pull_request=Fai rebase e unisci pulls.squash_merge_pull_request=Fai squash e unisci +pulls.invalid_merge_option=Non puoi utilizzare questa opzione di merge per questa pull request. +pulls.open_unmerged_pull_exists=`Non è possibile riaprire questa pull request perché ne esiste un'altra (#%d) con proprietà identiche.` milestones.new=Nuova Milestone milestones.open_tab=%d Aperti @@ -399,73 +822,297 @@ milestones.closed=Chiuso %s milestones.no_due_date=Nessuna data di scadenza milestones.open=Apri milestones.close=Chiudi +milestones.new_subheader=Le pietre miliari organizzano le issue e tengono conto del progresso. milestones.create=Crea Milestone milestones.title=Titolo milestones.desc=Descrizione milestones.due_date=Data di scadenza (opzionale) milestones.clear=Pulisci +milestones.invalid_due_date_format=Il formato della data di scadenza deve essere 'yyyy-mm-dd'. +milestones.create_success=La pietra miliare '%s' è stata creata. milestones.edit=Modifica Milestone +milestones.edit_subheader=Le pietre miliari organizzano le issue e tengono conto del progresso. milestones.cancel=Annulla +milestones.modify=Aggiorna pietra miliare +milestones.edit_success=La pietra miliare '%s' è stata aggiornata. +milestones.deletion=Elimina pietra miliare +milestones.deletion_desc=Eliminare una pietra miliare la rimuove da tutte le relative issue. Continuare? +milestones.deletion_success=La pietra miliare è stata eliminata. +milestones.filter_sort.closest_due_date=Data di scadenza più vicina +milestones.filter_sort.furthest_due_date=Data di scadenza più lontana +milestones.filter_sort.least_complete=Meno completato +milestones.filter_sort.most_complete=Più completato +milestones.filter_sort.most_issues=Più problemi +milestones.filter_sort.least_issues=Meno problemi +ext_wiki=Wiki esterna +ext_wiki.desc=Collegamento a una wiki esterna. +wiki=Wiki +wiki.welcome=Benvenuti nella Wiki. +wiki.welcome_desc=La wiki ti permette di scrivere e condividere documentazione con i collaboratori. +wiki.desc=Scrivi e condividi documentazione con i collaboratori. +wiki.create_first_page=Crea la prima pagina wiki.page=Pagina wiki.filter_page=Filtra pagina +wiki.new_page=Pagina +wiki.default_commit_message=Scrivi una nota riguardo l'aggiornamento di questa pagina (opzionale). wiki.save_page=Salva pagina wiki.last_commit_info=%s ha modificato questa pagina %s wiki.edit_page_button=Modifica wiki.new_page_button=Nuova pagina wiki.delete_page_button=Cancella Pagina +wiki.delete_page_notice_1=Eliminare la pagina wiki '%s' è una operazione che non può essere annullata. Continuare? wiki.page_already_exists=Esiste già una pagina Wiki con questo stesso nome. +wiki.reserved_page=Il nome della pagina wiki '%s' è riservato. wiki.pages=Pagine wiki.last_updated=Ultimo aggiornamento: %s +activity=Attività +activity.period.filter_label=Periodo: +activity.period.daily=1 giorno +activity.period.halfweekly=3 giorni +activity.period.weekly=1 settimana +activity.period.monthly=1 mese +activity.overview=Riepilogo +activity.active_prs_count_1=%d Pull Request attiva +activity.active_prs_count_n=%d Pull Request attive activity.merged_prs_count_1=Pull Request Unita activity.merged_prs_count_n=Pull request unite +activity.opened_prs_count_1=Pull Request proposta +activity.opened_prs_count_n=Pull Request proposte +activity.title.user_1=%d utente +activity.title.user_n=%d utenti +activity.title.prs_1=%d Pull request +activity.title.prs_n=%d Pull request activity.title.prs_merged_by=%s unita da %s +activity.title.prs_opened_by=%s proposta da %s activity.merged_prs_label=Unite +activity.opened_prs_label=Proposta +activity.active_issues_count_1=%d Issue attiva +activity.active_issues_count_n=%d Issue attive +activity.closed_issues_count_1=Issue chiusa +activity.closed_issues_count_n=Issue chiuse +activity.title.issues_1=%d Issue +activity.title.issues_n=%d Issue +activity.title.issues_closed_by=%s chiusa da %s +activity.title.issues_created_by=%s creata da %s +activity.closed_issue_label=Chiusa +activity.new_issues_count_1=Nuova issue +activity.new_issues_count_n=Nuove issue +activity.new_issue_label=Aperta +activity.title.unresolved_conv_1=%d Conversazione non risolta +activity.title.unresolved_conv_n=%d Conversazioni non risolte +activity.unresolved_conv_desc=Queste issue e pull request cambiate di recente non sono ancora state risolte. +activity.unresolved_conv_label=Aperta +activity.title.releases_1=%d Release +activity.title.releases_n=%d Release +activity.title.releases_published_by=%s pubblicata da %s +activity.published_release_label=Pubblicata +search=Ricerca +search.search_repo=Ricerca repository +search.results=Risultati della ricerca per "%s" in %s settings=Impostazioni +settings.desc=Impostazioni ti permette di gestire le impostazioni del repository +settings.options=Repository +settings.collaboration=Collaboratori +settings.collaboration.admin=Amministratore +settings.collaboration.write=Scrittura +settings.collaboration.read=Lettura +settings.collaboration.undefined=Non definito +settings.hooks=Webhooks +settings.githooks=Git Hooks settings.basic_settings=Impostazioni di Base +settings.mirror_settings=Impostazioni di mirror +settings.sync_mirror=Sincronizza ora +settings.mirror_sync_in_progress=Sincronizzazione del mirror in corso. Torna tra qualche minuto. +settings.site=Sito web settings.update_settings=Aggiorna Impostazioni settings.advanced_settings=Opzioni avanzate +settings.wiki_desc=Abilita Wiki Repository +settings.use_internal_wiki=Utilizza la wiki incorporata +settings.use_external_wiki=Usa Wiki esterna settings.external_wiki_url=URL Wiki esterno +settings.external_wiki_url_error=L'URL della wiki esterna non è un URL valido. +settings.external_wiki_url_desc=I visitatori verranno reindirizzati all'URL della wiki esterna cliccando sulla scheda di wiki. +settings.issues_desc=Abilità il tracciatore delle issue del repository +settings.use_internal_issue_tracker=Usa il tracciatore di issue incorporato +settings.use_external_issue_tracker=Usa un tracciatore di issue esterno +settings.external_tracker_url=URL del tracciatore di issue esterno +settings.external_tracker_url_error=L'URL del tracciatore di issue esterno non è un URL valido. +settings.external_tracker_url_desc=I visitatori verranno reindirizzati all'URL del tracciatore di issue esterno cliccando sulla scheda delle issue. settings.tracker_url_format=Formato URL Gestore Problemi Esterno +settings.tracker_issue_style=Formato numerico del tracciatore di issue esterno +settings.tracker_issue_style.numeric=Numerico +settings.tracker_issue_style.alphanumeric=Alfanumerico +settings.tracker_url_format_desc=Usa i segnaposto {user}, {repo} e {index} per il nome utente, il nome del repository e l'indice delle issue. +settings.enable_timetracker=Abilita il cronografo +settings.allow_only_contributors_to_track_time=Consenti soltanto ai contributori di utilizzare il cronografo +settings.pulls_desc=Abilita le pull request del repository +settings.pulls.ignore_whitespace=Ignora gli spazi bianchi per evitare conflitti +settings.pulls.allow_merge_commits=Abilita il merging dei commit +settings.pulls.allow_rebase_merge=Abilita l'unione dei commit mediante riassegnazione +settings.pulls.allow_squash_commits=Abilita lo Squashing per unire i commits via merge +settings.admin_settings=Impostazioni amministratore +settings.admin_enable_health_check=Abilita verifica dell'integrità del repository (git fsck) settings.danger_zone=Zona Pericolosa settings.new_owner_has_same_repo=Il nuovo proprietario ha già un repository con lo stesso nome. Per favore scegli un altro nome. +settings.convert=Converti in un repository regolare +settings.convert_desc=È possibile convertire questo mirror in un repository regolare. Questa operazione non può essere annullata. +settings.convert_notices_1=- Questa operazione convertirà questo mirror in una repository regolare e non potrà essere annullata. +settings.convert_confirm=Converti Repository +settings.convert_succeed=Il mirror è stato convertito in un repository regolare. settings.transfer=Trasferisci proprietà +settings.transfer_desc=Trasferisci questo repository a un altro utente o a un'organizzazione nella quale hai diritti d'amministratore. +settings.transfer_notices_1=-Si perderà l'accesso al repository se lo si trasferisce ad un utente singolo. +settings.transfer_notices_2=-Si manterrà l'accesso al repository se si trasferisce in un'organizzazione che possiedi (o condividi con qualcun'altro). +settings.transfer_form_title=Inserisci il nome del repository come conferma: +settings.wiki_delete=Elimina dati Wiki +settings.wiki_delete_desc=L'eliminazione dei dati della wiki del repository è permanente e non può essere annullata. +settings.wiki_delete_notices_1=-Questa operazione eliminerà permanentemente e disabiliterà la wiki repository per %s. +settings.confirm_wiki_delete=Elimina dati Wiki +settings.wiki_deletion_success=I dati della repository wiki sono stati eliminati. settings.delete=Elimina questo repository +settings.delete_desc=L'eliminazione di un repository è un'operazione permanente e non può essere annullata. settings.delete_notices_1=-Questa operazione NON PUÒ essere annullata. +settings.delete_notices_2=-Questa operazione eliminerà definitivamente il repository %s inclusi codice, issue, commenti, dati wiki e impostazioni collaboratore. +settings.delete_notices_fork_1=-I fork di questo repository diventeranno indipendenti dopo la cancellazione. +settings.deletion_success=Il repository è stato eliminato. +settings.update_settings_success=Le impostazioni del repository sono state aggiornate. settings.transfer_owner=Nuovo Proprietario +settings.make_transfer=Esegui trasferimento +settings.transfer_succeed=Il repository è stato trasferito. +settings.confirm_delete=Elimina repository +settings.add_collaborator=Aggiungi collaboratore +settings.add_collaborator_success=Il collaboratore è stato aggiunto. +settings.delete_collaborator=Rimuovi +settings.collaborator_deletion=Rimuovi collaboratore +settings.collaborator_deletion_desc=Rimuovere un collaboratore revocherà l'accesso a questo repository. Continuare? +settings.remove_collaborator_success=Il collaboratore è stato rimosso. +settings.search_user_placeholder=Ricerca utente… +settings.org_not_allowed_to_be_collaborator=Le organizzazioni non possono essere aggiunte come un collaboratore. +settings.user_is_org_member=L'utente è un membro di organizzazione che non può essere aggiunto come un collaboratore. settings.add_webhook=Aggiungi Webhook +settings.hooks_desc=I Webhook effettuano automaticamente richieste HTTP POST ad un server quando si verificano determinati eventi Gitea. Per saperne di più leggi la guida ai webhooks. +settings.webhook_deletion=Rimuovi Webhook +settings.webhook_deletion_desc=Rimuovere un webhook rimuove le sue impostazioni e la sua cronologia di consegna. Continuare? +settings.webhook_deletion_success=Il webhook è stato rimosso. settings.webhook.test_delivery=Test di consegna +settings.webhook.test_delivery_desc=Prova questo webhook con un evento falso. +settings.webhook.test_delivery_success=Un evento falso è stato aggiunto alla coda di consegna. Potrebbe richiedere qualche secondo prima che appaia nella cronologia di consegna. settings.webhook.request=Richiesta settings.webhook.response=Risposta +settings.webhook.headers=Intestazioni +settings.webhook.payload=Contenuto +settings.webhook.body=Corpo +settings.githooks_desc=Gli Hooks di Git sono una funzionalità di Git stesso. Puoi modificare i file degli hooks supportati nell'elenco qui sotto per compiere azioni personalizzate. settings.githook_edit_desc=Se l'hook è inattivo, sarà presentato un contenuto esempio. Lasciando il contenuto vuoto disattiverai questo hook. settings.githook_name=Nome hook settings.githook_content=Contenuto hook settings.update_githook=Aggiorna Hook +settings.add_webhook_desc=Gitea enverra des requêtes POST avec un type de contenu donné à l'URL cible. Apprenez-en plus dans le guide webhooks. +settings.payload_url=URL di destinazione +settings.content_type=Tipo di contenuto POST +settings.secret=Segreto settings.slack_username=Nome utente settings.slack_icon_url=URL icona +settings.discord_username=Nome utente +settings.discord_icon_url=URL icona settings.slack_color=Colore +settings.event_desc=Attivato su: +settings.event_push_only=Pusha eventi +settings.event_send_everything=Tutti gli eventi +settings.event_choose=Eventi personalizzati… settings.event_create=Crea +settings.event_create_desc=Branch o tag creato. +settings.event_delete=Elimina +settings.event_delete_desc=Branch o tag eliminato +settings.event_fork=Fork +settings.event_fork_desc=Repository forkato +settings.event_issues=Issues +settings.event_issues_desc=Issue aperta, chiusa, riaperta, modificata, assegnata, non assegnata, etichetta aggiornata, etichetta cancellata, con pietra miliare o senza pietra miliare. +settings.event_issue_comment=Commento Issue +settings.event_issue_comment_desc=Commento issue creato, modificato o rimosso. +settings.event_release=Release +settings.event_release_desc=Release pubblicata, aggiornata o rimossa in una repository. +settings.event_pull_request=Pull Request +settings.event_pull_request_desc=Pull request aperta, chiusa, riaperta, modificata, assegnata, non assegnata, etichetta aggiornata, etichetta cancellata o sincronizzata. +settings.event_push=Push +settings.event_push_desc=Git push in un repository. +settings.event_repository=Repository +settings.event_repository_desc=Repository creato o eliminato. +settings.active=Includi dettagli evento +settings.active_helper=Aggiunge alle richieste informazioni riguardo la causa. +settings.add_hook_success=Il webhook è stato aggiunto. settings.update_webhook=Aggiorna Webhook +settings.update_hook_success=Il webhook è stato aggiornato. +settings.delete_webhook=Rimuovi Webhook settings.recent_deliveries=Recenti Deliveries settings.hook_type=Tipo di Hook +settings.add_slack_hook_desc=Integra Slack nel tuo repository. +settings.slack_token=Gettone settings.slack_domain=Dominio settings.slack_channel=Canale +settings.add_discord_hook_desc=Integra Discord nel tuo repository. +settings.add_dingtalk_hook_desc=Integra Dingtalk nel tuo repository. settings.deploy_keys=Dispiega Chiavi settings.add_deploy_key=Aggiungi Deploy Key +settings.deploy_key_desc=Le deploy key possiedono l'accesso solamente alla lettura di un repository. +settings.is_writable=Abilita accesso scrittura +settings.is_writable_info=Permetti a questa deploy key di pushare nella repository. +settings.no_deploy_keys=Non sono ancora presenti deploy key. settings.title=Titolo settings.deploy_key_content=Contenuto +settings.key_been_used=Una deploy key con contenuto identico è già in uso. +settings.key_name_used=Esiste già una deploy key con questo nome. +settings.add_key_success=La deploy key '%s' è stata aggiunta. +settings.deploy_key_deletion=Rimuovi deploy key +settings.deploy_key_deletion_desc=Rimuovere una chiave di distribuzione ne revocherà l'accesso a questo repository. Continuare? +settings.deploy_key_deletion_success=La chiave di distribuzione è stata rimossa. +settings.branches=Branches +settings.protected_branch=Protezione branch +settings.protected_branch_can_push=Consentire push? +settings.protected_branch_can_push_yes=Puoi pushare +settings.protected_branch_can_push_no=Non puoi pushare +settings.branch_protection=Protezione branch per il branch '%s' +settings.protect_this_branch=Attiva protezione branch +settings.protect_this_branch_desc=Impedisci l'eliminazione e disabilita i push forzati di Git nel branch. +settings.protect_whitelist_committers=Attiva la whitelist per i push +settings.protect_whitelist_committers_desc=Consenti agli utenti o ai team nella whitelist di ignorare le restrizioni di push. +settings.protect_whitelist_users=Utenti nella whitelist per pushare: +settings.protect_whitelist_search_users=Cerca utenti… +settings.protect_whitelist_teams=Team nella whitelist per pushare: +settings.protect_whitelist_search_teams=Ricerca team… +settings.protect_merge_whitelist_committers=Attiva la whitelist per i merge +settings.protect_merge_whitelist_committers_desc=Consentire soltanto agli utenti o ai team in whitelist il permesso di unire le pull request di questo branch. +settings.protect_merge_whitelist_users=Utenti nella whitelist per il merging: +settings.protect_merge_whitelist_teams=Team nella whitelist per il merging: +settings.add_protected_branch=Attiva protezione +settings.delete_protected_branch=Disattiva protezione +settings.update_protect_branch_success=La protezione branch per il branch '%s' è stata aggiornata. +settings.remove_protected_branch_success=La protezione branch per il branch '%s' è stata disattivata. +settings.protected_branch_deletion=Disattiva protezione branch +settings.protected_branch_deletion_desc=Disattivare la protezione branch permette agli utenti con permesso di scrittura di pushare sul branch. Continuare? +settings.default_branch_desc=Seleziona un branch del repository predefinito per le pull request ed i commit di codice: +settings.choose_branch=Scegli un branch… +settings.no_protected_branch=Non ci sono branch protetti. diff.browse_source=Sfoglia il codice sorgente +diff.parent=parent +diff.commit=commit +diff.data_not_available=Dati Diff non disponibili diff.show_diff_stats=Mostra Diff Stats diff.show_split_view=Visualizzazione separata diff.show_unified_view=Visualizzazione unificata diff.stats_desc=%d ha cambiato i file con %d aggiunte e %d eliminazioni +diff.bin=BIN diff.view_file=Vedi File +diff.file_suppressed=File diff soppresso perché troppo grande +diff.too_many_files=Dato che sono stati cambiati molti file in questo diff, alcuni di essi non verranno mostrati +releases.desc=Tenere traccia di versioni e download del progetto. release.releases=Rilasci release.new_release=Nuovo Rilascio release.draft=Bozza @@ -474,42 +1121,102 @@ release.stable=Stabile release.edit=modifica release.ahead=%d commits da %s da questo rilascio release.source_code=Codice Sorgente +release.new_subheader=Le release organizzano le versioni del progetto. +release.edit_subheader=Le release organizzano le versioni del progetto. release.tag_name=Nome tag release.target=Obbiettivo +release.tag_helper=Scegli un tag esistente o crea un nuovo tag. release.title=Titolo release.content=Contenuto release.write=Scrivi release.preview=Anteprima +release.loading=Caricamento… +release.prerelease_desc=Contrassegna come pre-release +release.prerelease_helper=Contrassegna questa release come inadatta per l'uso di produzione. release.cancel=Annulla release.publish=Pubblica Rilascio release.save_draft=Salva Bozza +release.edit_release=Aggiorna release +release.delete_release=Elimina release +release.deletion=Elimina release +release.deletion_desc=Eliminare una release rimuove il suo tag Git dal repository. Il contenuto e la cronologia del repository rimarranno invariati. Continuare? +release.deletion_success=La release è stata eliminata. +release.tag_name_already_exist=Una release con questo nome tag esiste già. +release.tag_name_invalid=Il nome tag non è valido. release.downloads=Download +branch.name=Nome branch +branch.search=Cerca branch +branch.already_exists=Un branch di nome '%s' esiste già. +branch.delete_head=Elimina +branch.delete=Elimina branch '%s' +branch.delete_html=Elimina branch +branch.delete_desc=L'eliminazione di un branch è definitiva. E' un'operazione che NON PUÒ essere annullata. Continuare? +branch.deletion_success=Il branch '%s' è stato eliminato. +branch.deletion_failed=Impossibile eliminare il branch '%s'. +branch.delete_branch_has_new_commits=Il branch '%s' non può essere eliminato perché sono stati aggiunti nuovi commit dopo il merging. +branch.create_branch=Crea branch %s +branch.create_from=da '%s' +branch.create_success=Il branch '%s' è stato creato. +branch.branch_already_exists=Il branch '%s' esiste già in questo repository. +branch.branch_name_conflict=Il nome del branch '%s' è in conflitto con il branch già esistente '%s'. +branch.tag_collision=Il branch '%s' non può essere creato in quanto esiste già un tag con lo stesso nome in questo repository. +branch.deleted_by=Eliminato da %s +branch.restore_success=Il branch '%s' è stato ripristinato. +branch.restore_failed=Impossibile ripristinare il branch '%s '. +branch.protected_deletion_failed=Il branch '%s' è protetto. Non può essere eliminato. +topic.manage_topics=Gestisci argomenti +topic.done=Fatto +topic.count_prompt=Non puoi selezione più di 25 argomenti +topic.format_prompt=Gli argomenti devono iniziare con una lettera o un numero, possono includere il carattere hiphens(-) e non possono essere più lunghi di 35 caratteri [org] org_name_holder=Nome dell'Organizzazione org_full_name_holder=Nome completo dell'organizzazione +org_name_helper=I nomi delle organizzazioni devono essere brevi e semplici da ricordare. create_org=Crea Organizzazione repo_updated=Aggiornato people=Utenti teams=Team lower_members=membri lower_repositories=repository +create_new_team=Nuovo Team +create_team=Crea Team org_desc=Descrizione team_name=Nome Team team_desc=Descrizione +team_name_helper=I nomi dei team devono essere brevi e semplici da ricordare. +team_desc_helper=Descrivi lo scopo o il ruolo del team. +team_permission_desc=Autorizzazione +team_unit_desc=Consentire l'accesso a sezioni di Repository +form.name_reserved=Il nome dell'organizzazione '%s' è riservato. +form.name_pattern_not_allowed=Il modello '%s' non è consentito come nome di una organizzazione. +form.create_org_not_allowed=Non disponi dell'autorizzazione per creare un organizzazione. settings=Impostazioni +settings.options=Organizzazione settings.full_name=Nome Completo settings.website=Sito Web settings.location=Residenza settings.update_settings=Aggiorna Impostazioni +settings.update_setting_success=Le impostazioni dell'organizzazione sono state aggiornate. +settings.change_orgname_prompt=Nota: cambiare il nome dell'organizzazione cambia anche il relativo URL. +settings.update_avatar_success=L'avatar dell'organizzazione è stato aggiornato. settings.delete=Elimina organizzazione settings.delete_account=Elimina questa organizzazione +settings.delete_prompt=L'organizzazione verrà rimossa definitivamente. Questa operazione NON PUÒ essere annullata! settings.confirm_delete_account=Conferma Eliminazione +settings.delete_org_title=Elimina organizzazione +settings.delete_org_desc=Questa organizzazione verrà eliminata definitivamente. Continuare? +settings.hooks_desc=Aggiungi i webhooks che verranno attivati per tutti i repository sotto questa organizzazione. +members.membership_visibility=Visibilità appartenenza: +members.public=Visibile +members.public_helper=nascondi +members.private=Nascosto +members.private_helper=rendi visibile members.member_role=Ruolo del membro: members.owner=Proprietario members.member=Membro @@ -521,21 +1228,36 @@ members.invite_now=Invita ora teams.join=Iscriviti teams.leave=Abbandona teams.read_access=Accesso di Lettura +teams.read_access_helper=I membri possono visualizzare e clonare i repository del team. teams.write_access=Accesso di Scrittura +teams.write_access_helper=I membri possono leggere e pushare sui repository del team. +teams.admin_access=Accesso amministratore +teams.admin_access_helper=I membri possono pullare e pushare sulle repository del team e anche aggiungere collaboratori. teams.no_desc=Questo team non ha alcuna descrizione teams.settings=Impostazioni +teams.owners_permission_desc=I proprietari hanno pieno accesso a tutti i repository e hanno diritti di amministratore nell'organizzazione. teams.members=Membri del Team teams.update_settings=Aggiorna Impostazioni +teams.delete_team=Elimina team teams.add_team_member=Aggiungi un Membro al Team +teams.delete_team_title=Elimina team +teams.delete_team_desc=Eliminare un team revocherà l'accesso al repository da parte dei suoi membri. Continuare? +teams.delete_team_success=Il team è stato eliminato. +teams.read_permission_desc=Questo team concede l'accesso di lettura: i membri possono visualizzare e clonare i repository del team. +teams.write_permission_desc=Questo team concede l'accesso di Scrittura: i membri possono leggere da e pushare sui repository del team. +teams.admin_permission_desc=Questo team concede l'accesso di Amministratore: i membri possono leggere da, pushare su e aggiungere collaboratori ai repository del team. teams.repositories=Repository di Squadra +teams.search_repo_placeholder=Ricerca repository… teams.add_team_repository=Aggiungere Repository di Squadra teams.remove_repo=Rimuovi teams.add_nonexistent_repo=Il repository che stai tentando di aggiungere non esiste, crealo prima. [admin] dashboard=Pannello di Controllo +users=Account utenti organizations=Organizzazioni repositories=Repository +authentication=Fonti di autenticazione config=Configurazione notices=Avvisi di sistema monitor=Monitoraggio @@ -543,16 +1265,41 @@ first_page=Prima last_page=Ultima total=Totale: %d +dashboard.statistic=Riepilogo +dashboard.operations=Operazioni di manutenzione +dashboard.system_status=Stato del sistema +dashboard.statistic_info=Il database di Gitea contiene %d utenti, %d organizzazioni, %d chiavi pubbliche, %d repository, %d visualizzazioni, %d voti, %d azioni, %d accessi, %d issue, %d commenti, %d account social, %d follow, %d mirror, %d release, %d fonti di autenticazione, %d webhook, %d pietre miliari, %d etichette, %d richieste di hook, %d team, %d richieste di aggiornamento, %d allegati. dashboard.operation_name=Nome Operazione dashboard.operation_switch=Cambia dashboard.operation_run=Esegui +dashboard.clean_unbind_oauth=Elimina connessione OAuth slegate +dashboard.clean_unbind_oauth_success=Tutte le connessione OAuth slegate sono state eliminate. dashboard.delete_inactivate_accounts=Elimina tutti gli account inattivi +dashboard.delete_inactivate_accounts_success=Tutti gli account inattivi sono stati eliminati. +dashboard.delete_repo_archives=Elimina tutti gli archivi dei repository +dashboard.delete_repo_archives_success=Tutti gli archivi del repository sono stati eliminati. +dashboard.delete_missing_repos=Elimina tutti i repository mancanti dei loro file Git +dashboard.delete_missing_repos_success=Tutti i repository ai quali mancavano i file Git sono stati eliminati. +dashboard.git_gc_repos=Esegui la garbage collection su tutti i repository +dashboard.git_gc_repos_success=Tutti i repository hanno terminato l'operazione di garbage collection. +dashboard.resync_all_sshkeys=Aggiorna il file '.ssh/authorized_keys' con le chiavi SSH di Gitea. (Non è necessario per il server SSH incorporato) +dashboard.resync_all_sshkeys_success=Le chiavi SSH pubbliche controllate da Gitea sono state aggiornate. +dashboard.resync_all_hooks=Sincronizza nuovamente gli hook di pre-ricezione, di aggiornamento e di post-ricezione di tutti i repository. +dashboard.resync_all_hooks_success=Tutti gli hook di pre-ricezione, di aggiornamento e di post-ricezione sono stati sincronizzati. +dashboard.reinit_missing_repos=Reinizializza tutti i repository Git mancanti per i quali esistono cambiamenti registrati esistenti +dashboard.reinit_missing_repos_success=Tutti i repository Git mancanti per i quali esistono cambiamenti registrati esistenti sono stati reinizializzati. +dashboard.sync_external_users=Sincronizza dati utente esterno +dashboard.sync_external_users_started=La sincronizzazione dei dati utente esterno è iniziata. +dashboard.git_fsck=Esegui controlli di integrità su tutti i repository +dashboard.git_fsck_started=La verifica di integrità dei repository è iniziata. dashboard.server_uptime=Tempo in Attività del Server dashboard.current_goroutine=Goroutine Correnti dashboard.current_memory_usage=Utilizzo di Memoria Corrente dashboard.total_memory_allocated=Memoria Allocata Totale dashboard.memory_obtained=Memoria Ottenuta dashboard.pointer_lookup_times=Ricerche del Puntatore +dashboard.memory_allocate_times=Allocazioni di memoria +dashboard.memory_free_times=Rilasci di memoria dashboard.current_heap_usage=Utilizzo Heap Corrente dashboard.heap_memory_obtained=Memoria Heap Ottenuta dashboard.heap_memory_idle=Memoria Heap Inattiva @@ -575,57 +1322,148 @@ dashboard.total_gc_pause=Pausa Totale della GC dashboard.last_gc_pause=Ultima pausa della GC dashboard.gc_times=Esecuzioni GC +users.user_manage_panel=Gestione account utente +users.new_account=Crea account utente +users.name=Nome utente users.activated=Attivato users.admin=Amministratore users.repos=Repo users.created=Creato +users.last_login=Ultimo accesso +users.never_login=Mai effettuato l'accesso +users.send_register_notify=Invia notifica di registrazione utente +users.new_success=L'account utente '%s' è stato creato. users.edit=Modifica +users.auth_source=Fonte di autenticazione users.local=Locale +users.auth_login_name=Nome utente per l'autenticazione +users.password_helper=Lascia la password vuota per non modificarla. +users.update_profile_success=L'account utente è stato aggiornato. +users.edit_account=Modifica account utente +users.max_repo_creation=Numero massimo di repository +users.max_repo_creation_desc=(Inserire -1 per utilizzare il limite predefinito globale.) +users.is_activated=Account utente attivato +users.prohibit_login=Disattiva login +users.is_admin=È amministratore +users.allow_git_hook=Può creare Git Hook +users.allow_import_local=Può importare repository locali +users.allow_create_organization=Può creare organizzazioni +users.update_profile=Aggiorna account utente +users.delete_account=Elimina account utente +users.still_own_repo=Questo utente possiede ancora una o più repository. Eliminare o trasferire questi repository prima di continuare. +users.still_has_org=Questo utente è membro di un'organizzazione. Rimuovi l'utente da tutte le organizzazioni prima di proseguire. +users.deletion_success=L'account utente è stato eliminato. +orgs.org_manage_panel=Gestione Organizzazione orgs.name=Nome orgs.teams=Team orgs.members=Membri +orgs.new_orga=Nuova Organizzazione +repos.repo_manage_panel=Gestione Repository repos.owner=Proprietario repos.name=Nome repos.private=Privati repos.watches=Segue repos.stars=Voti +repos.forks=Fork repos.issues=Problemi +repos.size=Dimensione +auths.auth_manage_panel=Gestione fonti di autenticazione +auths.new=Aggiungi fonte di autenticazione auths.name=Nome auths.type=Tipo auths.enabled=Attivo +auths.syncenabled=Abilita sincronizzazione utenti auths.updated=Aggiornato auths.auth_type=Tipo di autenticazione auths.auth_name=Nome di autenticazione +auths.security_protocol=Protocollo di sicurezza auths.domain=Dominio +auths.host=Host auths.port=Porta auths.bind_dn=Binda DN auths.bind_password=Binda Password +auths.bind_password_helper=Attenzione: La password è memorizzata in testo normale. Se possibile, utilizzare un account di sola lettura. +auths.user_base=Base ricerca utente auths.user_dn=DN dell'utente +auths.attribute_username=Attributo nome utente +auths.attribute_username_placeholder=Lasciare vuoto per utilizzare il nome utente inserito in Gitea. +auths.attribute_name=Attributo nome +auths.attribute_surname=Attributo cognome +auths.attribute_mail=Attributo email +auths.attribute_ssh_public_key=Attributo chiave SSH pubblica +auths.attributes_in_bind=Estrai Attributi dal Contesto Bind DN +auths.use_paged_search=Utilizza ricerca per pagina +auths.search_page_size=Dimensioni pagina auths.filter=Fitro utente auths.admin_filter=Filtro Amministratore +auths.ms_ad_sa=Attributi di ricerca AD MS auths.smtp_auth=Tipo di autenticazione SMTP auths.smtphost=Host SMTP auths.smtpport=Porta SMTP auths.allowed_domains=Domini consentiti +auths.allowed_domains_helper=Lasciare vuoto per ammettere tutti i domini. Separare più domini con una virgola (','). auths.enable_tls=Abilitare Crittografia TLS auths.skip_tls_verify=Salta verifica TLS auths.pam_service_name=Nome del Servizio PAM +auths.oauth2_provider=OAuth2 Provider +auths.oauth2_clientID=ID Client (Chiave) +auths.oauth2_clientSecret=Segreto del client +auths.openIdConnectAutoDiscoveryURL=OpenID Connect Auto Discovery URL +auths.oauth2_use_custom_url=Utilizzare URL personalizzati anziché URL predefiniti +auths.oauth2_tokenURL=URL token +auths.oauth2_authURL=Autorizza URL +auths.oauth2_profileURL=URL profilo +auths.oauth2_emailURL=URL email auths.enable_auto_register=Abilitare Registrazione Automatica auths.tips=Consigli +auths.tips.oauth2.general=Autenticazione OAuth2 +auths.tips.oauth2.general.tip=Quando si registra una nuova autenticazione OAuth2, l'URL di callback/reindirizzamento deve essere:/user/oauth2//callback +auths.tip.oauth2_provider=OAuth2 Provider +auths.tip.bitbucket=Registra un nuovo cliente OAuth su https://bitbucket.org/account/user//oauth-consumers/new e aggiungi il permesso 'Account' - 'Read' +auths.tip.dropbox=Crea una nuova applicazione su https://www.dropbox.com/developers/apps +auths.tip.facebook=Registra una nuova applicazione su https://developers.facebook.com/apps e aggiungi il prodotto "Facebook Login +auths.tip.github=Registra una nuova applicazione OAuth su https://github.com/settings/applications/new +auths.tip.gitlab=Registra una nuova applicazione su https://gitlab.com/profile/applications +auths.tip.google_plus=Ottieni le credenziali del client OAuth2 dalla console API di Google su https://console.developers.google.com/ +auths.tip.openid_connect=Utilizza l'OpenID Connect Discovery URL (/.well-known/openid-configuration) per specificare gli endpoint +auths.tip.twitter=Vai su https://dev.twitter.com/apps, crea una applicazione e assicurati che l'opzione "Allow this application to be used to Sign In with Twitter" sia abilitata +auths.edit=Modifica fonte di autenticazione +auths.activated=Questa fonte di autenticazione è attiva +auths.new_success=L'autenticazione '%s' è stata aggiunta. +auths.update_success=La fonte d'autenticazione è stata aggiornata. +auths.update=Aggiorna fonte di autenticazione +auths.delete=Elimina fonte di autenticazione +auths.delete_auth_title=Elimina fonte di autenticazione +auths.delete_auth_desc=L'eliminazione di una fonte di autenticazione impedisce agli utenti di utilizzarla per accedere. Continuare? +auths.still_in_used=La fonte di autenticazione è ancora in uso. Convertire o eliminare gli utenti che utilizzano questa fonte di autenticazione prima di continuare. +auths.deletion_success=La fonte d'autenticazione è stata eliminata. +auths.login_source_exist=La fonte di autenticazione '%s' esiste già. config.server_config=Configurazione Server +config.app_name=Titolo del Sito +config.app_ver=Versione Gitea +config.app_url=URL di base di Gitea +config.custom_conf=Percorso file di configurazione +config.domain=Dominio Server SSH +config.offline_mode=Modalità locale config.disable_router_log=Disattivare Log del Router +config.run_user=Esegui come Nome utente config.run_mode=Modalità Esecuzione +config.git_version=Versione Git config.repo_root_path=Percorso radice del Repository +config.lfs_root_path=Percorso file LFS config.static_file_root_path=Percorso Root del File Statico +config.log_file_root_path=Percorso dei log config.script_type=Tipo di Script config.reverse_auth_user=Autenticazione Utente Inversa config.ssh_config=Configurazione SSH config.ssh_enabled=Attivo +config.ssh_start_builtin_server=Usa il server integrato +config.ssh_domain=Dominio Server config.ssh_port=Porta config.ssh_listen_port=Porta in ascolto config.ssh_root_path=Percorso Root @@ -636,23 +1474,49 @@ config.ssh_minimum_key_sizes=Dimensioni minime della chiave config.db_config=Configurazione Database config.db_type=Tipo +config.db_host=Host config.db_name=Nome +config.db_user=Nome utente +config.db_ssl_mode=SSL config.db_path=Percorso config.service_config=Configurazione Servizio +config.register_email_confirm=Richiedere la conferma Email per registrarsi +config.disable_register=Disattiva Self-Registration +config.allow_only_external_registration=Attiva la registrazione solo tramite servizi esterni +config.enable_openid_signup=Attiva OpenID Self-Registration +config.enable_openid_signin=Attiva l'accesso tramite OpenID config.show_registration_button=Mostra Pulsane Registrazione +config.require_sign_in_view=Richiedi l'accesso per visualizzare le pagine +config.mail_notify=Attila le notifiche Email config.disable_key_size_check=Disabilita controllo sulle dimensioni minime della chiave +config.enable_captcha=Attiva CAPTCHA config.active_code_lives=Attiva Vita del Codice +config.reset_password_code_lives=Resetta il tempo di scadenza del codice password +config.default_keep_email_private=Nascondi Indirizzo Email di Default +config.default_allow_create_organization=Consenti la Creazione di Organizzazioni di Default +config.enable_timetracking=Abilita il cronografo +config.default_enable_timetracking=Attiva il cronografo di Default +config.default_allow_only_contributors_to_track_time=Consenti soltanto ai contributori di utilizzare il cronografo +config.no_reply_address=Dominio email nascosto config.webhook_config=Configurazione Webhook config.queue_length=Lunghezza della coda config.deliver_timeout=Tempo Limite di Consegna +config.skip_tls_verify=Salta autenticazione TLS +config.mailer_config=Configurazione Mailer SMTP config.mailer_enabled=Attivo config.mailer_disable_helo=Disattiva HELO config.mailer_name=Nome config.mailer_host=Host config.mailer_user=Utente +config.mailer_use_sendmail=Utilizza Sendmail +config.mailer_sendmail_path=Percorso Sendmail +config.mailer_sendmail_args=Argomenti aggiuntivi per Sendmail +config.send_test_mail=Invia email di prova +config.test_mail_failed=Impossibile inviare mail di prova a '%s': %v +config.test_mail_sent=Una mail di prova è stata inviata a '%s'. config.oauth_config=Configurazione OAuth config.oauth_enabled=Attivo @@ -672,15 +1536,22 @@ config.session_life_time=Durata Sessione config.https_only=Solo HTTPS config.cookie_life_time=Durata Cookie +config.picture_config=Configurazione Immagine profilo e Avatar config.picture_service=Servizio foto config.disable_gravatar=Disabilita Gravatar +config.enable_federated_avatar=Attiva i Federated Avatar +config.git_config=Configurazione Git +config.git_disable_diff_highlight=Disattiva evidenziatore Diff Syntax config.git_max_diff_lines=Numero massimo di righe di diff (per singolo file) config.git_max_diff_line_characters=Numero massimo di caratteri di diff (per singola riga) config.git_max_diff_files=Numero massimo di file diff mostrati config.git_gc_args=Parametri GC config.git_migrate_timeout=Timeout per la migrazione config.git_mirror_timeout=Timeout per l'aggiornamento del mirror +config.git_clone_timeout=Tempo limite operazione di clone +config.git_pull_timeout=Tempo limite operazione di pull +config.git_gc_timeout=Timeout operazione GC config.log_config=Configurazione Log config.log_mode=Modalità Log @@ -690,12 +1561,14 @@ monitor.name=Nome monitor.schedule=Agenda monitor.next=La Prossima Volta monitor.previous=La Scorsa Volta +monitor.execute_times=Esecuzioni monitor.process=Processi in Esecuzione monitor.desc=Descrizione monitor.start=Orario Avvio monitor.execute_time=Tempo di Esecuzione notices.system_notice_list=Avvisi di Sistema +notices.view_detail_header=Visualizza dettagli dell'avviso notices.actions=Azioni notices.select_all=Seleziona tutto notices.deselect_all=Deseleziona tutto @@ -703,7 +1576,10 @@ notices.inverse_selection=Inverti selezione notices.delete_selected=Elimina selezionati notices.delete_all=Elimina tutti gli avvisi notices.type=Tipo +notices.type_1=Repository notices.desc=Descrizione +notices.op=Op. +notices.delete_success=Gli avvisi di sistema sono stati eliminati. [action] create_repo=ha creato il repository %s @@ -746,17 +1622,31 @@ raw_seconds=secondi raw_minutes=minuti [dropzone] +default_message=Trascina i file o clicca qui per caricare. +invalid_input_type=Non è possibile caricare file di questo tipo. file_too_big=La dimensione del file ({{filesize}} MB) supera la dimensione massima ({{maxFilesize}} MB). remove_file=Rimuovi file [notification] notifications=Notifiche +unread=Non lette +read=Lette +no_unread=Nessuna notifica da leggere. +no_read=Nessuna notifica letta. +pin=Appunta notifica mark_as_read=Segna come letto mark_as_unread=Segna come non letto mark_all_as_read=Segna tutti come letti [gpg] +error.extract_sign=Impossibile ricavare la firma +error.generate_hash=Impossibile generare hash del commit +error.no_committer_account=Nessun account collegato all'indirizzo email del committer error.no_gpg_keys_found=Non sono state trovate chiavi note per questa firma nel database +error.not_signed_commit=Commit non firmato +error.failed_retrieval_gpg_keys=Impossibile recuperare le chiavi associate all'account del committer [units] +error.no_unit_allowed_repo=Non possiedi il permesso di accedere ad alcuna sezione di questo repository. +error.unit_not_allowed=Non possiedi il permesso di accedere a questa sezione di repository. From 3089833167f172da574e3b2fada1fd4244ded704 Mon Sep 17 00:00:00 2001 From: Guilhem Marion Date: Mon, 2 Jul 2018 14:42:28 +0200 Subject: [PATCH 045/124] Update TRANSLATORS (#4349) --- options/locale/TRANSLATORS | 1 + 1 file changed, 1 insertion(+) diff --git a/options/locale/TRANSLATORS b/options/locale/TRANSLATORS index ed04c22d1..02b9858ad 100644 --- a/options/locale/TRANSLATORS +++ b/options/locale/TRANSLATORS @@ -27,6 +27,7 @@ Enrico Testori hypertesto AT gmail DOT com Ezequiel Gonzalez Rial Gabriel Dugny Gregor Santner +Guilhem Marion Halil Kaya Hamid Feizabadi Hilton Wichwski Silva From 69796ddd64b89de066952ea19b6332f51bbf3f81 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Mon, 2 Jul 2018 12:43:33 +0000 Subject: [PATCH 046/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_sv-SE.ini | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index ca3d703f1..435321648 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -347,6 +347,8 @@ issues.create_label=Skapa Etikett issues.label_templates.title=Ladda en fördefinierad uppsättning etiketter issues.label_templates.helper=Markera en uppsättning etiketter issues.label_templates.fail_to_load_file=Laddning av etikettmallen '%s' misslyckades: %v +issues.add_label_at=lade till etiketten
%s
%s +issues.remove_label_at=tog bort etiketten
%s
%s issues.add_milestone_at=`lade till denna till milstolpe %s %s` issues.change_milestone_at='modifierade milstolpen från %s till %s %s' issues.remove_milestone_at='tog bort denna från milstolpen %s %s' @@ -420,8 +422,15 @@ issues.subscribe=Prenumerera issues.unsubscribe=Avsluta prenumerationen issues.start_tracking_short=Starta issues.start_tracking_history=`började arbeta %s` +issues.tracking_already_started=`Du har redan påbörjat tidredovisning på detta ärende!` +issues.stop_tracking=Stoppa +issues.stop_tracking_history=`slutade arbeta %s` +issues.add_time_cancel=Avbryt +issues.add_time_history=`la till tillbringad tid %s` issues.add_time_hours=Timmar issues.add_time_minutes=Minuter +issues.cancel_tracking=Avfärda +issues.cancel_tracking_history=”avbröt tidredovisning %s' pulls.new=Ny Pull-Förfrågan pulls.filter_branch=Filtrera gren @@ -431,9 +440,12 @@ pulls.title_desc=vill sammanfoga %[1]d incheckningar från s[2]s in pulls.merged_title_desc=sammanfogade %[1]d incheckningar från %[2]s in i %[3]s %[4]s pulls.tab_conversation=Konversation pulls.tab_commits=Incheckningar +pulls.reopen_to_merge=Vänligen återöppna denna Pull-förfrågan igen för att utföra sammanfogningen. pulls.merged=Sammanfogat pulls.can_auto_merge_desc=Denna pull-förfrågan kan sammanfogas automatiskt. pulls.merge_pull_request=Sammanfoga Pull-förfrågan +pulls.rebase_merge_pull_request=Rebase och sammanfogning +pulls.squash_merge_pull_request=Squasha och sammanfogning milestones.new=Ny milstolpe milestones.open_tab=%d Öppna @@ -470,14 +482,27 @@ wiki.page_already_exists=Wiki-sida med samma namn finns redan. wiki.pages=Sidor wiki.last_updated=Senast uppdaterad %s +activity=Aktiviteter activity.period.filter_label=Period: activity.period.daily=1 dag activity.period.halfweekly=3 dagar activity.period.weekly=1 vecka activity.period.monthly=1 månad activity.overview=Översikt +activity.active_prs_count_1=%d Aktiv Pull begäran +activity.active_prs_count_n=%d Aktiva Pull begärelser +activity.merged_prs_count_1=Sammanfogad Pull-förfrågan +activity.merged_prs_count_n=Sammanfogade Pull-förfrågningar +activity.opened_prs_count_1=Föreslagen Pull begäran +activity.opened_prs_count_n=Föreslagna Pull-begärelser activity.title.user_1=%d användare activity.title.user_n=%d användare +activity.title.prs_1=%d Pull-begäran +activity.title.prs_n=%d Pull begärelser +activity.title.prs_merged_by=%s sammanfogad av %s +activity.title.prs_opened_by=%s föreslås av %s +activity.merged_prs_label=Sammanfogad +activity.opened_prs_label=Föreslagen activity.active_issues_count_1=%d Aktivt ärende activity.active_issues_count_n=%d Aktiva ärenden activity.closed_issues_count_1=Stängt ärende @@ -488,9 +513,20 @@ activity.title.issues_closed_by=%s stängd av %s activity.title.issues_created_by=%s skapad av %s activity.closed_issue_label=Stängd activity.new_issues_count_1=Nytt ärende +activity.new_issues_count_n=Nya ärenden +activity.new_issue_label=Öppnad +activity.unresolved_conv_label=Öppna +activity.title.releases_1=%d release +activity.title.releases_n=%d releaser +activity.title.releases_published_by=%s publicerad av %s +activity.published_release_label=Publicerad +search=Sök +search.search_repo=Sök utvecklingskatalog +search.results=Sökresultat för ”%s” i %s settings=Inställningar +settings.desc=Inställningarna är där du kan hantera inställningar för utvecklingskatalogen settings.collaboration.write=Skriva settings.collaboration.read=Läsa settings.collaboration.undefined=Odefinierad @@ -541,10 +577,18 @@ settings.deploy_keys=Driftsättningsnycklar settings.add_deploy_key=Lägg till driftsättningsnyckel settings.title=Titel settings.deploy_key_content=Innehåll +settings.branches=Brancher +settings.protected_branch=Branchskydd +settings.protected_branch_can_push=Tillåt push? +settings.protected_branch_can_push_yes=Du kan pusha +settings.protected_branch_can_push_no=Du kan inte pusha +settings.add_protected_branch=Aktivera skydd +settings.delete_protected_branch=Inaktivera skydd diff.browse_source=Bläddra i källkod diff.parent=förälder diff.commit=incheckning +diff.data_not_available=Diff Content ej tillgänglig diff.show_diff_stats=Visa Diff Statistik diff.show_split_view=Delad Vy diff.show_unified_view=Unifierad Vy @@ -571,8 +615,16 @@ release.preview=Förhandsgranska release.cancel=Avbryt release.publish=Publicera Släpp release.save_draft=Spara Utkast +release.deletion_success=Releasen har blivit raderad. release.downloads=Nedladdningar +branch.search=Sök brancher +branch.delete_head=Radera +branch.delete_html=Radera branch +branch.create_branch=Skapa branchen %s +branch.create_from=från '%s' +branch.branch_already_exists=Branch '%s' existerar redan i denna utvecklingskatalog. +branch.deleted_by=Raderad av %s [org] @@ -598,6 +650,7 @@ settings.update_setting_success=Organisationsinställningarna har uppdaterats. settings.delete=Tag bort organisation settings.delete_account=Tag bort denna organisation settings.confirm_delete_account=Bekräfta borttagning +settings.hooks_desc=Lägg till webbhook som triggas för alla utvecklingskataloger under denna organisationen. members.membership_visibility=Synlighet för medlemskap: members.member_role=Medlemsroll: @@ -617,6 +670,7 @@ teams.settings=Inställningar teams.members=Teammedlemmar teams.update_settings=Uppdatera inställningar teams.add_team_member=Lägg till teammedlem +teams.delete_team_success=Teamet har blivit borttaget. teams.repositories=Teamförråd teams.add_team_repository=Lägg till teamförråd teams.remove_repo=Ta bort @@ -636,7 +690,13 @@ total=Totalt: %d dashboard.operation_name=Operationsnamn dashboard.operation_switch=Byt till dashboard.operation_run=Kör +dashboard.clean_unbind_oauth=Rena obundna OAuth anslutningar +dashboard.clean_unbind_oauth_success=Alla obundna OAuth anslutningar har raderats. dashboard.delete_inactivate_accounts=Ta bort alla inaktiva konton +dashboard.delete_inactivate_accounts_success=Alla inaktiva konton har tagits bort. +dashboard.reinit_missing_repos=Återinitialisera alla saknade utvecklingskataloger som vi känner till +dashboard.reinit_missing_repos_success=Alla utvecklingskataloger som det saknades filer från har blivit återinitaliserade. +dashboard.sync_external_users=Synkronisera extern användardata dashboard.server_uptime=Serverns upptid dashboard.current_goroutine=Aktuella Goroutiner dashboard.current_memory_usage=Nuvarande Minnesanvändning @@ -655,6 +715,7 @@ dashboard.mspan_structures_usage=MSpan strukturanvändning dashboard.mspan_structures_obtained=MSpan strukturer som erhållits dashboard.mcache_structures_usage=MCache strukturanvändning dashboard.mcache_structures_obtained=MCache-strukturer som erhållits +dashboard.profiling_bucket_hash_table_obtained=Profilering av Bucket Hash Table erhållen dashboard.gc_metadata_obtained=Metainformation om Skräpsamlaren Ihopsamlad dashboard.other_system_allocation_obtained=Övriga Systemallokeringar dashboard.next_gc_recycle=Nästa Skräpsamlarrunda @@ -677,6 +738,7 @@ orgs.name=Namn orgs.teams=Team orgs.members=Medlemmar +repos.repo_manage_panel=Utvecklingskatalogshantering repos.owner=Ägare repos.name=Namn repos.private=Privat @@ -694,11 +756,14 @@ auths.auth_name=Autentiseringsnamn auths.security_protocol=Säkerhetsprotokoll auths.domain=Domän auths.host=Värd +auths.port=Port +auths.bind_dn=Bind DN auths.bind_password=Bind Lösenord auths.user_base=Användarsökbas auths.user_dn=Användarnas DN auths.filter=Användarfilter auths.admin_filter=Administratörsfilter +auths.ms_ad_sa=MS AD sökattribut auths.smtp_auth=SMTP Autentiseringstyp auths.smtphost=SMTP-server auths.smtpport=SMTP-port @@ -706,26 +771,41 @@ auths.allowed_domains=Tillåtna Domäner auths.enable_tls=Aktivera TLS-kryptering auths.skip_tls_verify=Skippa verifikation av TLS auths.pam_service_name=PAM Tjänstnamn +auths.oauth2_provider=OAuth2 leverantör +auths.oauth2_clientID=Klient ID (Nyckel) +auths.oauth2_clientSecret=Klienthemlighet +auths.openIdConnectAutoDiscoveryURL=OpenID Connect Auto Discovery länk +auths.oauth2_tokenURL=Tokenlänk +auths.oauth2_authURL=Auktoriseringslänk auths.oauth2_profileURL=Profil-URL auths.oauth2_emailURL=E-post URL auths.enable_auto_register=Aktivera Automatisk Registrering +auths.tips=Tips +auths.tips.oauth2.general=OAuth2 Autensiering +auths.tips.oauth2.general.tip=När man registrerar en ny OAuth2-autentisering, så skall callback/redirect-länken vara: /user/oauth2//callback +auths.tip.oauth2_provider=OAuth2 leverantör auths.tip.dropbox=Skapa en ny applikation på https://www.dropbox.com/developers/apps auths.tip.facebook=Registrera en ny appliaktion på https://developers.facebook.com/apps och lägg till produkten ”Facebook-inloggning” auths.tip.github=Registrera en ny OAuth applikation på https://github.com/settings/applications/new auths.tip.gitlab=Registrera en ny applikation på https://gitlab.com/profile/applications +auths.tip.openid_connect=Använd OpenID Connect Discovery länken (/.well-known/openid-configuration) för att ange slutpunkterna auths.new_success=Autentisering '%s' har lagts till. +auths.delete_auth_title=Tag bort denna autentisering config.server_config=Server-konfiguration config.custom_conf=Konfigurationsfil config.disable_router_log=Avaktivera Router Loggning config.run_mode=Exekveringsläge +config.git_version=Git version config.repo_root_path=Rotsökväg för utvecklingskatalog config.lfs_root_path=LFS Rotsökväg config.static_file_root_path=Rotsökväg för Statiska Filer config.script_type=Script-typ +config.reverse_auth_user=Motsatt autentiserings användare config.ssh_config=SSH-konfiguration config.ssh_enabled=Aktiverad +config.ssh_port=Port config.ssh_listen_port=Lyssningsport config.ssh_root_path=Rotsökväg config.ssh_key_test_path=Testsökväg för nyckel @@ -743,16 +823,20 @@ config.service_config=Tjänstkonfiguration config.show_registration_button=Visa registreringsknapp config.disable_key_size_check=Avaktivera kontroll av minsta tillåtna nyckelstorlek config.active_code_lives=Aktivera livstid för koder +config.reset_password_code_lives=Återställ giltighetstid för passerkod config.webhook_config=Webbkrokskonfiguration config.queue_length=Kölängd config.deliver_timeout=Tidsfrist för leverans +config.skip_tls_verify=Skippa TLS verifiering config.mailer_enabled=Aktiverad config.mailer_disable_helo=Avaktivera HELO config.mailer_name=Namn config.mailer_host=Server config.mailer_user=Användare +config.mailer_use_sendmail=Använd Sendmail +config.mailer_sendmail_path=Sendmail sökväg config.oauth_config=OAuth-konfiguration config.oauth_enabled=Aktiverad @@ -777,6 +861,7 @@ config.disable_gravatar=Inaktivera Gravatar config.enable_federated_avatar=Aktivera Förenad Uppslaging av Profilbilder config.git_config=Git-konfiguration +config.git_disable_diff_highlight=Inaktivera Diff Syntax Highlight config.git_max_diff_lines=Max Diff-rader (per fil) config.git_max_diff_line_characters=Max Diff-tecken (per rad) config.git_max_diff_files=Max Diff-filer (att visa) @@ -811,6 +896,8 @@ notices.delete_all=Ta Bort Alla Notiser notices.type=Typ notices.type_1=Utvecklingskatalog notices.desc=Beskrivning +notices.op=Op. +notices.delete_success=Systemnotifikationer har blivit raderade. [action] create_repo=skapade utvecklingskatalog %s @@ -826,11 +913,15 @@ comment_issue=`kommenterade på ärende %s#%[2]s` merge_pull_request=`sammanslog pull-request %s#%[2]s` transfer_repo=överförde utvecklingskalatogen %s till %s push_tag=laddade upp taggen %[2]s till %[3]s +delete_tag=tog bort taggen %[2]s från %[3]s +delete_branch=tog bort branchen %[2]s from %[3]s +compare_commits=Jämför %d commits [tool] ago=%s sedan from_now=%s från och med nu now=nu +future=framtiden 1s=1 sekund 1m=1 minut 1h=1 timme @@ -849,17 +940,23 @@ raw_seconds=sekunder raw_minutes=minuter [dropzone] +file_too_big=Filstorleken ({{filesize}} MB) överskrider maxstorleken ({{maxFilesize}} MB). remove_file=Ta bort fil [notification] notifications=Notiser unread=Olästa read=Lästa +pin=Pinna notifiering mark_as_read=Markera som läst mark_as_unread=Markera som oläst +mark_all_as_read=Markera alla som lästa [gpg] error.extract_sign=Det gick inte att extrahera signatur +error.generate_hash=Misslyckades att generera hashsumma av commiten +error.no_gpg_keys_found=Ingen känd nyckel hittad för denna signaturen i databasen +error.not_signed_commit=Inte en signerad commit [units] From cbee921c28b9299a0f4ee751f8fd55a430b571f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= Date: Tue, 3 Jul 2018 05:56:32 +0200 Subject: [PATCH 047/124] Limit uploaded avatar image-size to 4096x3072 by default (#4353) --- custom/conf/app.ini.sample | 4 ++++ models/user.go | 11 +++++++++++ modules/setting/setting.go | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index f823f68e4..774a1df59 100644 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -402,6 +402,10 @@ SESSION_LIFE_TIME = 86400 [picture] AVATAR_UPLOAD_PATH = data/avatars +; Max Width and Height of uploaded avatars. This is to limit the amount of RAM +; used when resizing the image. +AVATAR_MAX_WIDTH = 4096 +AVATAR_MAX_HEIGHT = 3072 ; Chinese users can choose "duoshuo" ; or a custom avatar source, like: http://cn.gravatar.com/avatar/ GRAVATAR_SOURCE = gravatar diff --git a/models/user.go b/models/user.go index 653e99426..5ac865879 100644 --- a/models/user.go +++ b/models/user.go @@ -433,6 +433,17 @@ func (u *User) IsPasswordSet() bool { // UploadAvatar saves custom avatar for user. // FIXME: split uploads to different subdirs in case we have massive users. func (u *User) UploadAvatar(data []byte) error { + imgCfg, _, err := image.DecodeConfig(bytes.NewReader(data)) + if err != nil { + return fmt.Errorf("DecodeConfig: %v", err) + } + if imgCfg.Width > setting.AvatarMaxWidth { + return fmt.Errorf("Image width is to large: %d > %d", imgCfg.Width, setting.AvatarMaxWidth) + } + if imgCfg.Height > setting.AvatarMaxHeight { + return fmt.Errorf("Image height is to large: %d > %d", imgCfg.Height, setting.AvatarMaxHeight) + } + img, _, err := image.Decode(bytes.NewReader(data)) if err != nil { return fmt.Errorf("Decode: %v", err) diff --git a/modules/setting/setting.go b/modules/setting/setting.go index cf9f59853..a5f4457f3 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -341,6 +341,8 @@ var ( // Picture settings AvatarUploadPath string + AvatarMaxWidth int + AvatarMaxHeight int GravatarSource string GravatarSourceURL *url.URL DisableGravatar bool @@ -1024,6 +1026,8 @@ func NewContext() { if !filepath.IsAbs(AvatarUploadPath) { AvatarUploadPath = path.Join(AppWorkPath, AvatarUploadPath) } + AvatarMaxWidth = sec.Key("AVATAR_MAX_WIDTH").MustInt(4096) + AvatarMaxHeight = sec.Key("AVATAR_MAX_HEIGHT").MustInt(3072) switch source := sec.Key("GRAVATAR_SOURCE").MustString("gravatar"); source { case "duoshuo": GravatarSource = "http://gravatar.duoshuo.com/avatar/" From bbf9abde4937285c77154129ae9934b22b4ea7a6 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 3 Jul 2018 03:57:42 +0000 Subject: [PATCH 048/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_uk-UA.ini | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index dae81d2cc..7db2d2481 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -524,7 +524,7 @@ reactions_more=додати %d більше form.reach_limit_of_creation=Ви досягли максимальної кількості %d створених репозиторіїв. form.name_reserved=Назву репозиторію '%s' зарезервовано. -form.name_pattern_not_allowed=Шаблон '%s' не дозволено в назві сховища. +form.name_pattern_not_allowed=Шаблон '%s' не дозволено в назві репозиторія. need_auth=Клонувати з авторизацією migrate_type=Тип міграції @@ -812,7 +812,7 @@ pulls.merge_pull_request=Об'єднати запит на злиття pulls.rebase_merge_pull_request=Зробити Rebase і злити pulls.squash_merge_pull_request=Об'єднати (Squash) і злити pulls.invalid_merge_option=Цей параметр злиття не можна використовувати для цього Pull Request'а. -pulls.open_unmerged_pull_exists=`Ви не можете знову відкрити, оскільки вже існує запит на злиття (%d) з того ж сховища з тією ж інформацією про злиття і в очікуванні.` +pulls.open_unmerged_pull_exists=`Ви не можете знову відкрити, оскільки вже існує запит на злиття (%d) з того ж репозиторія з тією ж інформацією про злиття і в очікуванні.` milestones.new=Новий етап milestones.open_tab=%d відкрито @@ -914,7 +914,7 @@ search.search_repo=Пошук репозиторію search.results=Результати пошуку для "%s" в %s settings=Налаштування -settings.desc=У налаштуваннях ви можете змінювати різні параметри цього сховища +settings.desc=У налаштуваннях ви можете змінювати різні параметри цього репозиторія settings.options=Репозиторій settings.collaboration=Співавтори settings.collaboration.admin=Адміністратор @@ -965,7 +965,7 @@ settings.convert_confirm=Перетворити репозиторій settings.convert_succeed=Репозиторій успішно перетворений в звичайний. settings.transfer=Передати новому власнику settings.transfer_desc=Передати репозиторій користувачеві або організації, де ви маєте права адміністратора. -settings.transfer_notices_1=- Ви втратите доступ до сховища, якщо ви переведете його окремому користувачеві. +settings.transfer_notices_1=- Ви втратите доступ до репозиторія, якщо ви переведете його окремому користувачеві. settings.transfer_notices_2=- Ви збережете доступ, якщо новим власником стане організація, власником якої ви є. settings.transfer_form_title=Введіть ім'я репозиторія як підтвердження: settings.wiki_delete=Видалити вікі-дані @@ -992,7 +992,7 @@ settings.collaborator_deletion_desc=Цей користувач більше н settings.remove_collaborator_success=Співавтор видалений. settings.search_user_placeholder=Пошук користувача… settings.org_not_allowed_to_be_collaborator=Організації не можуть бути додані як співавтори. -settings.user_is_org_member=Користувач є членом організації, члени якої не можуть бути додані в якості співавтора. +settings.user_is_org_member=Користувач є учасником організації, учасники якої не можуть бути додані в якості співавтора. settings.add_webhook=Додати веб-хук settings.hooks_desc=Webhooks автоматично робить HTTP POST-запити на сервер, коли відбуваються певні події Gitea. Дізнайтеся більше в керівництві веб-вузла . settings.webhook_deletion=Видалити веб-хук @@ -1035,7 +1035,7 @@ settings.event_issues_desc=Проблему відкрито, закрито, п settings.event_issue_comment=Коментар проблеми settings.event_issue_comment_desc=Коментар проблеми створено, видалено чи відредаговано. settings.event_release=Реліз -settings.event_release_desc=Випуск опубліковано, оновлено чи видалено в сховища. +settings.event_release_desc=Реліз опублікований, оновлений або видалений з репозиторія. settings.event_pull_request=Запити до злиття settings.event_pull_request_desc=Запит до злиття відкрито, закрито, перевідкрито, змінено, призначено, знято, мітку оновлено, мітку прибрано або синхронізовано. settings.event_push=Push @@ -1068,7 +1068,7 @@ settings.key_been_used=Вміст ключа розгортання вже ви settings.key_name_used=Ключ розгортання з таким заголовком вже існує. settings.add_key_success=Новий ключ розгортання '%s' успішно доданий. settings.deploy_key_deletion=Видалити ключ для розгортування -settings.deploy_key_deletion_desc=Видалення ключа розгортки унеможливить доступ до сховища з його допомогою. Ви впевнені? +settings.deploy_key_deletion_desc=Видалення ключа розгортки унеможливить доступ до репозиторія з його допомогою. Ви впевнені? settings.deploy_key_deletion_success=Ключі розгортання було видалено. settings.branches=Гілки settings.protected_branch=Захист гілки @@ -1082,19 +1082,19 @@ settings.protect_whitelist_committers=Білий список тих, хто м settings.protect_whitelist_committers_desc=Додати користувачів або команди в білий список гілки. На них не будуть поширюватися звичайні обмеження на push. settings.protect_whitelist_users=Користувачі, які можуть робити push в цю гілку: settings.protect_whitelist_search_users=Пошук користувачів… -settings.protect_whitelist_teams=Команди, члени яких можуть робити push в цю гілку: +settings.protect_whitelist_teams=Команди, учасники яких можуть робити push в цю гілку: settings.protect_whitelist_search_teams=Пошук команд… settings.protect_merge_whitelist_committers=Обмежити право на прийняття Pull Request'ів в цю гілку списком -settings.protect_merge_whitelist_committers_desc=Ви можете додавати користувачів або цілі команди в 'білий' список цієї гілки. Тільки присутні в списку зможуть приймати Pull Request'и. В іншому випадку будь-хто з правами запису до головного сховища буде володіти такою можливістю. +settings.protect_merge_whitelist_committers_desc=Ви можете додавати користувачів або цілі команди в 'білий' список цієї гілки. Тільки присутні в списку зможуть приймати запити на злиття. В іншому випадку будь-хто з правами запису до головного репозиторію буде володіти такою можливістю. settings.protect_merge_whitelist_users=Користувачі з правом на прийняття Pull Request'ів в цю гілку: -settings.protect_merge_whitelist_teams=Команди, члени яких мають право на прийняття Pull Request'ів в цю гілку: +settings.protect_merge_whitelist_teams=Команди, яким дозволено злиття: settings.add_protected_branch=Увімкнути захист settings.delete_protected_branch=Вимкнути захист settings.update_protect_branch_success=Налаштування захисту гілки '%s' були успішно змінені. settings.remove_protected_branch_success=Захист гілки '%s' був успішно відключений. settings.protected_branch_deletion=Відключити захист гілки settings.protected_branch_deletion_desc=Будь-який користувач з дозволами на запис зможе виконувати push в цю гілку. Ви впевнені? -settings.default_branch_desc=Головна гілка є 'базовою' для вашого сховища, на яку за замовчуванням спрямовані всі Pull Request'и і яка є обличчям вашого сховища. Перше, що побачить відвідувач - це вміст головною гілки. Виберіть її з уже існуючих: +settings.default_branch_desc=Головна гілка є 'базовою' для вашого репозиторія, на яку за замовчуванням спрямовані всі запити на злиття і яка є обличчям вашого репозиторія. Перше, що побачить відвідувач - це зміст головної гілки. Виберіть її з уже існуючих: settings.choose_branch=Оберіть гілку… settings.no_protected_branch=Немає захищених гілок. @@ -1138,7 +1138,7 @@ release.save_draft=Зберегти чернетку release.edit_release=Оновити реліз release.delete_release=Видалити реліз release.deletion=Видалити реліз -release.deletion_desc=Видалення релізу видаляє Git-тег зі сховищ. Вміст сховища і історія залишаться незмінними. Продовжити? +release.deletion_desc=Видалення релізу видаляє Git-тег з репозиторіїв. Зміст репозиторія і історія залишаться незмінними. Продовжити? release.deletion_success=Реліз, було видалено. release.tag_name_already_exist=Реліз з цим ім'ям мітки вже існує. release.tag_name_invalid=Неприпустиме ім'я тега. @@ -1240,7 +1240,7 @@ teams.update_settings=Оновити налаштування teams.delete_team=Видалити команду teams.add_team_member=Додати учасника команди teams.delete_team_title=Видалити команду -teams.delete_team_desc=Видалення команди скасовує доступ до сховища для її членів. Продовжити? +teams.delete_team_desc=Видалення команди скасовує доступ до репозиторія для її учасників. Продовжити? teams.delete_team_success=Команду було видалено. teams.read_permission_desc=Ця команда має доступ для читання: учасники можуть переглядати та клонувати репозиторії. teams.write_permission_desc=Ця команда надає доступ на запис: учасники можуть отримувати й виконувати push команди до репозитрію. @@ -1350,7 +1350,7 @@ users.allow_create_organization=Може створювати організац users.update_profile=Оновити обліковий запис users.delete_account=Видалити цей обліковий запис users.still_own_repo=Ваш обліковий запис все ще володіє одним або кількома репозиторіями, спочатку вам потрібно видалити або передати їх. -users.still_has_org=Цей обліковий запис все ще є членом однієї або декількох організацій. Для продовження, покиньте або видаліть організації. +users.still_has_org=Цей обліковий запис все ще є учасником однієї або декількох організацій. Для продовження, покиньте або видаліть організації. users.deletion_success=Обліковий запис користувача було видалено. orgs.org_manage_panel=Керування організаціями From 9c6801c8d4f4ef37d32907d51a2ec164dcc42300 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Tue, 3 Jul 2018 15:37:07 -0400 Subject: [PATCH 049/124] Add changelog for 1.5.0-RC1 (#4324) --- CHANGELOG.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b31730a09..e6bd82dbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,54 @@ This changelog goes through all the changes that have been made in each release without substantial changes to our git log; to see the highlights of what has been added to each release, please refer to the [blog](https://blog.gitea.io). +## [1.5.0-RC1](https://github.com/go-gitea/gitea/releases/tag/v1.5.0-rc1) - 2018-06-27 +* SECURITY + * Limit uploaded avatar image-size to 4096x3072 by default (#4353) + * Do not allow to reuse TOTP passcode (#3878) +* FEATURE + * Add cli commands to regen hooks & keys (#3979) + * Add support for FIDO U2F (#3971) + * Added user language setting (#3875) + * LDAP Public SSH Keys synchronization (#1844) + * Add topic support (#3711) + * Multiple assignees (#3705) + * Add protected branch whitelists for merging (#3689) + * Global code search support (#3664) + * Add label descriptions (#3662) + * Add issue search via API (#3612) + * Add repository setting to enable/disable health checks (#3607) + * Emoji Autocomplete (#3433) + * Implements generator cli for secrets (#3531) +* ENHANCEMENT + * Add more webhooks support and refactor webhook templates directory (#3929) + * Add new option to allow only OAuth2/OpenID user registration (#3910) + * Add option to use paged LDAP search when synchronizing users (#3895) + * Symlink icons (#1416) + * Improve release page UI (#3693) + * Add admin dashboard option to run health checks (#3606) + * Add branch link in branch list (#3576) + * Reduce sql query times in retrieveFeeds (#3547) + * Option to enable or disable swagger endpoints (#3502) + * Add missing licenses (#3497) + * Reduce repo indexer disk usage (#3452) + * Enable caching on assets and avatars (#3376) + * Add repository search ordered by stars/forks. Forks column in admin repo list (#3969) + * Add Environment Variables to Docker template (#4012) + * LFS: make HTTP auth period configurable (#4035) + * Add config path as an optionial flag when changing pass via CLI (#4184) + * Refactor User Settings sections (#3900) + * Allow square brackets in external issue patterns (#3408) + * Add Attachment API (#3478) + * Add EnableTimetracking option to app settings (#3719) + * Add config option to enable or disable log executed SQL (#3726) + * Shows total tracked time in issue and milestone list (#3341) +* TRANSLATION + * Improve English grammar and consistency (#3614) +* DEPLOYMENT + * Allow Gitea to run as different USER in Docker (#3961) + * Provide compressed release binaries (#3991) + * Sign release binaries (#4188) + ## [1.4.3](https://github.com/go-gitea/gitea/releases/tag/v1.4.3) - 2018-06-26 * SECURITY * HTML-escape plain-text READMEs (#4192) (#4214) From 83e72f17f63bfde5b2d7c89d10d82b277dcccf1a Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 3 Jul 2018 19:38:06 +0000 Subject: [PATCH 050/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_sv-SE.ini | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index 435321648..de7f3c835 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -1,11 +1,15 @@ +app_desc=En smidig, självhostad Git-tjänst home=Startsida dashboard=Instrumentpanel explore=Utforska help=Hjälp sign_in=Logga in +sign_in_with=Logga in med sign_out=Logga ut +sign_up=Registrera link_account=Länka konto +link_account_signin_or_signup=Logga in med befintliga inloggningsuppgifter för att länka samman det kontot till detta kontot. Eller registrera ett nytt. register=Registrera dig website=Webbplats version=Version @@ -13,12 +17,32 @@ page=Sida template=Mall language=Språk notifications=Notiser +create_new=Skapa… +user_profile_and_more=Profil och Inställningar… signed_in_as=Inloggad som +enable_javascript=Denna sida fungerar bättre med Javascript igång. username=Användarnamn +email=E-postadress password=Lösenord +re_type=Upprepa lösenordet +captcha=CAPTCHA +twofa=Tvåfaktorsautentisering +twofa_scratch=Tvåfaktorsskrapkod passcode=Kod +u2f_insert_key=Sätt i din säkerhetsnyckel +u2f_sign_in=Tryck på knappen på din säkerhetsnyckel. Om du inte kan hitta en knapp, dra ur och sätt i nyckeln igen. +u2f_press_button=Vänligen tryck på knappen på din säkerhetsnyckel… +u2f_use_twofa=Använd en tvåfaktorskod från din telefon +u2f_error=Vi kan inte läsa din säkerhetsnyckel! +u2f_unsupported_browser=Din webbläsare stödjer inte U2F-nycklar. Vänligen prova en annan webbläsare. +u2f_error_1=Ett okänt fel uppstod. Vänligen försök igen. +u2f_error_2=Kontrollera att du använder en krypterad anslutning (https://) och besöker korrekt länk. +u2f_error_3=Servern kunde inte hantera din förfrågan. +u2f_error_4=Den givna nyckeln är inte behörig för denna förfrågan. Om du försöker registrera den, se till att den inte redan är registrerad. +u2f_error_5=Timeout uppnådd innan nyckeln kunde bli läst. Vänligen ladda om sidan och för att försök igen. +u2f_reload=Ladda om repository=Utvecklingskatalog organization=Organisation @@ -29,8 +53,12 @@ new_mirror=Ny Spegling new_fork=Ny förgrening av utvecklingskatalog new_org=Ny organisation manage_org=Hantera organisationer +admin_panel=Sidadministration account_settings=Kontoinställningar settings=inställningar +your_profile=Profil +your_starred=Stjärnmärkt +your_settings=Inställningar all=Alla sources=Källor @@ -46,14 +74,37 @@ cancel=Avbryt [install] install=Installation +title=Ursprunglig konfiguration +docker_helper=Om du kör Gitea inuti Docker, vänligen läs dokumentationen noggrant innan du ändrar några inställningar. +requite_db_desc=Gitea behöver MySQL, PostgreSQL, MSSQL, SQLite3 eller TiDB. db_title=Databasinställningar db_type=Databastyp host=Server +user=Användarnamn password=Lösenord db_name=Databasens namn +db_helper=Notis för MySQL-användare: Använd InnoDB-lagringsmotorn och teckenuppsättning 'utf8_general_ci'. +ssl_mode=SSL path=Filväg +sqlite_helper=Sökväg för SQLite3 eller TiDB databasen.
Ange en absolut sökväg om du kör Gitea som en systemtjänst. +err_empty_db_path=Sökvägen till SQLite3- eller TiDB-databasen kan inte vara tom. +err_invalid_tidb_name=TiDB-databases namn får inte innehålla '.'- eller '-'-tecken. +no_admin_and_disable_registration=Du kan inte inaktivera självregistrering utan att skapa ett administratörskonto. +err_empty_admin_password=Administratörslösenordet kan inte vara tomt. +general_title=Allmänna inställningar +app_name=Sajtens namn +app_name_helper=Du kan ange ditt företagsnamn här. repo_path=Rotsökväg för utvecklingskatalog +repo_path_helper=Fjärrutvecklingskataloger kommer att sparas i denna katalog. +lfs_path=LFS Rotsökväg +lfs_path_helper=Filer hanterade av Git LFS kommer att sparas i denna mapp. Lämna tom för att avaktivera. +run_user=Kör som användarnamn +run_user_helper=Ange operativsystemets användarnamn som Gitea ska köras under. Denna användare måste ha tillgång till utvecklingskatalogens rotsökväg. +domain=SSH-Serverdomän +domain_helper=Domän- eller hostadress för SSH-kloningslänkar. +ssh_port=SSH-serverport +ssh_port_helper=Portnumret som din SSH-server lyssnar på. Lämna tom för att inaktivera. log_root_path=Loggsökväg optional_title=Övriga inställningar @@ -65,7 +116,14 @@ admin_password=Lösenord confirm_password=Bekräfta lösenord install_btn_confirm=Installera Gitea test_git_failed=Misslyckades att testa 'git' kommando: %v +invalid_repo_path=Utvecklingskatalogens rotsökväg är ogiltig: %v save_config_failed=Misslyckades att spara konfigurationen: %v +install_success=Välkommen! Tack för att du valt Gitea. Ha det så roligt, väl mött! +invalid_log_root_path=Sökvägen för loggar är ogiltig: %v +default_allow_create_organization=Tillåt skapandet utav organisationer som standard +default_allow_create_organization_popup=Tillåt nya användarkonton att skapa organisationer som standard. +default_enable_timetracking=Aktivera tidredovisning som Standard +default_enable_timetracking_popup=Aktivera tidsredovisning för nya utvecklingskataloger som standard. [home] password_holder=Lösenord @@ -154,26 +212,34 @@ auth_failed=Autentisering misslyckades: %v target_branch_not_exist=Målgrenen finns inte. [user] +change_avatar=Byt din avatar… join_on=Gick med repositories=Utvecklingskataloger activity=Offentlig Aktivitet followers=Följare +starred=Stjärnmärkta Utvecklingskataloger following=Följer follow=Följ unfollow=Sluta följa form.name_reserved=Användarnamnet '%s' är reserverat. +form.name_pattern_not_allowed=Mönstret '%s' är otillåtet i ett användarnamn. [settings] profile=Profil +account=Konto password=Lösenord security=Säkerhet avatar=Visningsbild ssh_gpg_keys=SSH / GPG-nycklar social=Sociala konton +applications=Applikationer +orgs=Hantera Organisationer repos=Utvecklingskataloger delete=Radera konto twofa=Tvåfaktorsautentisering +account_link=Länkade Konton +organization=Organisationer uid=AnvändarID public_profile=Offentlig profil From 5f52178421fc2344b82b2a977c2aa4ee9f968946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauris=20Buk=C5=A1is-Haberkorns?= Date: Tue, 3 Jul 2018 22:57:59 +0300 Subject: [PATCH 051/124] Change 1.5.0 RC1 release date in changelog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lauris Bukšis-Haberkorns --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6bd82dbb..a015fbd63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ This changelog goes through all the changes that have been made in each release without substantial changes to our git log; to see the highlights of what has been added to each release, please refer to the [blog](https://blog.gitea.io). -## [1.5.0-RC1](https://github.com/go-gitea/gitea/releases/tag/v1.5.0-rc1) - 2018-06-27 +## [1.5.0-RC1](https://github.com/go-gitea/gitea/releases/tag/v1.5.0-rc1) - 2018-07-03 * SECURITY * Limit uploaded avatar image-size to 4096x3072 by default (#4353) * Do not allow to reuse TOTP passcode (#3878) From a4dfe4b9b1017e7a491386e44c38cd42b46630aa Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 3 Jul 2018 19:58:30 +0000 Subject: [PATCH 052/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_sv-SE.ini | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index de7f3c835..f0ce1addb 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -117,21 +117,31 @@ confirm_password=Bekräfta lösenord install_btn_confirm=Installera Gitea test_git_failed=Misslyckades att testa 'git' kommando: %v invalid_repo_path=Utvecklingskatalogens rotsökväg är ogiltig: %v +run_user_not_match=Systemtjänstanvändaren är inte den nuvarande användaren: %s -> %s save_config_failed=Misslyckades att spara konfigurationen: %v +invalid_admin_setting=Inställning för administartörskontot är ogiltig: %v install_success=Välkommen! Tack för att du valt Gitea. Ha det så roligt, väl mött! invalid_log_root_path=Sökvägen för loggar är ogiltig: %v +default_keep_email_private=Dölj mailadresser som standard +default_keep_email_private_popup=Dölj mailadresser för nya användarkonton som standard. default_allow_create_organization=Tillåt skapandet utav organisationer som standard default_allow_create_organization_popup=Tillåt nya användarkonton att skapa organisationer som standard. default_enable_timetracking=Aktivera tidredovisning som Standard default_enable_timetracking_popup=Aktivera tidsredovisning för nya utvecklingskataloger som standard. +no_reply_address=Dold mejldomän +no_reply_address_helper=Domännamn för användare med en dold mailadress. Exempelvis kommer användarnamnet 'joe' att loggas i Git som 'joe@noreply.example.org' om dold maildomän är satt till 'noreply.example.org'. [home] +uname_holder=Användarnamn eller Mejladress password_holder=Lösenord switch_dashboard_context=Växla Visad Instrumentpanel +my_repos=Utvecklingskataloger +show_more_repos=Visa flera utvecklingskataloger… collaborative_repos=Kollaborativa Utvecklingskataloger my_orgs=Mina organisationer my_mirrors=Mina speglar view_home=Visa %s +search_repos=Hitta en utvecklingskatalog… issues.in_your_repos=I dina utvecklingskataloger @@ -140,9 +150,18 @@ repos=Utvecklingskataloger users=Användare organizations=Organisationer search=Sök +code=Kod +repo_no_results=Inga matchande utvecklingskataloger hittades. +user_no_results=Inga matchande användare hittades. +org_no_results=Inga matchande organisationer hittades. +code_no_results=Ingen källkod hittades som matchar din sökterm. +code_search_results=Söktresultat för '%s' [auth] +create_new_account=Registrera Konto register_helper_msg=Har du redan ett konto? Logga in nu! +social_register_helper_msg=Har du redan ett konto? Länka det nu! +disable_register_prompt=Registrering inaktiverad. Vänligen kontakta din sidadministratör. remember_me=Kom ihåg mig forgot_password_title=Glömt lösenord forgot_password=Glömt lösenord? @@ -160,6 +179,7 @@ scratch_code=Skrapkod use_scratch_code=Använd en skrapkod twofa_scratch_used=Du har använt din skrapkod. Du har blivit omdirigerad till tvåfaktorsinställningarna så att du kan ta bort din aktiverade enhet eller generera en ny skrapkod. twofa_scratch_token_incorrect=Din skrapkod är ogiltlig. +login_userpass=Logga in login_openid=OpenID openid_connect_submit=Anslut openid_connect_title=Anslut ett existerande konto @@ -204,6 +224,7 @@ url_error=Den givna URL-adressen är inte valid include_error=` måste innehålla texten '%s'.` unknown_error=Okänt fel: +repo_name_been_taken=Namnet för utvecklingskatalogen är upptaget. user_not_exist=Användaren finns inte. auth_failed=Autentisering misslyckades: %v @@ -406,6 +427,7 @@ issues.new.no_milestone=Ingen Milsten issues.new.clear_milestone=Rensa milstenar issues.new.open_milestone=Öppna Milstenar issues.new.closed_milestone=Stängda Milstenar +issues.new.no_assignees=Ingen tilldelad issues.no_ref=Ingen branch/Tag specificerad issues.create=Skapa Ärende issues.new_label=Ny etikett From 1c7f95153402851b4aa293ae822250d6a8df6b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauris=20Buk=C5=A1is-Haberkorns?= Date: Tue, 3 Jul 2018 23:21:44 +0300 Subject: [PATCH 053/124] Change 1.5.0 RC1 release date in changelog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lauris Bukšis-Haberkorns --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a015fbd63..add1d4e26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ This changelog goes through all the changes that have been made in each release without substantial changes to our git log; to see the highlights of what has been added to each release, please refer to the [blog](https://blog.gitea.io). -## [1.5.0-RC1](https://github.com/go-gitea/gitea/releases/tag/v1.5.0-rc1) - 2018-07-03 +## [1.5.0-RC1](https://github.com/go-gitea/gitea/releases/tag/v1.5.0-rc1) - 2018-07-04 * SECURITY * Limit uploaded avatar image-size to 4096x3072 by default (#4353) * Do not allow to reuse TOTP passcode (#3878) From 100a538622695955df460c2a9a82b32cd55f2c32 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 3 Jul 2018 20:23:00 +0000 Subject: [PATCH 054/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_sv-SE.ini | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index f0ce1addb..89103ea48 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -162,6 +162,7 @@ create_new_account=Registrera Konto register_helper_msg=Har du redan ett konto? Logga in nu! social_register_helper_msg=Har du redan ett konto? Länka det nu! disable_register_prompt=Registrering inaktiverad. Vänligen kontakta din sidadministratör. +disable_register_mail=Bekräftelsemejl vid registrering är inaktiverad. remember_me=Kom ihåg mig forgot_password_title=Glömt lösenord forgot_password=Glömt lösenord? @@ -431,6 +432,8 @@ issues.new.no_assignees=Ingen tilldelad issues.no_ref=Ingen branch/Tag specificerad issues.create=Skapa Ärende issues.new_label=Ny etikett +issues.new_label_placeholder=Etikettsnamn +issues.new_label_desc_placeholder=Beskrivning issues.create_label=Skapa Etikett issues.label_templates.title=Ladda en fördefinierad uppsättning etiketter issues.label_templates.helper=Markera en uppsättning etiketter @@ -463,6 +466,10 @@ issues.filter_sort.recentupdate=Nyligen uppdaterade issues.filter_sort.leastupdate=Äldst uppdaterad issues.filter_sort.mostcomment=Mest kommenterade issues.filter_sort.leastcomment=Minst kommenterade +issues.filter_sort.moststars=Flest stjärnor +issues.filter_sort.feweststars=Minst stjärnor +issues.filter_sort.mostforks=Flest forks +issues.filter_sort.fewestforks=Minst forks issues.action_open=Öppna issues.action_close=Stäng issues.action_label=Etikett @@ -481,7 +488,9 @@ issues.commented_at=`kommenterad %s` issues.delete_comment_confirm=Är du säker på att du vill ta bort den här kommentaren? issues.no_content=Det finns inget innehåll än. issues.close_issue=Stäng +issues.close_comment_issue=Kommentera och stäng issues.reopen_issue=Återöppna +issues.reopen_comment_issue=Kommentera och återöppna issues.create_comment=Kommentera issues.closed_at=`stängde %[2]s` issues.reopened_at=`återöppnade %[2]s` @@ -494,11 +503,16 @@ issues.edit=Redigera issues.cancel=Avbryt issues.save=Spara issues.label_title=Etikettsnamn +issues.label_description=Etikettbeskrivning issues.label_color=Etikettsfärg issues.label_count=%d etiketter issues.label_open_issues=%d öppna ärenden issues.label_edit=Redigera issues.label_delete=Radera +issues.label_modify=Redigera etikett +issues.label_deletion=Ta bort etikett +issues.label_deletion_desc=Bottagning av en etikett tar bort den från alla ärenden. Fortsätta? +issues.label_deletion_success=Etiketten har tagits bort. issues.label.filter_sort.alphabetically=Alfabetiskt A-Ö issues.label.filter_sort.reverse_alphabetically=Alfabetiskt Ö-A issues.label.filter_sort.by_size=Storlek @@ -508,11 +522,15 @@ issues.attachment.open_tab=`Klicka för att se "%s" i en ny flik` issues.attachment.download=`Klicka för att hämta "%s"` issues.subscribe=Prenumerera issues.unsubscribe=Avsluta prenumerationen +issues.tracker=Tidsredovisning issues.start_tracking_short=Starta +issues.start_tracking=Starta tidsredovisning issues.start_tracking_history=`började arbeta %s` issues.tracking_already_started=`Du har redan påbörjat tidredovisning på detta ärende!` issues.stop_tracking=Stoppa issues.stop_tracking_history=`slutade arbeta %s` +issues.add_time=Lägg till tid manuellt +issues.add_time_short=Lägg till tid issues.add_time_cancel=Avbryt issues.add_time_history=`la till tillbringad tid %s` issues.add_time_hours=Timmar From 280ebcbf7c761a212fb091634384847a38f25cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauris=20Buk=C5=A1is-Haberkorns?= Date: Tue, 3 Jul 2018 23:24:15 +0300 Subject: [PATCH 055/124] Update changelog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lauris Bukšis-Haberkorns --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index add1d4e26..03ea5ec2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ been added to each release, please refer to the [blog](https://blog.gitea.io). ## [1.5.0-RC1](https://github.com/go-gitea/gitea/releases/tag/v1.5.0-rc1) - 2018-07-04 * SECURITY - * Limit uploaded avatar image-size to 4096x3072 by default (#4353) + * Limit uploaded avatar image-size to 4096px x 3072px by default (#4353) * Do not allow to reuse TOTP passcode (#3878) * FEATURE * Add cli commands to regen hooks & keys (#3979) From 9d4c1ddfa14d33ce3b78c02421fb76a93e5ca2d6 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Tue, 3 Jul 2018 17:58:31 -0400 Subject: [PATCH 056/124] Dep upgrade mysql lib (#4161) * update gopkg file to add sql dep --- Gopkg.lock | 4 +- Gopkg.toml | 4 + vendor/github.com/go-sql-driver/mysql/AUTHORS | 34 ++ .../go-sql-driver/mysql/appengine.go | 2 +- vendor/github.com/go-sql-driver/mysql/auth.go | 420 +++++++++++++++++ .../github.com/go-sql-driver/mysql/buffer.go | 12 +- .../go-sql-driver/mysql/collations.go | 1 + .../go-sql-driver/mysql/connection.go | 152 ++++-- .../go-sql-driver/mysql/connection_go18.go | 208 +++++++++ .../github.com/go-sql-driver/mysql/const.go | 25 +- .../github.com/go-sql-driver/mysql/driver.go | 81 ++-- vendor/github.com/go-sql-driver/mysql/dsn.go | 159 +++++-- .../github.com/go-sql-driver/mysql/errors.go | 79 +--- .../github.com/go-sql-driver/mysql/fields.go | 194 ++++++++ .../github.com/go-sql-driver/mysql/infile.go | 6 +- .../github.com/go-sql-driver/mysql/packets.go | 441 ++++++++++-------- vendor/github.com/go-sql-driver/mysql/rows.go | 174 +++++-- .../go-sql-driver/mysql/statement.go | 123 +++-- .../go-sql-driver/mysql/transaction.go | 4 +- .../github.com/go-sql-driver/mysql/utils.go | 214 ++++----- .../go-sql-driver/mysql/utils_go17.go | 40 ++ .../go-sql-driver/mysql/utils_go18.go | 50 ++ 22 files changed, 1813 insertions(+), 614 deletions(-) create mode 100644 vendor/github.com/go-sql-driver/mysql/auth.go create mode 100644 vendor/github.com/go-sql-driver/mysql/connection_go18.go create mode 100644 vendor/github.com/go-sql-driver/mysql/fields.go create mode 100644 vendor/github.com/go-sql-driver/mysql/utils_go17.go create mode 100644 vendor/github.com/go-sql-driver/mysql/utils_go18.go diff --git a/Gopkg.lock b/Gopkg.lock index 6551354a0..d5b2408bb 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -294,7 +294,7 @@ [[projects]] name = "github.com/go-sql-driver/mysql" packages = ["."] - revision = "ce924a41eea897745442daaa1739089b0f3f561d" + revision = "d523deb1b23d913de5bdada721a6071e71283618" [[projects]] name = "github.com/go-xorm/builder" @@ -873,6 +873,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "036b8c882671cf8d2c5e2fdbe53b1bdfbd39f7ebd7765bd50276c7c4ecf16687" + inputs-digest = "96c83a3502bd50c5ca8e4d9b4145172267630270e587c79b7253156725eeb9b8" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 1019888c0..42523550f 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -40,6 +40,10 @@ ignored = ["google.golang.org/appengine*"] #version = "0.6.5" revision = "d4149d1eee0c2c488a74a5863fd9caf13d60fd03" +[[override]] + name = "github.com/go-sql-driver/mysql" + revision = "d523deb1b23d913de5bdada721a6071e71283618" + [[override]] name = "github.com/gorilla/mux" revision = "757bef944d0f21880861c2dd9c871ca543023cba" diff --git a/vendor/github.com/go-sql-driver/mysql/AUTHORS b/vendor/github.com/go-sql-driver/mysql/AUTHORS index 148ea93aa..73ff68fbc 100644 --- a/vendor/github.com/go-sql-driver/mysql/AUTHORS +++ b/vendor/github.com/go-sql-driver/mysql/AUTHORS @@ -12,34 +12,63 @@ # Individual Persons Aaron Hopkins +Achille Roussel +Alexey Palazhchenko +Andrew Reid Arne Hormann +Asta Xie +Bulat Gaifullin Carlos Nieto Chris Moos +Craig Wilson +Daniel Montoya Daniel Nichter Daniël van Eeden +Dave Protasowski DisposaBoy +Egor Smolyakov +Evan Shaw Frederick Mayle Gustavo Kristic +Hajime Nakagami Hanno Braun Henri Yandell Hirotaka Yamamoto +ICHINOSE Shogo INADA Naoki +Jacek Szwec James Harr +Jeff Hodges +Jeffrey Charles Jian Zhen Joshua Prunier Julien Lefevre Julien Schmidt +Justin Li +Justin Nuß Kamil Dziedzic Kevin Malachowski +Kieron Woodhouse Lennart Rudolph Leonardo YongUk Kim +Linh Tran Tuan +Lion Yang Luca Looz Lucas Liu Luke Scott +Maciej Zimnoch Michael Woolnough Nicola Peduzzi +Olivier Mengué +oscarzhao Paul Bonser +Peter Schultz +Rebecca Chin +Reed Allman +Richard Wilkes +Robert Russell Runrioter Wung +Shuode Li Soroush Pour Stan Putrya Stanley Gunawan @@ -51,5 +80,10 @@ Zhenye Xie # Organizations Barracuda Networks, Inc. +Counting Ltd. Google Inc. +InfoSum Ltd. +Keybase Inc. +Percona LLC +Pivotal Inc. Stripe Inc. diff --git a/vendor/github.com/go-sql-driver/mysql/appengine.go b/vendor/github.com/go-sql-driver/mysql/appengine.go index 565614eef..be41f2ee6 100644 --- a/vendor/github.com/go-sql-driver/mysql/appengine.go +++ b/vendor/github.com/go-sql-driver/mysql/appengine.go @@ -11,7 +11,7 @@ package mysql import ( - "appengine/cloudsql" + "google.golang.org/appengine/cloudsql" ) func init() { diff --git a/vendor/github.com/go-sql-driver/mysql/auth.go b/vendor/github.com/go-sql-driver/mysql/auth.go new file mode 100644 index 000000000..0b59f52ee --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/auth.go @@ -0,0 +1,420 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +package mysql + +import ( + "crypto/rand" + "crypto/rsa" + "crypto/sha1" + "crypto/sha256" + "crypto/x509" + "encoding/pem" + "sync" +) + +// server pub keys registry +var ( + serverPubKeyLock sync.RWMutex + serverPubKeyRegistry map[string]*rsa.PublicKey +) + +// RegisterServerPubKey registers a server RSA public key which can be used to +// send data in a secure manner to the server without receiving the public key +// in a potentially insecure way from the server first. +// Registered keys can afterwards be used adding serverPubKey= to the DSN. +// +// Note: The provided rsa.PublicKey instance is exclusively owned by the driver +// after registering it and may not be modified. +// +// data, err := ioutil.ReadFile("mykey.pem") +// if err != nil { +// log.Fatal(err) +// } +// +// block, _ := pem.Decode(data) +// if block == nil || block.Type != "PUBLIC KEY" { +// log.Fatal("failed to decode PEM block containing public key") +// } +// +// pub, err := x509.ParsePKIXPublicKey(block.Bytes) +// if err != nil { +// log.Fatal(err) +// } +// +// if rsaPubKey, ok := pub.(*rsa.PublicKey); ok { +// mysql.RegisterServerPubKey("mykey", rsaPubKey) +// } else { +// log.Fatal("not a RSA public key") +// } +// +func RegisterServerPubKey(name string, pubKey *rsa.PublicKey) { + serverPubKeyLock.Lock() + if serverPubKeyRegistry == nil { + serverPubKeyRegistry = make(map[string]*rsa.PublicKey) + } + + serverPubKeyRegistry[name] = pubKey + serverPubKeyLock.Unlock() +} + +// DeregisterServerPubKey removes the public key registered with the given name. +func DeregisterServerPubKey(name string) { + serverPubKeyLock.Lock() + if serverPubKeyRegistry != nil { + delete(serverPubKeyRegistry, name) + } + serverPubKeyLock.Unlock() +} + +func getServerPubKey(name string) (pubKey *rsa.PublicKey) { + serverPubKeyLock.RLock() + if v, ok := serverPubKeyRegistry[name]; ok { + pubKey = v + } + serverPubKeyLock.RUnlock() + return +} + +// Hash password using pre 4.1 (old password) method +// https://github.com/atcurtis/mariadb/blob/master/mysys/my_rnd.c +type myRnd struct { + seed1, seed2 uint32 +} + +const myRndMaxVal = 0x3FFFFFFF + +// Pseudo random number generator +func newMyRnd(seed1, seed2 uint32) *myRnd { + return &myRnd{ + seed1: seed1 % myRndMaxVal, + seed2: seed2 % myRndMaxVal, + } +} + +// Tested to be equivalent to MariaDB's floating point variant +// http://play.golang.org/p/QHvhd4qved +// http://play.golang.org/p/RG0q4ElWDx +func (r *myRnd) NextByte() byte { + r.seed1 = (r.seed1*3 + r.seed2) % myRndMaxVal + r.seed2 = (r.seed1 + r.seed2 + 33) % myRndMaxVal + + return byte(uint64(r.seed1) * 31 / myRndMaxVal) +} + +// Generate binary hash from byte string using insecure pre 4.1 method +func pwHash(password []byte) (result [2]uint32) { + var add uint32 = 7 + var tmp uint32 + + result[0] = 1345345333 + result[1] = 0x12345671 + + for _, c := range password { + // skip spaces and tabs in password + if c == ' ' || c == '\t' { + continue + } + + tmp = uint32(c) + result[0] ^= (((result[0] & 63) + add) * tmp) + (result[0] << 8) + result[1] += (result[1] << 8) ^ result[0] + add += tmp + } + + // Remove sign bit (1<<31)-1) + result[0] &= 0x7FFFFFFF + result[1] &= 0x7FFFFFFF + + return +} + +// Hash password using insecure pre 4.1 method +func scrambleOldPassword(scramble []byte, password string) []byte { + if len(password) == 0 { + return nil + } + + scramble = scramble[:8] + + hashPw := pwHash([]byte(password)) + hashSc := pwHash(scramble) + + r := newMyRnd(hashPw[0]^hashSc[0], hashPw[1]^hashSc[1]) + + var out [8]byte + for i := range out { + out[i] = r.NextByte() + 64 + } + + mask := r.NextByte() + for i := range out { + out[i] ^= mask + } + + return out[:] +} + +// Hash password using 4.1+ method (SHA1) +func scramblePassword(scramble []byte, password string) []byte { + if len(password) == 0 { + return nil + } + + // stage1Hash = SHA1(password) + crypt := sha1.New() + crypt.Write([]byte(password)) + stage1 := crypt.Sum(nil) + + // scrambleHash = SHA1(scramble + SHA1(stage1Hash)) + // inner Hash + crypt.Reset() + crypt.Write(stage1) + hash := crypt.Sum(nil) + + // outer Hash + crypt.Reset() + crypt.Write(scramble) + crypt.Write(hash) + scramble = crypt.Sum(nil) + + // token = scrambleHash XOR stage1Hash + for i := range scramble { + scramble[i] ^= stage1[i] + } + return scramble +} + +// Hash password using MySQL 8+ method (SHA256) +func scrambleSHA256Password(scramble []byte, password string) []byte { + if len(password) == 0 { + return nil + } + + // XOR(SHA256(password), SHA256(SHA256(SHA256(password)), scramble)) + + crypt := sha256.New() + crypt.Write([]byte(password)) + message1 := crypt.Sum(nil) + + crypt.Reset() + crypt.Write(message1) + message1Hash := crypt.Sum(nil) + + crypt.Reset() + crypt.Write(message1Hash) + crypt.Write(scramble) + message2 := crypt.Sum(nil) + + for i := range message1 { + message1[i] ^= message2[i] + } + + return message1 +} + +func encryptPassword(password string, seed []byte, pub *rsa.PublicKey) ([]byte, error) { + plain := make([]byte, len(password)+1) + copy(plain, password) + for i := range plain { + j := i % len(seed) + plain[i] ^= seed[j] + } + sha1 := sha1.New() + return rsa.EncryptOAEP(sha1, rand.Reader, pub, plain, nil) +} + +func (mc *mysqlConn) sendEncryptedPassword(seed []byte, pub *rsa.PublicKey) error { + enc, err := encryptPassword(mc.cfg.Passwd, seed, pub) + if err != nil { + return err + } + return mc.writeAuthSwitchPacket(enc, false) +} + +func (mc *mysqlConn) auth(authData []byte, plugin string) ([]byte, bool, error) { + switch plugin { + case "caching_sha2_password": + authResp := scrambleSHA256Password(authData, mc.cfg.Passwd) + return authResp, (authResp == nil), nil + + case "mysql_old_password": + if !mc.cfg.AllowOldPasswords { + return nil, false, ErrOldPassword + } + // Note: there are edge cases where this should work but doesn't; + // this is currently "wontfix": + // https://github.com/go-sql-driver/mysql/issues/184 + authResp := scrambleOldPassword(authData[:8], mc.cfg.Passwd) + return authResp, true, nil + + case "mysql_clear_password": + if !mc.cfg.AllowCleartextPasswords { + return nil, false, ErrCleartextPassword + } + // http://dev.mysql.com/doc/refman/5.7/en/cleartext-authentication-plugin.html + // http://dev.mysql.com/doc/refman/5.7/en/pam-authentication-plugin.html + return []byte(mc.cfg.Passwd), true, nil + + case "mysql_native_password": + if !mc.cfg.AllowNativePasswords { + return nil, false, ErrNativePassword + } + // https://dev.mysql.com/doc/internals/en/secure-password-authentication.html + // Native password authentication only need and will need 20-byte challenge. + authResp := scramblePassword(authData[:20], mc.cfg.Passwd) + return authResp, false, nil + + case "sha256_password": + if len(mc.cfg.Passwd) == 0 { + return nil, true, nil + } + if mc.cfg.tls != nil || mc.cfg.Net == "unix" { + // write cleartext auth packet + return []byte(mc.cfg.Passwd), true, nil + } + + pubKey := mc.cfg.pubKey + if pubKey == nil { + // request public key from server + return []byte{1}, false, nil + } + + // encrypted password + enc, err := encryptPassword(mc.cfg.Passwd, authData, pubKey) + return enc, false, err + + default: + errLog.Print("unknown auth plugin:", plugin) + return nil, false, ErrUnknownPlugin + } +} + +func (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error { + // Read Result Packet + authData, newPlugin, err := mc.readAuthResult() + if err != nil { + return err + } + + // handle auth plugin switch, if requested + if newPlugin != "" { + // If CLIENT_PLUGIN_AUTH capability is not supported, no new cipher is + // sent and we have to keep using the cipher sent in the init packet. + if authData == nil { + authData = oldAuthData + } else { + // copy data from read buffer to owned slice + copy(oldAuthData, authData) + } + + plugin = newPlugin + + authResp, addNUL, err := mc.auth(authData, plugin) + if err != nil { + return err + } + if err = mc.writeAuthSwitchPacket(authResp, addNUL); err != nil { + return err + } + + // Read Result Packet + authData, newPlugin, err = mc.readAuthResult() + if err != nil { + return err + } + + // Do not allow to change the auth plugin more than once + if newPlugin != "" { + return ErrMalformPkt + } + } + + switch plugin { + + // https://insidemysql.com/preparing-your-community-connector-for-mysql-8-part-2-sha256/ + case "caching_sha2_password": + switch len(authData) { + case 0: + return nil // auth successful + case 1: + switch authData[0] { + case cachingSha2PasswordFastAuthSuccess: + if err = mc.readResultOK(); err == nil { + return nil // auth successful + } + + case cachingSha2PasswordPerformFullAuthentication: + if mc.cfg.tls != nil || mc.cfg.Net == "unix" { + // write cleartext auth packet + err = mc.writeAuthSwitchPacket([]byte(mc.cfg.Passwd), true) + if err != nil { + return err + } + } else { + pubKey := mc.cfg.pubKey + if pubKey == nil { + // request public key from server + data := mc.buf.takeSmallBuffer(4 + 1) + data[4] = cachingSha2PasswordRequestPublicKey + mc.writePacket(data) + + // parse public key + data, err := mc.readPacket() + if err != nil { + return err + } + + block, _ := pem.Decode(data[1:]) + pkix, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + return err + } + pubKey = pkix.(*rsa.PublicKey) + } + + // send encrypted password + err = mc.sendEncryptedPassword(oldAuthData, pubKey) + if err != nil { + return err + } + } + return mc.readResultOK() + + default: + return ErrMalformPkt + } + default: + return ErrMalformPkt + } + + case "sha256_password": + switch len(authData) { + case 0: + return nil // auth successful + default: + block, _ := pem.Decode(authData) + pub, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + return err + } + + // send encrypted password + err = mc.sendEncryptedPassword(oldAuthData, pub.(*rsa.PublicKey)) + if err != nil { + return err + } + return mc.readResultOK() + } + + default: + return nil // auth successful + } + + return err +} diff --git a/vendor/github.com/go-sql-driver/mysql/buffer.go b/vendor/github.com/go-sql-driver/mysql/buffer.go index 2001feacd..eb4748bf4 100644 --- a/vendor/github.com/go-sql-driver/mysql/buffer.go +++ b/vendor/github.com/go-sql-driver/mysql/buffer.go @@ -130,18 +130,18 @@ func (b *buffer) takeBuffer(length int) []byte { // smaller than defaultBufSize // Only one buffer (total) can be used at a time. func (b *buffer) takeSmallBuffer(length int) []byte { - if b.length == 0 { - return b.buf[:length] + if b.length > 0 { + return nil } - return nil + return b.buf[:length] } // takeCompleteBuffer returns the complete existing buffer. // This can be used if the necessary buffer size is unknown. // Only one buffer (total) can be used at a time. func (b *buffer) takeCompleteBuffer() []byte { - if b.length == 0 { - return b.buf + if b.length > 0 { + return nil } - return nil + return b.buf } diff --git a/vendor/github.com/go-sql-driver/mysql/collations.go b/vendor/github.com/go-sql-driver/mysql/collations.go index 82079cfb9..136c9e4d1 100644 --- a/vendor/github.com/go-sql-driver/mysql/collations.go +++ b/vendor/github.com/go-sql-driver/mysql/collations.go @@ -9,6 +9,7 @@ package mysql const defaultCollation = "utf8_general_ci" +const binaryCollation = "binary" // A list of available collations mapped to the internal ID. // To update this map use the following MySQL query: diff --git a/vendor/github.com/go-sql-driver/mysql/connection.go b/vendor/github.com/go-sql-driver/mysql/connection.go index d82c728f3..e57061412 100644 --- a/vendor/github.com/go-sql-driver/mysql/connection.go +++ b/vendor/github.com/go-sql-driver/mysql/connection.go @@ -10,12 +10,23 @@ package mysql import ( "database/sql/driver" + "io" "net" "strconv" "strings" "time" ) +// a copy of context.Context for Go 1.7 and earlier +type mysqlContext interface { + Done() <-chan struct{} + Err() error + + // defined in context.Context, but not used in this driver: + // Deadline() (deadline time.Time, ok bool) + // Value(key interface{}) interface{} +} + type mysqlConn struct { buf buffer netConn net.Conn @@ -29,7 +40,14 @@ type mysqlConn struct { status statusFlag sequence uint8 parseTime bool - strict bool + + // for context support (Go 1.8+) + watching bool + watcher chan<- mysqlContext + closech chan struct{} + finished chan<- struct{} + canceled atomicError // set non-nil if conn is canceled + closed atomicBool // set when conn is closed, before closech is closed } // Handles parameters set in DSN after the connection is established @@ -62,22 +80,41 @@ func (mc *mysqlConn) handleParams() (err error) { return } +func (mc *mysqlConn) markBadConn(err error) error { + if mc == nil { + return err + } + if err != errBadConnNoWrite { + return err + } + return driver.ErrBadConn +} + func (mc *mysqlConn) Begin() (driver.Tx, error) { - if mc.netConn == nil { + return mc.begin(false) +} + +func (mc *mysqlConn) begin(readOnly bool) (driver.Tx, error) { + if mc.closed.IsSet() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } - err := mc.exec("START TRANSACTION") + var q string + if readOnly { + q = "START TRANSACTION READ ONLY" + } else { + q = "START TRANSACTION" + } + err := mc.exec(q) if err == nil { return &mysqlTx{mc}, err } - - return nil, err + return nil, mc.markBadConn(err) } func (mc *mysqlConn) Close() (err error) { // Makes Close idempotent - if mc.netConn != nil { + if !mc.closed.IsSet() { err = mc.writeCommandPacket(comQuit) } @@ -91,26 +128,39 @@ func (mc *mysqlConn) Close() (err error) { // is called before auth or on auth failure because MySQL will have already // closed the network connection. func (mc *mysqlConn) cleanup() { - // Makes cleanup idempotent - if mc.netConn != nil { - if err := mc.netConn.Close(); err != nil { - errLog.Print(err) - } - mc.netConn = nil + if !mc.closed.TrySet(true) { + return } - mc.cfg = nil - mc.buf.nc = nil + + // Makes cleanup idempotent + close(mc.closech) + if mc.netConn == nil { + return + } + if err := mc.netConn.Close(); err != nil { + errLog.Print(err) + } +} + +func (mc *mysqlConn) error() error { + if mc.closed.IsSet() { + if err := mc.canceled.Value(); err != nil { + return err + } + return ErrInvalidConn + } + return nil } func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) { - if mc.netConn == nil { + if mc.closed.IsSet() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } // Send command err := mc.writeCommandPacketStr(comStmtPrepare, query) if err != nil { - return nil, err + return nil, mc.markBadConn(err) } stmt := &mysqlStmt{ @@ -144,7 +194,7 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin if buf == nil { // can not take the buffer. Something must be wrong with the connection errLog.Print(ErrBusyBuffer) - return "", driver.ErrBadConn + return "", ErrInvalidConn } buf = buf[:0] argPos := 0 @@ -257,7 +307,7 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin } func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) { - if mc.netConn == nil { + if mc.closed.IsSet() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } @@ -271,7 +321,6 @@ func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, err return nil, err } query = prepared - args = nil } mc.affectedRows = 0 mc.insertId = 0 @@ -283,32 +332,43 @@ func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, err insertId: int64(mc.insertId), }, err } - return nil, err + return nil, mc.markBadConn(err) } // Internal function to execute commands func (mc *mysqlConn) exec(query string) error { // Send command - err := mc.writeCommandPacketStr(comQuery, query) - if err != nil { - return err + if err := mc.writeCommandPacketStr(comQuery, query); err != nil { + return mc.markBadConn(err) } // Read Result resLen, err := mc.readResultSetHeaderPacket() - if err == nil && resLen > 0 { - if err = mc.readUntilEOF(); err != nil { + if err != nil { + return err + } + + if resLen > 0 { + // columns + if err := mc.readUntilEOF(); err != nil { return err } - err = mc.readUntilEOF() + // rows + if err := mc.readUntilEOF(); err != nil { + return err + } } - return err + return mc.discardResults() } func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, error) { - if mc.netConn == nil { + return mc.query(query, args) +} + +func (mc *mysqlConn) query(query string, args []driver.Value) (*textRows, error) { + if mc.closed.IsSet() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } @@ -322,7 +382,6 @@ func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, erro return nil, err } query = prepared - args = nil } // Send command err := mc.writeCommandPacketStr(comQuery, query) @@ -335,15 +394,22 @@ func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, erro rows.mc = mc if resLen == 0 { - // no columns, no more data - return emptyRows{}, nil + rows.rs.done = true + + switch err := rows.NextResultSet(); err { + case nil, io.EOF: + return rows, nil + default: + return nil, err + } } + // Columns - rows.columns, err = mc.readColumns(resLen) + rows.rs.columns, err = mc.readColumns(resLen) return rows, err } } - return nil, err + return nil, mc.markBadConn(err) } // Gets the value of the given MySQL System Variable @@ -359,7 +425,7 @@ func (mc *mysqlConn) getSystemVar(name string) ([]byte, error) { if err == nil { rows := new(textRows) rows.mc = mc - rows.columns = []mysqlField{{fieldType: fieldTypeVarChar}} + rows.rs.columns = []mysqlField{{fieldType: fieldTypeVarChar}} if resLen > 0 { // Columns @@ -375,3 +441,21 @@ func (mc *mysqlConn) getSystemVar(name string) ([]byte, error) { } return nil, err } + +// finish is called when the query has canceled. +func (mc *mysqlConn) cancel(err error) { + mc.canceled.Set(err) + mc.cleanup() +} + +// finish is called when the query has succeeded. +func (mc *mysqlConn) finish() { + if !mc.watching || mc.finished == nil { + return + } + select { + case mc.finished <- struct{}{}: + mc.watching = false + case <-mc.closech: + } +} diff --git a/vendor/github.com/go-sql-driver/mysql/connection_go18.go b/vendor/github.com/go-sql-driver/mysql/connection_go18.go new file mode 100644 index 000000000..62796bfce --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/connection_go18.go @@ -0,0 +1,208 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build go1.8 + +package mysql + +import ( + "context" + "database/sql" + "database/sql/driver" +) + +// Ping implements driver.Pinger interface +func (mc *mysqlConn) Ping(ctx context.Context) (err error) { + if mc.closed.IsSet() { + errLog.Print(ErrInvalidConn) + return driver.ErrBadConn + } + + if err = mc.watchCancel(ctx); err != nil { + return + } + defer mc.finish() + + if err = mc.writeCommandPacket(comPing); err != nil { + return + } + + return mc.readResultOK() +} + +// BeginTx implements driver.ConnBeginTx interface +func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + defer mc.finish() + + if sql.IsolationLevel(opts.Isolation) != sql.LevelDefault { + level, err := mapIsolationLevel(opts.Isolation) + if err != nil { + return nil, err + } + err = mc.exec("SET TRANSACTION ISOLATION LEVEL " + level) + if err != nil { + return nil, err + } + } + + return mc.begin(opts.ReadOnly) +} + +func (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + + rows, err := mc.query(query, dargs) + if err != nil { + mc.finish() + return nil, err + } + rows.finish = mc.finish + return rows, err +} + +func (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + defer mc.finish() + + return mc.Exec(query, dargs) +} + +func (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { + if err := mc.watchCancel(ctx); err != nil { + return nil, err + } + + stmt, err := mc.Prepare(query) + mc.finish() + if err != nil { + return nil, err + } + + select { + default: + case <-ctx.Done(): + stmt.Close() + return nil, ctx.Err() + } + return stmt, nil +} + +func (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := stmt.mc.watchCancel(ctx); err != nil { + return nil, err + } + + rows, err := stmt.query(dargs) + if err != nil { + stmt.mc.finish() + return nil, err + } + rows.finish = stmt.mc.finish + return rows, err +} + +func (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { + dargs, err := namedValueToValue(args) + if err != nil { + return nil, err + } + + if err := stmt.mc.watchCancel(ctx); err != nil { + return nil, err + } + defer stmt.mc.finish() + + return stmt.Exec(dargs) +} + +func (mc *mysqlConn) watchCancel(ctx context.Context) error { + if mc.watching { + // Reach here if canceled, + // so the connection is already invalid + mc.cleanup() + return nil + } + if ctx.Done() == nil { + return nil + } + + mc.watching = true + select { + default: + case <-ctx.Done(): + return ctx.Err() + } + if mc.watcher == nil { + return nil + } + + mc.watcher <- ctx + + return nil +} + +func (mc *mysqlConn) startWatcher() { + watcher := make(chan mysqlContext, 1) + mc.watcher = watcher + finished := make(chan struct{}) + mc.finished = finished + go func() { + for { + var ctx mysqlContext + select { + case ctx = <-watcher: + case <-mc.closech: + return + } + + select { + case <-ctx.Done(): + mc.cancel(ctx.Err()) + case <-finished: + case <-mc.closech: + return + } + } + }() +} + +func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { + nv.Value, err = converter{}.ConvertValue(nv.Value) + return +} + +// ResetSession implements driver.SessionResetter. +// (From Go 1.10) +func (mc *mysqlConn) ResetSession(ctx context.Context) error { + if mc.closed.IsSet() { + return driver.ErrBadConn + } + return nil +} diff --git a/vendor/github.com/go-sql-driver/mysql/const.go b/vendor/github.com/go-sql-driver/mysql/const.go index 88cfff3fd..b1e6b85ef 100644 --- a/vendor/github.com/go-sql-driver/mysql/const.go +++ b/vendor/github.com/go-sql-driver/mysql/const.go @@ -9,7 +9,9 @@ package mysql const ( - minProtocolVersion byte = 10 + defaultAuthPlugin = "mysql_native_password" + defaultMaxAllowedPacket = 4 << 20 // 4 MiB + minProtocolVersion = 10 maxPacketSize = 1<<24 - 1 timeFormat = "2006-01-02 15:04:05.999999" ) @@ -18,10 +20,11 @@ const ( // http://dev.mysql.com/doc/internals/en/client-server-protocol.html const ( - iOK byte = 0x00 - iLocalInFile byte = 0xfb - iEOF byte = 0xfe - iERR byte = 0xff + iOK byte = 0x00 + iAuthMoreData byte = 0x01 + iLocalInFile byte = 0xfb + iEOF byte = 0xfe + iERR byte = 0xff ) // https://dev.mysql.com/doc/internals/en/capability-flags.html#packet-Protocol::CapabilityFlags @@ -87,8 +90,10 @@ const ( ) // https://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnType +type fieldType byte + const ( - fieldTypeDecimal byte = iota + fieldTypeDecimal fieldType = iota fieldTypeTiny fieldTypeShort fieldTypeLong @@ -107,7 +112,7 @@ const ( fieldTypeBit ) const ( - fieldTypeJSON byte = iota + 0xf5 + fieldTypeJSON fieldType = iota + 0xf5 fieldTypeNewDecimal fieldTypeEnum fieldTypeSet @@ -161,3 +166,9 @@ const ( statusInTransReadonly statusSessionStateChanged ) + +const ( + cachingSha2PasswordRequestPublicKey = 2 + cachingSha2PasswordFastAuthSuccess = 3 + cachingSha2PasswordPerformFullAuthentication = 4 +) diff --git a/vendor/github.com/go-sql-driver/mysql/driver.go b/vendor/github.com/go-sql-driver/mysql/driver.go index f5ee4728e..1a75a16ec 100644 --- a/vendor/github.com/go-sql-driver/mysql/driver.go +++ b/vendor/github.com/go-sql-driver/mysql/driver.go @@ -4,7 +4,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. -// Package mysql provides a MySQL driver for Go's database/sql package +// Package mysql provides a MySQL driver for Go's database/sql package. // // The driver should be used via the database/sql package: // @@ -20,8 +20,14 @@ import ( "database/sql" "database/sql/driver" "net" + "sync" ) +// watcher interface is used for context support (From Go 1.8) +type watcher interface { + startWatcher() +} + // MySQLDriver is exported to make the driver directly accessible. // In general the driver is used via the database/sql package. type MySQLDriver struct{} @@ -30,12 +36,17 @@ type MySQLDriver struct{} // Custom dial functions must be registered with RegisterDial type DialFunc func(addr string) (net.Conn, error) -var dials map[string]DialFunc +var ( + dialsLock sync.RWMutex + dials map[string]DialFunc +) // RegisterDial registers a custom dial function. It can then be used by the // network address mynet(addr), where mynet is the registered new network. // addr is passed as a parameter to the dial function. func RegisterDial(net string, dial DialFunc) { + dialsLock.Lock() + defer dialsLock.Unlock() if dials == nil { dials = make(map[string]DialFunc) } @@ -52,16 +63,19 @@ func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { mc := &mysqlConn{ maxAllowedPacket: maxPacketSize, maxWriteSize: maxPacketSize - 1, + closech: make(chan struct{}), } mc.cfg, err = ParseDSN(dsn) if err != nil { return nil, err } mc.parseTime = mc.cfg.ParseTime - mc.strict = mc.cfg.Strict // Connect to Server - if dial, ok := dials[mc.cfg.Net]; ok { + dialsLock.RLock() + dial, ok := dials[mc.cfg.Net] + dialsLock.RUnlock() + if ok { mc.netConn, err = dial(mc.cfg.Addr) } else { nd := net.Dialer{Timeout: mc.cfg.Timeout} @@ -81,6 +95,11 @@ func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { } } + // Call startWatcher for context support (From Go 1.8) + if s, ok := interface{}(mc).(watcher); ok { + s.startWatcher() + } + mc.buf = newBuffer(mc.netConn) // Set I/O timeouts @@ -88,20 +107,31 @@ func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { mc.writeTimeout = mc.cfg.WriteTimeout // Reading Handshake Initialization Packet - cipher, err := mc.readInitPacket() + authData, plugin, err := mc.readHandshakePacket() if err != nil { mc.cleanup() return nil, err } // Send Client Authentication Packet - if err = mc.writeAuthPacket(cipher); err != nil { + authResp, addNUL, err := mc.auth(authData, plugin) + if err != nil { + // try the default auth plugin, if using the requested plugin failed + errLog.Print("could not use requested auth plugin '"+plugin+"': ", err.Error()) + plugin = defaultAuthPlugin + authResp, addNUL, err = mc.auth(authData, plugin) + if err != nil { + mc.cleanup() + return nil, err + } + } + if err = mc.writeHandshakeResponsePacket(authResp, addNUL, plugin); err != nil { mc.cleanup() return nil, err } // Handle response to auth packet, switch methods if possible - if err = handleAuthResult(mc); err != nil { + if err = mc.handleAuthResult(authData, plugin); err != nil { // Authentication failed and MySQL has already closed the connection // (https://dev.mysql.com/doc/internals/en/authentication-fails.html). // Do not send COM_QUIT, just cleanup and return the error. @@ -134,43 +164,6 @@ func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { return mc, nil } -func handleAuthResult(mc *mysqlConn) error { - // Read Result Packet - cipher, err := mc.readResultOK() - if err == nil { - return nil // auth successful - } - - if mc.cfg == nil { - return err // auth failed and retry not possible - } - - // Retry auth if configured to do so. - if mc.cfg.AllowOldPasswords && err == ErrOldPassword { - // Retry with old authentication method. Note: there are edge cases - // where this should work but doesn't; this is currently "wontfix": - // https://github.com/go-sql-driver/mysql/issues/184 - if err = mc.writeOldAuthPacket(cipher); err != nil { - return err - } - _, err = mc.readResultOK() - } else if mc.cfg.AllowCleartextPasswords && err == ErrCleartextPassword { - // Retry with clear text password for - // http://dev.mysql.com/doc/refman/5.7/en/cleartext-authentication-plugin.html - // http://dev.mysql.com/doc/refman/5.7/en/pam-authentication-plugin.html - if err = mc.writeClearAuthPacket(); err != nil { - return err - } - _, err = mc.readResultOK() - } else if mc.cfg.AllowNativePasswords && err == ErrNativePassword { - if err = mc.writeNativeAuthPacket(cipher); err != nil { - return err - } - _, err = mc.readResultOK() - } - return err -} - func init() { sql.Register("mysql", &MySQLDriver{}) } diff --git a/vendor/github.com/go-sql-driver/mysql/dsn.go b/vendor/github.com/go-sql-driver/mysql/dsn.go index ac00dcedd..be014babe 100644 --- a/vendor/github.com/go-sql-driver/mysql/dsn.go +++ b/vendor/github.com/go-sql-driver/mysql/dsn.go @@ -10,11 +10,13 @@ package mysql import ( "bytes" + "crypto/rsa" "crypto/tls" "errors" "fmt" "net" "net/url" + "sort" "strconv" "strings" "time" @@ -27,7 +29,9 @@ var ( errInvalidDSNUnsafeCollation = errors.New("invalid DSN: interpolateParams can not be used with unsafe collations") ) -// Config is a configuration parsed from a DSN string +// Config is a configuration parsed from a DSN string. +// If a new Config is created instead of being parsed from a DSN string, +// the NewConfig function should be used, which sets default values. type Config struct { User string // Username Passwd string // Password (requires User) @@ -38,6 +42,8 @@ type Config struct { Collation string // Connection collation Loc *time.Location // Location for time.Time values MaxAllowedPacket int // Max packet size allowed + ServerPubKey string // Server public key name + pubKey *rsa.PublicKey // Server public key TLSConfig string // TLS configuration name tls *tls.Config // TLS configuration Timeout time.Duration // Dial timeout @@ -53,7 +59,54 @@ type Config struct { InterpolateParams bool // Interpolate placeholders into query string MultiStatements bool // Allow multiple statements in one query ParseTime bool // Parse time values to time.Time - Strict bool // Return warnings as errors + RejectReadOnly bool // Reject read-only connections +} + +// NewConfig creates a new Config and sets default values. +func NewConfig() *Config { + return &Config{ + Collation: defaultCollation, + Loc: time.UTC, + MaxAllowedPacket: defaultMaxAllowedPacket, + AllowNativePasswords: true, + } +} + +func (cfg *Config) normalize() error { + if cfg.InterpolateParams && unsafeCollations[cfg.Collation] { + return errInvalidDSNUnsafeCollation + } + + // Set default network if empty + if cfg.Net == "" { + cfg.Net = "tcp" + } + + // Set default address if empty + if cfg.Addr == "" { + switch cfg.Net { + case "tcp": + cfg.Addr = "127.0.0.1:3306" + case "unix": + cfg.Addr = "/tmp/mysql.sock" + default: + return errors.New("default addr for network '" + cfg.Net + "' unknown") + } + + } else if cfg.Net == "tcp" { + cfg.Addr = ensureHavePort(cfg.Addr) + } + + if cfg.tls != nil { + if cfg.tls.ServerName == "" && !cfg.tls.InsecureSkipVerify { + host, _, err := net.SplitHostPort(cfg.Addr) + if err == nil { + cfg.tls.ServerName = host + } + } + } + + return nil } // FormatDSN formats the given Config into a DSN string which can be passed to @@ -102,12 +155,12 @@ func (cfg *Config) FormatDSN() string { } } - if cfg.AllowNativePasswords { + if !cfg.AllowNativePasswords { if hasParam { - buf.WriteString("&allowNativePasswords=true") + buf.WriteString("&allowNativePasswords=false") } else { hasParam = true - buf.WriteString("?allowNativePasswords=true") + buf.WriteString("?allowNativePasswords=false") } } @@ -195,15 +248,25 @@ func (cfg *Config) FormatDSN() string { buf.WriteString(cfg.ReadTimeout.String()) } - if cfg.Strict { + if cfg.RejectReadOnly { if hasParam { - buf.WriteString("&strict=true") + buf.WriteString("&rejectReadOnly=true") } else { hasParam = true - buf.WriteString("?strict=true") + buf.WriteString("?rejectReadOnly=true") } } + if len(cfg.ServerPubKey) > 0 { + if hasParam { + buf.WriteString("&serverPubKey=") + } else { + hasParam = true + buf.WriteString("?serverPubKey=") + } + buf.WriteString(url.QueryEscape(cfg.ServerPubKey)) + } + if cfg.Timeout > 0 { if hasParam { buf.WriteString("&timeout=") @@ -234,7 +297,7 @@ func (cfg *Config) FormatDSN() string { buf.WriteString(cfg.WriteTimeout.String()) } - if cfg.MaxAllowedPacket > 0 { + if cfg.MaxAllowedPacket != defaultMaxAllowedPacket { if hasParam { buf.WriteString("&maxAllowedPacket=") } else { @@ -247,7 +310,12 @@ func (cfg *Config) FormatDSN() string { // other params if cfg.Params != nil { - for param, value := range cfg.Params { + var params []string + for param := range cfg.Params { + params = append(params, param) + } + sort.Strings(params) + for _, param := range params { if hasParam { buf.WriteByte('&') } else { @@ -257,7 +325,7 @@ func (cfg *Config) FormatDSN() string { buf.WriteString(param) buf.WriteByte('=') - buf.WriteString(url.QueryEscape(value)) + buf.WriteString(url.QueryEscape(cfg.Params[param])) } } @@ -267,10 +335,7 @@ func (cfg *Config) FormatDSN() string { // ParseDSN parses the DSN string to a Config func ParseDSN(dsn string) (cfg *Config, err error) { // New config with some default values - cfg = &Config{ - Loc: time.UTC, - Collation: defaultCollation, - } + cfg = NewConfig() // [user[:password]@][net[(addr)]]/dbname[?param1=value1¶mN=valueN] // Find the last '/' (since the password or the net addr might contain a '/') @@ -338,28 +403,9 @@ func ParseDSN(dsn string) (cfg *Config, err error) { return nil, errInvalidDSNNoSlash } - if cfg.InterpolateParams && unsafeCollations[cfg.Collation] { - return nil, errInvalidDSNUnsafeCollation + if err = cfg.normalize(); err != nil { + return nil, err } - - // Set default network if empty - if cfg.Net == "" { - cfg.Net = "tcp" - } - - // Set default address if empty - if cfg.Addr == "" { - switch cfg.Net { - case "tcp": - cfg.Addr = "127.0.0.1:3306" - case "unix": - cfg.Addr = "/tmp/mysql.sock" - default: - return nil, errors.New("default addr for network '" + cfg.Net + "' unknown") - } - - } - return } @@ -374,7 +420,6 @@ func parseDSNParams(cfg *Config, params string) (err error) { // cfg params switch value := param[1]; param[0] { - // Disable INFILE whitelist / enable all files case "allowAllFiles": var isBool bool @@ -472,14 +517,32 @@ func parseDSNParams(cfg *Config, params string) (err error) { return } - // Strict mode - case "strict": + // Reject read-only connections + case "rejectReadOnly": var isBool bool - cfg.Strict, isBool = readBool(value) + cfg.RejectReadOnly, isBool = readBool(value) if !isBool { return errors.New("invalid bool value: " + value) } + // Server public key + case "serverPubKey": + name, err := url.QueryUnescape(value) + if err != nil { + return fmt.Errorf("invalid value for server pub key name: %v", err) + } + + if pubKey := getServerPubKey(name); pubKey != nil { + cfg.ServerPubKey = name + cfg.pubKey = pubKey + } else { + return errors.New("invalid value / unknown server pub key name: " + name) + } + + // Strict mode + case "strict": + panic("strict mode has been removed. See https://github.com/go-sql-driver/mysql/wiki/strict-mode") + // Dial Timeout case "timeout": cfg.Timeout, err = time.ParseDuration(value) @@ -506,14 +569,7 @@ func parseDSNParams(cfg *Config, params string) (err error) { return fmt.Errorf("invalid value for TLS config name: %v", err) } - if tlsConfig, ok := tlsConfigRegister[name]; ok { - if len(tlsConfig.ServerName) == 0 && !tlsConfig.InsecureSkipVerify { - host, _, err := net.SplitHostPort(cfg.Addr) - if err == nil { - tlsConfig.ServerName = host - } - } - + if tlsConfig := getTLSConfigClone(name); tlsConfig != nil { cfg.TLSConfig = name cfg.tls = tlsConfig } else { @@ -546,3 +602,10 @@ func parseDSNParams(cfg *Config, params string) (err error) { return } + +func ensureHavePort(addr string) string { + if _, _, err := net.SplitHostPort(addr); err != nil { + return net.JoinHostPort(addr, "3306") + } + return addr +} diff --git a/vendor/github.com/go-sql-driver/mysql/errors.go b/vendor/github.com/go-sql-driver/mysql/errors.go index 857854e14..760782ff2 100644 --- a/vendor/github.com/go-sql-driver/mysql/errors.go +++ b/vendor/github.com/go-sql-driver/mysql/errors.go @@ -9,10 +9,8 @@ package mysql import ( - "database/sql/driver" "errors" "fmt" - "io" "log" "os" ) @@ -31,6 +29,12 @@ var ( ErrPktSyncMul = errors.New("commands out of sync. Did you run multiple statements at once?") ErrPktTooLarge = errors.New("packet for query is too large. Try adjusting the 'max_allowed_packet' variable on the server") ErrBusyBuffer = errors.New("busy buffer") + + // errBadConnNoWrite is used for connection errors where nothing was sent to the database yet. + // If this happens first in a function starting a database interaction, it should be replaced by driver.ErrBadConn + // to trigger a resend. + // See https://github.com/go-sql-driver/mysql/pull/302 + errBadConnNoWrite = errors.New("bad connection") ) var errLog = Logger(log.New(os.Stderr, "[mysql] ", log.Ldate|log.Ltime|log.Lshortfile)) @@ -59,74 +63,3 @@ type MySQLError struct { func (me *MySQLError) Error() string { return fmt.Sprintf("Error %d: %s", me.Number, me.Message) } - -// MySQLWarnings is an error type which represents a group of one or more MySQL -// warnings -type MySQLWarnings []MySQLWarning - -func (mws MySQLWarnings) Error() string { - var msg string - for i, warning := range mws { - if i > 0 { - msg += "\r\n" - } - msg += fmt.Sprintf( - "%s %s: %s", - warning.Level, - warning.Code, - warning.Message, - ) - } - return msg -} - -// MySQLWarning is an error type which represents a single MySQL warning. -// Warnings are returned in groups only. See MySQLWarnings -type MySQLWarning struct { - Level string - Code string - Message string -} - -func (mc *mysqlConn) getWarnings() (err error) { - rows, err := mc.Query("SHOW WARNINGS", nil) - if err != nil { - return - } - - var warnings = MySQLWarnings{} - var values = make([]driver.Value, 3) - - for { - err = rows.Next(values) - switch err { - case nil: - warning := MySQLWarning{} - - if raw, ok := values[0].([]byte); ok { - warning.Level = string(raw) - } else { - warning.Level = fmt.Sprintf("%s", values[0]) - } - if raw, ok := values[1].([]byte); ok { - warning.Code = string(raw) - } else { - warning.Code = fmt.Sprintf("%s", values[1]) - } - if raw, ok := values[2].([]byte); ok { - warning.Message = string(raw) - } else { - warning.Message = fmt.Sprintf("%s", values[0]) - } - - warnings = append(warnings, warning) - - case io.EOF: - return warnings - - default: - rows.Close() - return - } - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/fields.go b/vendor/github.com/go-sql-driver/mysql/fields.go new file mode 100644 index 000000000..e1e2ece4b --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/fields.go @@ -0,0 +1,194 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +package mysql + +import ( + "database/sql" + "reflect" +) + +func (mf *mysqlField) typeDatabaseName() string { + switch mf.fieldType { + case fieldTypeBit: + return "BIT" + case fieldTypeBLOB: + if mf.charSet != collations[binaryCollation] { + return "TEXT" + } + return "BLOB" + case fieldTypeDate: + return "DATE" + case fieldTypeDateTime: + return "DATETIME" + case fieldTypeDecimal: + return "DECIMAL" + case fieldTypeDouble: + return "DOUBLE" + case fieldTypeEnum: + return "ENUM" + case fieldTypeFloat: + return "FLOAT" + case fieldTypeGeometry: + return "GEOMETRY" + case fieldTypeInt24: + return "MEDIUMINT" + case fieldTypeJSON: + return "JSON" + case fieldTypeLong: + return "INT" + case fieldTypeLongBLOB: + if mf.charSet != collations[binaryCollation] { + return "LONGTEXT" + } + return "LONGBLOB" + case fieldTypeLongLong: + return "BIGINT" + case fieldTypeMediumBLOB: + if mf.charSet != collations[binaryCollation] { + return "MEDIUMTEXT" + } + return "MEDIUMBLOB" + case fieldTypeNewDate: + return "DATE" + case fieldTypeNewDecimal: + return "DECIMAL" + case fieldTypeNULL: + return "NULL" + case fieldTypeSet: + return "SET" + case fieldTypeShort: + return "SMALLINT" + case fieldTypeString: + if mf.charSet == collations[binaryCollation] { + return "BINARY" + } + return "CHAR" + case fieldTypeTime: + return "TIME" + case fieldTypeTimestamp: + return "TIMESTAMP" + case fieldTypeTiny: + return "TINYINT" + case fieldTypeTinyBLOB: + if mf.charSet != collations[binaryCollation] { + return "TINYTEXT" + } + return "TINYBLOB" + case fieldTypeVarChar: + if mf.charSet == collations[binaryCollation] { + return "VARBINARY" + } + return "VARCHAR" + case fieldTypeVarString: + if mf.charSet == collations[binaryCollation] { + return "VARBINARY" + } + return "VARCHAR" + case fieldTypeYear: + return "YEAR" + default: + return "" + } +} + +var ( + scanTypeFloat32 = reflect.TypeOf(float32(0)) + scanTypeFloat64 = reflect.TypeOf(float64(0)) + scanTypeInt8 = reflect.TypeOf(int8(0)) + scanTypeInt16 = reflect.TypeOf(int16(0)) + scanTypeInt32 = reflect.TypeOf(int32(0)) + scanTypeInt64 = reflect.TypeOf(int64(0)) + scanTypeNullFloat = reflect.TypeOf(sql.NullFloat64{}) + scanTypeNullInt = reflect.TypeOf(sql.NullInt64{}) + scanTypeNullTime = reflect.TypeOf(NullTime{}) + scanTypeUint8 = reflect.TypeOf(uint8(0)) + scanTypeUint16 = reflect.TypeOf(uint16(0)) + scanTypeUint32 = reflect.TypeOf(uint32(0)) + scanTypeUint64 = reflect.TypeOf(uint64(0)) + scanTypeRawBytes = reflect.TypeOf(sql.RawBytes{}) + scanTypeUnknown = reflect.TypeOf(new(interface{})) +) + +type mysqlField struct { + tableName string + name string + length uint32 + flags fieldFlag + fieldType fieldType + decimals byte + charSet uint8 +} + +func (mf *mysqlField) scanType() reflect.Type { + switch mf.fieldType { + case fieldTypeTiny: + if mf.flags&flagNotNULL != 0 { + if mf.flags&flagUnsigned != 0 { + return scanTypeUint8 + } + return scanTypeInt8 + } + return scanTypeNullInt + + case fieldTypeShort, fieldTypeYear: + if mf.flags&flagNotNULL != 0 { + if mf.flags&flagUnsigned != 0 { + return scanTypeUint16 + } + return scanTypeInt16 + } + return scanTypeNullInt + + case fieldTypeInt24, fieldTypeLong: + if mf.flags&flagNotNULL != 0 { + if mf.flags&flagUnsigned != 0 { + return scanTypeUint32 + } + return scanTypeInt32 + } + return scanTypeNullInt + + case fieldTypeLongLong: + if mf.flags&flagNotNULL != 0 { + if mf.flags&flagUnsigned != 0 { + return scanTypeUint64 + } + return scanTypeInt64 + } + return scanTypeNullInt + + case fieldTypeFloat: + if mf.flags&flagNotNULL != 0 { + return scanTypeFloat32 + } + return scanTypeNullFloat + + case fieldTypeDouble: + if mf.flags&flagNotNULL != 0 { + return scanTypeFloat64 + } + return scanTypeNullFloat + + case fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar, + fieldTypeBit, fieldTypeEnum, fieldTypeSet, fieldTypeTinyBLOB, + fieldTypeMediumBLOB, fieldTypeLongBLOB, fieldTypeBLOB, + fieldTypeVarString, fieldTypeString, fieldTypeGeometry, fieldTypeJSON, + fieldTypeTime: + return scanTypeRawBytes + + case fieldTypeDate, fieldTypeNewDate, + fieldTypeTimestamp, fieldTypeDateTime: + // NullTime is always returned for more consistent behavior as it can + // handle both cases of parseTime regardless if the field is nullable. + return scanTypeNullTime + + default: + return scanTypeUnknown + } +} diff --git a/vendor/github.com/go-sql-driver/mysql/infile.go b/vendor/github.com/go-sql-driver/mysql/infile.go index 547357cfa..273cb0ba5 100644 --- a/vendor/github.com/go-sql-driver/mysql/infile.go +++ b/vendor/github.com/go-sql-driver/mysql/infile.go @@ -147,7 +147,8 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) { } // send content packets - if err == nil { + // if packetSize == 0, the Reader contains no data + if err == nil && packetSize > 0 { data := make([]byte, 4+packetSize) var n int for err == nil { @@ -173,8 +174,7 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) { // read OK packet if err == nil { - _, err = mc.readResultOK() - return err + return mc.readResultOK() } mc.readPacket() diff --git a/vendor/github.com/go-sql-driver/mysql/packets.go b/vendor/github.com/go-sql-driver/mysql/packets.go index 9160beb09..d873a97b2 100644 --- a/vendor/github.com/go-sql-driver/mysql/packets.go +++ b/vendor/github.com/go-sql-driver/mysql/packets.go @@ -25,26 +25,23 @@ import ( // Read packet to buffer 'data' func (mc *mysqlConn) readPacket() ([]byte, error) { - var payload []byte + var prevData []byte for { - // Read packet header + // read packet header data, err := mc.buf.readNext(4) if err != nil { + if cerr := mc.canceled.Value(); cerr != nil { + return nil, cerr + } errLog.Print(err) mc.Close() - return nil, driver.ErrBadConn + return nil, ErrInvalidConn } - // Packet Length [24 bit] + // packet length [24 bit] pktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16) - if pktLen < 1 { - errLog.Print(ErrMalformPkt) - mc.Close() - return nil, driver.ErrBadConn - } - - // Check Packet Sync [8 bit] + // check packet sync [8 bit] if data[3] != mc.sequence { if data[3] > mc.sequence { return nil, ErrPktSyncMul @@ -53,26 +50,41 @@ func (mc *mysqlConn) readPacket() ([]byte, error) { } mc.sequence++ - // Read packet body [pktLen bytes] + // packets with length 0 terminate a previous packet which is a + // multiple of (2^24)−1 bytes long + if pktLen == 0 { + // there was no previous packet + if prevData == nil { + errLog.Print(ErrMalformPkt) + mc.Close() + return nil, ErrInvalidConn + } + + return prevData, nil + } + + // read packet body [pktLen bytes] data, err = mc.buf.readNext(pktLen) if err != nil { + if cerr := mc.canceled.Value(); cerr != nil { + return nil, cerr + } errLog.Print(err) mc.Close() - return nil, driver.ErrBadConn + return nil, ErrInvalidConn } - isLastPacket := (pktLen < maxPacketSize) + // return data if this was the last packet + if pktLen < maxPacketSize { + // zero allocations for non-split packets + if prevData == nil { + return data, nil + } - // Zero allocations for non-splitting packets - if isLastPacket && payload == nil { - return data, nil + return append(prevData, data...), nil } - payload = append(payload, data...) - - if isLastPacket { - return payload, nil - } + prevData = append(prevData, data...) } } @@ -119,33 +131,47 @@ func (mc *mysqlConn) writePacket(data []byte) error { // Handle error if err == nil { // n != len(data) + mc.cleanup() errLog.Print(ErrMalformPkt) } else { + if cerr := mc.canceled.Value(); cerr != nil { + return cerr + } + if n == 0 && pktLen == len(data)-4 { + // only for the first loop iteration when nothing was written yet + return errBadConnNoWrite + } + mc.cleanup() errLog.Print(err) } - return driver.ErrBadConn + return ErrInvalidConn } } /****************************************************************************** -* Initialisation Process * +* Initialization Process * ******************************************************************************/ // Handshake Initialization Packet // http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake -func (mc *mysqlConn) readInitPacket() ([]byte, error) { +func (mc *mysqlConn) readHandshakePacket() ([]byte, string, error) { data, err := mc.readPacket() if err != nil { - return nil, err + // for init we can rewrite this to ErrBadConn for sql.Driver to retry, since + // in connection initialization we don't risk retrying non-idempotent actions. + if err == ErrInvalidConn { + return nil, "", driver.ErrBadConn + } + return nil, "", err } if data[0] == iERR { - return nil, mc.handleErrorPacket(data) + return nil, "", mc.handleErrorPacket(data) } // protocol version [1 byte] if data[0] < minProtocolVersion { - return nil, fmt.Errorf( + return nil, "", fmt.Errorf( "unsupported protocol version %d. Version %d or higher is required", data[0], minProtocolVersion, @@ -157,7 +183,7 @@ func (mc *mysqlConn) readInitPacket() ([]byte, error) { pos := 1 + bytes.IndexByte(data[1:], 0x00) + 1 + 4 // first part of the password cipher [8 bytes] - cipher := data[pos : pos+8] + authData := data[pos : pos+8] // (filler) always 0x00 [1 byte] pos += 8 + 1 @@ -165,13 +191,14 @@ func (mc *mysqlConn) readInitPacket() ([]byte, error) { // capability flags (lower 2 bytes) [2 bytes] mc.flags = clientFlag(binary.LittleEndian.Uint16(data[pos : pos+2])) if mc.flags&clientProtocol41 == 0 { - return nil, ErrOldProtocol + return nil, "", ErrOldProtocol } if mc.flags&clientSSL == 0 && mc.cfg.tls != nil { - return nil, ErrNoTLS + return nil, "", ErrNoTLS } pos += 2 + plugin := "" if len(data) > pos { // character set [1 byte] // status flags [2 bytes] @@ -192,32 +219,34 @@ func (mc *mysqlConn) readInitPacket() ([]byte, error) { // // The official Python library uses the fixed length 12 // which seems to work but technically could have a hidden bug. - cipher = append(cipher, data[pos:pos+12]...) + authData = append(authData, data[pos:pos+12]...) + pos += 13 - // TODO: Verify string termination // EOF if version (>= 5.5.7 and < 5.5.10) or (>= 5.6.0 and < 5.6.2) // \NUL otherwise - // - //if data[len(data)-1] == 0 { - // return - //} - //return ErrMalformPkt + if end := bytes.IndexByte(data[pos:], 0x00); end != -1 { + plugin = string(data[pos : pos+end]) + } else { + plugin = string(data[pos:]) + } // make a memory safe copy of the cipher slice var b [20]byte - copy(b[:], cipher) - return b[:], nil + copy(b[:], authData) + return b[:], plugin, nil } + plugin = defaultAuthPlugin + // make a memory safe copy of the cipher slice var b [8]byte - copy(b[:], cipher) - return b[:], nil + copy(b[:], authData) + return b[:], plugin, nil } // Client Authentication Packet // http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse -func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { +func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, addNUL bool, plugin string) error { // Adjust client flags based on server support clientFlags := clientProtocol41 | clientSecureConn | @@ -241,10 +270,19 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { clientFlags |= clientMultiStatements } - // User Password - scrambleBuff := scramblePassword(cipher, []byte(mc.cfg.Passwd)) + // encode length of the auth plugin data + var authRespLEIBuf [9]byte + authRespLEI := appendLengthEncodedInteger(authRespLEIBuf[:0], uint64(len(authResp))) + if len(authRespLEI) > 1 { + // if the length can not be written in 1 byte, it must be written as a + // length encoded integer + clientFlags |= clientPluginAuthLenEncClientData + } - pktLen := 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 + 1 + len(scrambleBuff) + 21 + 1 + pktLen := 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 + len(authRespLEI) + len(authResp) + 21 + 1 + if addNUL { + pktLen++ + } // To specify a db name if n := len(mc.cfg.DBName); n > 0 { @@ -255,9 +293,9 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { // Calculate packet length and get buffer with that size data := mc.buf.takeSmallBuffer(pktLen + 4) if data == nil { - // can not take the buffer. Something must be wrong with the connection + // cannot take the buffer. Something must be wrong with the connection errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn + return errBadConnNoWrite } // ClientFlags [32 bit] @@ -312,9 +350,13 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { data[pos] = 0x00 pos++ - // ScrambleBuffer [length encoded integer] - data[pos] = byte(len(scrambleBuff)) - pos += 1 + copy(data[pos+1:], scrambleBuff) + // Auth Data [length encoded integer] + pos += copy(data[pos:], authRespLEI) + pos += copy(data[pos:], authResp) + if addNUL { + data[pos] = 0x00 + pos++ + } // Databasename [null terminated string] if len(mc.cfg.DBName) > 0 { @@ -323,72 +365,32 @@ func (mc *mysqlConn) writeAuthPacket(cipher []byte) error { pos++ } - // Assume native client during response - pos += copy(data[pos:], "mysql_native_password") + pos += copy(data[pos:], plugin) data[pos] = 0x00 // Send Auth packet return mc.writePacket(data) } -// Client old authentication packet // http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse -func (mc *mysqlConn) writeOldAuthPacket(cipher []byte) error { - // User password - scrambleBuff := scrambleOldPassword(cipher, []byte(mc.cfg.Passwd)) - - // Calculate the packet length and add a tailing 0 - pktLen := len(scrambleBuff) + 1 - data := mc.buf.takeSmallBuffer(4 + pktLen) +func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte, addNUL bool) error { + pktLen := 4 + len(authData) + if addNUL { + pktLen++ + } + data := mc.buf.takeSmallBuffer(pktLen) if data == nil { - // can not take the buffer. Something must be wrong with the connection + // cannot take the buffer. Something must be wrong with the connection errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn + return errBadConnNoWrite } - // Add the scrambled password [null terminated string] - copy(data[4:], scrambleBuff) - data[4+pktLen-1] = 0x00 - - return mc.writePacket(data) -} - -// Client clear text authentication packet -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse -func (mc *mysqlConn) writeClearAuthPacket() error { - // Calculate the packet length and add a tailing 0 - pktLen := len(mc.cfg.Passwd) + 1 - data := mc.buf.takeSmallBuffer(4 + pktLen) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn + // Add the auth data [EOF] + copy(data[4:], authData) + if addNUL { + data[pktLen-1] = 0x00 } - // Add the clear password [null terminated string] - copy(data[4:], mc.cfg.Passwd) - data[4+pktLen-1] = 0x00 - - return mc.writePacket(data) -} - -// Native password authentication method -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse -func (mc *mysqlConn) writeNativeAuthPacket(cipher []byte) error { - scrambleBuff := scramblePassword(cipher, []byte(mc.cfg.Passwd)) - - // Calculate the packet length and add a tailing 0 - pktLen := len(scrambleBuff) - data := mc.buf.takeSmallBuffer(4 + pktLen) - if data == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn - } - - // Add the scramble - copy(data[4:], scrambleBuff) - return mc.writePacket(data) } @@ -402,9 +404,9 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error { data := mc.buf.takeSmallBuffer(4 + 1) if data == nil { - // can not take the buffer. Something must be wrong with the connection + // cannot take the buffer. Something must be wrong with the connection errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn + return errBadConnNoWrite } // Add command byte @@ -421,9 +423,9 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error { pktLen := 1 + len(arg) data := mc.buf.takeBuffer(pktLen + 4) if data == nil { - // can not take the buffer. Something must be wrong with the connection + // cannot take the buffer. Something must be wrong with the connection errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn + return errBadConnNoWrite } // Add command byte @@ -442,9 +444,9 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error { data := mc.buf.takeSmallBuffer(4 + 1 + 4) if data == nil { - // can not take the buffer. Something must be wrong with the connection + // cannot take the buffer. Something must be wrong with the connection errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn + return errBadConnNoWrite } // Add command byte @@ -464,43 +466,50 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error { * Result Packets * ******************************************************************************/ -// Returns error if Packet is not an 'Result OK'-Packet -func (mc *mysqlConn) readResultOK() ([]byte, error) { +func (mc *mysqlConn) readAuthResult() ([]byte, string, error) { data, err := mc.readPacket() - if err == nil { - // packet indicator - switch data[0] { - - case iOK: - return nil, mc.handleOkPacket(data) - - case iEOF: - if len(data) > 1 { - pluginEndIndex := bytes.IndexByte(data, 0x00) - plugin := string(data[1:pluginEndIndex]) - cipher := data[pluginEndIndex+1 : len(data)-1] - - if plugin == "mysql_old_password" { - // using old_passwords - return cipher, ErrOldPassword - } else if plugin == "mysql_clear_password" { - // using clear text password - return cipher, ErrCleartextPassword - } else if plugin == "mysql_native_password" { - // using mysql default authentication method - return cipher, ErrNativePassword - } else { - return cipher, ErrUnknownPlugin - } - } else { - return nil, ErrOldPassword - } - - default: // Error otherwise - return nil, mc.handleErrorPacket(data) - } + if err != nil { + return nil, "", err } - return nil, err + + // packet indicator + switch data[0] { + + case iOK: + return nil, "", mc.handleOkPacket(data) + + case iAuthMoreData: + return data[1:], "", err + + case iEOF: + if len(data) < 1 { + // https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::OldAuthSwitchRequest + return nil, "mysql_old_password", nil + } + pluginEndIndex := bytes.IndexByte(data, 0x00) + if pluginEndIndex < 0 { + return nil, "", ErrMalformPkt + } + plugin := string(data[1:pluginEndIndex]) + authData := data[pluginEndIndex+1:] + return authData, plugin, nil + + default: // Error otherwise + return nil, "", mc.handleErrorPacket(data) + } +} + +// Returns error if Packet is not an 'Result OK'-Packet +func (mc *mysqlConn) readResultOK() error { + data, err := mc.readPacket() + if err != nil { + return err + } + + if data[0] == iOK { + return mc.handleOkPacket(data) + } + return mc.handleErrorPacket(data) } // Result Set Header Packet @@ -543,6 +552,22 @@ func (mc *mysqlConn) handleErrorPacket(data []byte) error { // Error Number [16 bit uint] errno := binary.LittleEndian.Uint16(data[1:3]) + // 1792: ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION + // 1290: ER_OPTION_PREVENTS_STATEMENT (returned by Aurora during failover) + if (errno == 1792 || errno == 1290) && mc.cfg.RejectReadOnly { + // Oops; we are connected to a read-only connection, and won't be able + // to issue any write statements. Since RejectReadOnly is configured, + // we throw away this connection hoping this one would have write + // permission. This is specifically for a possible race condition + // during failover (e.g. on AWS Aurora). See README.md for more. + // + // We explicitly close the connection before returning + // driver.ErrBadConn to ensure that `database/sql` purges this + // connection and initiates a new one for next statement next time. + mc.Close() + return driver.ErrBadConn + } + pos := 3 // SQL State [optional: # + 5bytes string] @@ -577,19 +602,12 @@ func (mc *mysqlConn) handleOkPacket(data []byte) error { // server_status [2 bytes] mc.status = readStatus(data[1+n+m : 1+n+m+2]) - if err := mc.discardResults(); err != nil { - return err - } - - // warning count [2 bytes] - if !mc.strict { + if mc.status&statusMoreResultsExists != 0 { return nil } - pos := 1 + n + m + 2 - if binary.LittleEndian.Uint16(data[pos:pos+2]) > 0 { - return mc.getWarnings() - } + // warning count [2 bytes] + return nil } @@ -661,14 +679,21 @@ func (mc *mysqlConn) readColumns(count int) ([]mysqlField, error) { if err != nil { return nil, err } + pos += n // Filler [uint8] + pos++ + // Charset [charset, collation uint8] + columns[i].charSet = data[pos] + pos += 2 + // Length [uint32] - pos += n + 1 + 2 + 4 + columns[i].length = binary.LittleEndian.Uint32(data[pos : pos+4]) + pos += 4 // Field type [uint8] - columns[i].fieldType = data[pos] + columns[i].fieldType = fieldType(data[pos]) pos++ // Flags [uint16] @@ -691,6 +716,10 @@ func (mc *mysqlConn) readColumns(count int) ([]mysqlField, error) { func (rows *textRows) readRow(dest []driver.Value) error { mc := rows.mc + if rows.rs.done { + return io.EOF + } + data, err := mc.readPacket() if err != nil { return err @@ -700,10 +729,10 @@ func (rows *textRows) readRow(dest []driver.Value) error { if data[0] == iEOF && len(data) == 5 { // server_status [2 bytes] rows.mc.status = readStatus(data[3:]) - if err := rows.mc.discardResults(); err != nil { - return err + rows.rs.done = true + if !rows.HasNextResultSet() { + rows.mc = nil } - rows.mc = nil return io.EOF } if data[0] == iERR { @@ -725,7 +754,7 @@ func (rows *textRows) readRow(dest []driver.Value) error { if !mc.parseTime { continue } else { - switch rows.columns[i].fieldType { + switch rows.rs.columns[i].fieldType { case fieldTypeTimestamp, fieldTypeDateTime, fieldTypeDate, fieldTypeNewDate: dest[i], err = parseDateTime( @@ -797,14 +826,7 @@ func (stmt *mysqlStmt) readPrepareResultPacket() (uint16, error) { // Reserved [8 bit] // Warning count [16 bit uint] - if !stmt.mc.strict { - return columnCount, nil - } - // Check for warnings count > 0, only available in MySQL > 4.1 - if len(data) >= 12 && binary.LittleEndian.Uint16(data[10:12]) > 0 { - return columnCount, stmt.mc.getWarnings() - } return columnCount, nil } return 0, err @@ -821,7 +843,7 @@ func (stmt *mysqlStmt) writeCommandLongData(paramID int, arg []byte) error { // 2 bytes paramID const dataOffset = 1 + 4 + 2 - // Can not use the write buffer since + // Cannot use the write buffer since // a) the buffer is too small // b) it is in use data := make([]byte, 4+1+4+2+len(arg)) @@ -876,6 +898,12 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { const minPktLen = 4 + 1 + 4 + 1 + 4 mc := stmt.mc + // Determine threshould dynamically to avoid packet size shortage. + longDataSize := mc.maxAllowedPacket / (stmt.paramCount + 1) + if longDataSize < 64 { + longDataSize = 64 + } + // Reset packet-sequence mc.sequence = 0 @@ -887,9 +915,9 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { data = mc.buf.takeCompleteBuffer() } if data == nil { - // can not take the buffer. Something must be wrong with the connection + // cannot take the buffer. Something must be wrong with the connection errLog.Print(ErrBusyBuffer) - return driver.ErrBadConn + return errBadConnNoWrite } // command [1 byte] @@ -948,7 +976,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { // build NULL-bitmap if arg == nil { nullMask[i/8] |= 1 << (uint(i) & 7) - paramTypes[i+i] = fieldTypeNULL + paramTypes[i+i] = byte(fieldTypeNULL) paramTypes[i+i+1] = 0x00 continue } @@ -956,7 +984,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { // cache types and values switch v := arg.(type) { case int64: - paramTypes[i+i] = fieldTypeLongLong + paramTypes[i+i] = byte(fieldTypeLongLong) paramTypes[i+i+1] = 0x00 if cap(paramValues)-len(paramValues)-8 >= 0 { @@ -972,7 +1000,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { } case float64: - paramTypes[i+i] = fieldTypeDouble + paramTypes[i+i] = byte(fieldTypeDouble) paramTypes[i+i+1] = 0x00 if cap(paramValues)-len(paramValues)-8 >= 0 { @@ -988,7 +1016,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { } case bool: - paramTypes[i+i] = fieldTypeTiny + paramTypes[i+i] = byte(fieldTypeTiny) paramTypes[i+i+1] = 0x00 if v { @@ -1000,10 +1028,10 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { case []byte: // Common case (non-nil value) first if v != nil { - paramTypes[i+i] = fieldTypeString + paramTypes[i+i] = byte(fieldTypeString) paramTypes[i+i+1] = 0x00 - if len(v) < mc.maxAllowedPacket-pos-len(paramValues)-(len(args)-(i+1))*64 { + if len(v) < longDataSize { paramValues = appendLengthEncodedInteger(paramValues, uint64(len(v)), ) @@ -1018,14 +1046,14 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { // Handle []byte(nil) as a NULL value nullMask[i/8] |= 1 << (uint(i) & 7) - paramTypes[i+i] = fieldTypeNULL + paramTypes[i+i] = byte(fieldTypeNULL) paramTypes[i+i+1] = 0x00 case string: - paramTypes[i+i] = fieldTypeString + paramTypes[i+i] = byte(fieldTypeString) paramTypes[i+i+1] = 0x00 - if len(v) < mc.maxAllowedPacket-pos-len(paramValues)-(len(args)-(i+1))*64 { + if len(v) < longDataSize { paramValues = appendLengthEncodedInteger(paramValues, uint64(len(v)), ) @@ -1037,23 +1065,25 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { } case time.Time: - paramTypes[i+i] = fieldTypeString + paramTypes[i+i] = byte(fieldTypeString) paramTypes[i+i+1] = 0x00 - var val []byte + var a [64]byte + var b = a[:0] + if v.IsZero() { - val = []byte("0000-00-00") + b = append(b, "0000-00-00"...) } else { - val = []byte(v.In(mc.cfg.Loc).Format(timeFormat)) + b = v.In(mc.cfg.Loc).AppendFormat(b, timeFormat) } paramValues = appendLengthEncodedInteger(paramValues, - uint64(len(val)), + uint64(len(b)), ) - paramValues = append(paramValues, val...) + paramValues = append(paramValues, b...) default: - return fmt.Errorf("can not convert type: %T", arg) + return fmt.Errorf("cannot convert type: %T", arg) } } @@ -1086,8 +1116,6 @@ func (mc *mysqlConn) discardResults() error { if err := mc.readUntilEOF(); err != nil { return err } - } else { - mc.status &^= statusMoreResultsExists } } return nil @@ -1105,16 +1133,17 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { // EOF Packet if data[0] == iEOF && len(data) == 5 { rows.mc.status = readStatus(data[3:]) - if err := rows.mc.discardResults(); err != nil { - return err + rows.rs.done = true + if !rows.HasNextResultSet() { + rows.mc = nil } - rows.mc = nil return io.EOF } + mc := rows.mc rows.mc = nil // Error otherwise - return rows.mc.handleErrorPacket(data) + return mc.handleErrorPacket(data) } // NULL-bitmap, [(column-count + 7 + 2) / 8 bytes] @@ -1130,14 +1159,14 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { } // Convert to byte-coded string - switch rows.columns[i].fieldType { + switch rows.rs.columns[i].fieldType { case fieldTypeNULL: dest[i] = nil continue // Numeric Types case fieldTypeTiny: - if rows.columns[i].flags&flagUnsigned != 0 { + if rows.rs.columns[i].flags&flagUnsigned != 0 { dest[i] = int64(data[pos]) } else { dest[i] = int64(int8(data[pos])) @@ -1146,7 +1175,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { continue case fieldTypeShort, fieldTypeYear: - if rows.columns[i].flags&flagUnsigned != 0 { + if rows.rs.columns[i].flags&flagUnsigned != 0 { dest[i] = int64(binary.LittleEndian.Uint16(data[pos : pos+2])) } else { dest[i] = int64(int16(binary.LittleEndian.Uint16(data[pos : pos+2]))) @@ -1155,7 +1184,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { continue case fieldTypeInt24, fieldTypeLong: - if rows.columns[i].flags&flagUnsigned != 0 { + if rows.rs.columns[i].flags&flagUnsigned != 0 { dest[i] = int64(binary.LittleEndian.Uint32(data[pos : pos+4])) } else { dest[i] = int64(int32(binary.LittleEndian.Uint32(data[pos : pos+4]))) @@ -1164,7 +1193,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { continue case fieldTypeLongLong: - if rows.columns[i].flags&flagUnsigned != 0 { + if rows.rs.columns[i].flags&flagUnsigned != 0 { val := binary.LittleEndian.Uint64(data[pos : pos+8]) if val > math.MaxInt64 { dest[i] = uint64ToString(val) @@ -1178,7 +1207,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { continue case fieldTypeFloat: - dest[i] = float32(math.Float32frombits(binary.LittleEndian.Uint32(data[pos : pos+4]))) + dest[i] = math.Float32frombits(binary.LittleEndian.Uint32(data[pos : pos+4])) pos += 4 continue @@ -1218,10 +1247,10 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { case isNull: dest[i] = nil continue - case rows.columns[i].fieldType == fieldTypeTime: + case rows.rs.columns[i].fieldType == fieldTypeTime: // database/sql does not support an equivalent to TIME, return a string var dstlen uint8 - switch decimals := rows.columns[i].decimals; decimals { + switch decimals := rows.rs.columns[i].decimals; decimals { case 0x00, 0x1f: dstlen = 8 case 1, 2, 3, 4, 5, 6: @@ -1229,7 +1258,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { default: return fmt.Errorf( "protocol error, illegal decimals value %d", - rows.columns[i].decimals, + rows.rs.columns[i].decimals, ) } dest[i], err = formatBinaryDateTime(data[pos:pos+int(num)], dstlen, true) @@ -1237,10 +1266,10 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { dest[i], err = parseBinaryDateTime(num, data[pos:], rows.mc.cfg.Loc) default: var dstlen uint8 - if rows.columns[i].fieldType == fieldTypeDate { + if rows.rs.columns[i].fieldType == fieldTypeDate { dstlen = 10 } else { - switch decimals := rows.columns[i].decimals; decimals { + switch decimals := rows.rs.columns[i].decimals; decimals { case 0x00, 0x1f: dstlen = 19 case 1, 2, 3, 4, 5, 6: @@ -1248,7 +1277,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { default: return fmt.Errorf( "protocol error, illegal decimals value %d", - rows.columns[i].decimals, + rows.rs.columns[i].decimals, ) } } @@ -1264,7 +1293,7 @@ func (rows *binaryRows) readRow(dest []driver.Value) error { // Please report if this happens! default: - return fmt.Errorf("unknown field type %d", rows.columns[i].fieldType) + return fmt.Errorf("unknown field type %d", rows.rs.columns[i].fieldType) } } diff --git a/vendor/github.com/go-sql-driver/mysql/rows.go b/vendor/github.com/go-sql-driver/mysql/rows.go index c08255eee..d3b1e2822 100644 --- a/vendor/github.com/go-sql-driver/mysql/rows.go +++ b/vendor/github.com/go-sql-driver/mysql/rows.go @@ -11,19 +11,20 @@ package mysql import ( "database/sql/driver" "io" + "math" + "reflect" ) -type mysqlField struct { - tableName string - name string - flags fieldFlag - fieldType byte - decimals byte +type resultSet struct { + columns []mysqlField + columnNames []string + done bool } type mysqlRows struct { - mc *mysqlConn - columns []mysqlField + mc *mysqlConn + rs resultSet + finish func() } type binaryRows struct { @@ -34,37 +35,86 @@ type textRows struct { mysqlRows } -type emptyRows struct{} - func (rows *mysqlRows) Columns() []string { - columns := make([]string, len(rows.columns)) + if rows.rs.columnNames != nil { + return rows.rs.columnNames + } + + columns := make([]string, len(rows.rs.columns)) if rows.mc != nil && rows.mc.cfg.ColumnsWithAlias { for i := range columns { - if tableName := rows.columns[i].tableName; len(tableName) > 0 { - columns[i] = tableName + "." + rows.columns[i].name + if tableName := rows.rs.columns[i].tableName; len(tableName) > 0 { + columns[i] = tableName + "." + rows.rs.columns[i].name } else { - columns[i] = rows.columns[i].name + columns[i] = rows.rs.columns[i].name } } } else { for i := range columns { - columns[i] = rows.columns[i].name + columns[i] = rows.rs.columns[i].name } } + + rows.rs.columnNames = columns return columns } -func (rows *mysqlRows) Close() error { +func (rows *mysqlRows) ColumnTypeDatabaseTypeName(i int) string { + return rows.rs.columns[i].typeDatabaseName() +} + +// func (rows *mysqlRows) ColumnTypeLength(i int) (length int64, ok bool) { +// return int64(rows.rs.columns[i].length), true +// } + +func (rows *mysqlRows) ColumnTypeNullable(i int) (nullable, ok bool) { + return rows.rs.columns[i].flags&flagNotNULL == 0, true +} + +func (rows *mysqlRows) ColumnTypePrecisionScale(i int) (int64, int64, bool) { + column := rows.rs.columns[i] + decimals := int64(column.decimals) + + switch column.fieldType { + case fieldTypeDecimal, fieldTypeNewDecimal: + if decimals > 0 { + return int64(column.length) - 2, decimals, true + } + return int64(column.length) - 1, decimals, true + case fieldTypeTimestamp, fieldTypeDateTime, fieldTypeTime: + return decimals, decimals, true + case fieldTypeFloat, fieldTypeDouble: + if decimals == 0x1f { + return math.MaxInt64, math.MaxInt64, true + } + return math.MaxInt64, decimals, true + } + + return 0, 0, false +} + +func (rows *mysqlRows) ColumnTypeScanType(i int) reflect.Type { + return rows.rs.columns[i].scanType() +} + +func (rows *mysqlRows) Close() (err error) { + if f := rows.finish; f != nil { + f() + rows.finish = nil + } + mc := rows.mc if mc == nil { return nil } - if mc.netConn == nil { - return ErrInvalidConn + if err := mc.error(); err != nil { + return err } // Remove unread packets from stream - err := mc.readUntilEOF() + if !rows.rs.done { + err = mc.readUntilEOF() + } if err == nil { if err = mc.discardResults(); err != nil { return err @@ -75,10 +125,66 @@ func (rows *mysqlRows) Close() error { return err } +func (rows *mysqlRows) HasNextResultSet() (b bool) { + if rows.mc == nil { + return false + } + return rows.mc.status&statusMoreResultsExists != 0 +} + +func (rows *mysqlRows) nextResultSet() (int, error) { + if rows.mc == nil { + return 0, io.EOF + } + if err := rows.mc.error(); err != nil { + return 0, err + } + + // Remove unread packets from stream + if !rows.rs.done { + if err := rows.mc.readUntilEOF(); err != nil { + return 0, err + } + rows.rs.done = true + } + + if !rows.HasNextResultSet() { + rows.mc = nil + return 0, io.EOF + } + rows.rs = resultSet{} + return rows.mc.readResultSetHeaderPacket() +} + +func (rows *mysqlRows) nextNotEmptyResultSet() (int, error) { + for { + resLen, err := rows.nextResultSet() + if err != nil { + return 0, err + } + + if resLen > 0 { + return resLen, nil + } + + rows.rs.done = true + } +} + +func (rows *binaryRows) NextResultSet() error { + resLen, err := rows.nextNotEmptyResultSet() + if err != nil { + return err + } + + rows.rs.columns, err = rows.mc.readColumns(resLen) + return err +} + func (rows *binaryRows) Next(dest []driver.Value) error { if mc := rows.mc; mc != nil { - if mc.netConn == nil { - return ErrInvalidConn + if err := mc.error(); err != nil { + return err } // Fetch next row from stream @@ -87,10 +193,20 @@ func (rows *binaryRows) Next(dest []driver.Value) error { return io.EOF } +func (rows *textRows) NextResultSet() (err error) { + resLen, err := rows.nextNotEmptyResultSet() + if err != nil { + return err + } + + rows.rs.columns, err = rows.mc.readColumns(resLen) + return err +} + func (rows *textRows) Next(dest []driver.Value) error { if mc := rows.mc; mc != nil { - if mc.netConn == nil { - return ErrInvalidConn + if err := mc.error(); err != nil { + return err } // Fetch next row from stream @@ -98,15 +214,3 @@ func (rows *textRows) Next(dest []driver.Value) error { } return io.EOF } - -func (rows emptyRows) Columns() []string { - return nil -} - -func (rows emptyRows) Close() error { - return nil -} - -func (rows emptyRows) Next(dest []driver.Value) error { - return io.EOF -} diff --git a/vendor/github.com/go-sql-driver/mysql/statement.go b/vendor/github.com/go-sql-driver/mysql/statement.go index ead9a6bf4..ce7fe4cd0 100644 --- a/vendor/github.com/go-sql-driver/mysql/statement.go +++ b/vendor/github.com/go-sql-driver/mysql/statement.go @@ -11,6 +11,7 @@ package mysql import ( "database/sql/driver" "fmt" + "io" "reflect" "strconv" ) @@ -19,12 +20,14 @@ type mysqlStmt struct { mc *mysqlConn id uint32 paramCount int - columns []mysqlField // cached from the first query } func (stmt *mysqlStmt) Close() error { - if stmt.mc == nil || stmt.mc.netConn == nil { - errLog.Print(ErrInvalidConn) + if stmt.mc == nil || stmt.mc.closed.IsSet() { + // driver.Stmt.Close can be called more than once, thus this function + // has to be idempotent. + // See also Issue #450 and golang/go#16019. + //errLog.Print(ErrInvalidConn) return driver.ErrBadConn } @@ -42,14 +45,14 @@ func (stmt *mysqlStmt) ColumnConverter(idx int) driver.ValueConverter { } func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) { - if stmt.mc.netConn == nil { + if stmt.mc.closed.IsSet() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } // Send command err := stmt.writeExecutePacket(args) if err != nil { - return nil, err + return nil, stmt.mc.markBadConn(err) } mc := stmt.mc @@ -59,37 +62,45 @@ func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) { // Read Result resLen, err := mc.readResultSetHeaderPacket() - if err == nil { - if resLen > 0 { - // Columns - err = mc.readUntilEOF() - if err != nil { - return nil, err - } + if err != nil { + return nil, err + } - // Rows - err = mc.readUntilEOF() + if resLen > 0 { + // Columns + if err = mc.readUntilEOF(); err != nil { + return nil, err } - if err == nil { - return &mysqlResult{ - affectedRows: int64(mc.affectedRows), - insertId: int64(mc.insertId), - }, nil + + // Rows + if err := mc.readUntilEOF(); err != nil { + return nil, err } } - return nil, err + if err := mc.discardResults(); err != nil { + return nil, err + } + + return &mysqlResult{ + affectedRows: int64(mc.affectedRows), + insertId: int64(mc.insertId), + }, nil } func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) { - if stmt.mc.netConn == nil { + return stmt.query(args) +} + +func (stmt *mysqlStmt) query(args []driver.Value) (*binaryRows, error) { + if stmt.mc.closed.IsSet() { errLog.Print(ErrInvalidConn) return nil, driver.ErrBadConn } // Send command err := stmt.writeExecutePacket(args) if err != nil { - return nil, err + return nil, stmt.mc.markBadConn(err) } mc := stmt.mc @@ -104,14 +115,15 @@ func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) { if resLen > 0 { rows.mc = mc - // Columns - // If not cached, read them and cache them - if stmt.columns == nil { - rows.columns, err = mc.readColumns(resLen) - stmt.columns = rows.columns - } else { - rows.columns = stmt.columns - err = mc.readUntilEOF() + rows.rs.columns, err = mc.readColumns(resLen) + } else { + rows.rs.done = true + + switch err := rows.NextResultSet(); err { + case nil, io.EOF: + return rows, nil + default: + return nil, err } } @@ -120,19 +132,36 @@ func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) { type converter struct{} +// ConvertValue mirrors the reference/default converter in database/sql/driver +// with _one_ exception. We support uint64 with their high bit and the default +// implementation does not. This function should be kept in sync with +// database/sql/driver defaultConverter.ConvertValue() except for that +// deliberate difference. func (c converter) ConvertValue(v interface{}) (driver.Value, error) { if driver.IsValue(v) { return v, nil } + if vr, ok := v.(driver.Valuer); ok { + sv, err := callValuerValue(vr) + if err != nil { + return nil, err + } + if !driver.IsValue(sv) { + return nil, fmt.Errorf("non-Value type %T returned from Value", sv) + } + return sv, nil + } + rv := reflect.ValueOf(v) switch rv.Kind() { case reflect.Ptr: // indirect pointers if rv.IsNil() { return nil, nil + } else { + return c.ConvertValue(rv.Elem().Interface()) } - return c.ConvertValue(rv.Elem().Interface()) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return rv.Int(), nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: @@ -145,6 +174,38 @@ func (c converter) ConvertValue(v interface{}) (driver.Value, error) { return int64(u64), nil case reflect.Float32, reflect.Float64: return rv.Float(), nil + case reflect.Bool: + return rv.Bool(), nil + case reflect.Slice: + ek := rv.Type().Elem().Kind() + if ek == reflect.Uint8 { + return rv.Bytes(), nil + } + return nil, fmt.Errorf("unsupported type %T, a slice of %s", v, ek) + case reflect.String: + return rv.String(), nil } return nil, fmt.Errorf("unsupported type %T, a %s", v, rv.Kind()) } + +var valuerReflectType = reflect.TypeOf((*driver.Valuer)(nil)).Elem() + +// callValuerValue returns vr.Value(), with one exception: +// If vr.Value is an auto-generated method on a pointer type and the +// pointer is nil, it would panic at runtime in the panicwrap +// method. Treat it like nil instead. +// +// This is so people can implement driver.Value on value types and +// still use nil pointers to those types to mean nil/NULL, just like +// string/*string. +// +// This is an exact copy of the same-named unexported function from the +// database/sql package. +func callValuerValue(vr driver.Valuer) (v driver.Value, err error) { + if rv := reflect.ValueOf(vr); rv.Kind() == reflect.Ptr && + rv.IsNil() && + rv.Type().Elem().Implements(valuerReflectType) { + return nil, nil + } + return vr.Value() +} diff --git a/vendor/github.com/go-sql-driver/mysql/transaction.go b/vendor/github.com/go-sql-driver/mysql/transaction.go index 33c749b35..417d72793 100644 --- a/vendor/github.com/go-sql-driver/mysql/transaction.go +++ b/vendor/github.com/go-sql-driver/mysql/transaction.go @@ -13,7 +13,7 @@ type mysqlTx struct { } func (tx *mysqlTx) Commit() (err error) { - if tx.mc == nil || tx.mc.netConn == nil { + if tx.mc == nil || tx.mc.closed.IsSet() { return ErrInvalidConn } err = tx.mc.exec("COMMIT") @@ -22,7 +22,7 @@ func (tx *mysqlTx) Commit() (err error) { } func (tx *mysqlTx) Rollback() (err error) { - if tx.mc == nil || tx.mc.netConn == nil { + if tx.mc == nil || tx.mc.closed.IsSet() { return ErrInvalidConn } err = tx.mc.exec("ROLLBACK") diff --git a/vendor/github.com/go-sql-driver/mysql/utils.go b/vendor/github.com/go-sql-driver/mysql/utils.go index d523b7ffd..84d595b6b 100644 --- a/vendor/github.com/go-sql-driver/mysql/utils.go +++ b/vendor/github.com/go-sql-driver/mysql/utils.go @@ -9,23 +9,29 @@ package mysql import ( - "crypto/sha1" "crypto/tls" "database/sql/driver" "encoding/binary" "fmt" "io" "strings" + "sync" + "sync/atomic" "time" ) +// Registry for custom tls.Configs var ( - tlsConfigRegister map[string]*tls.Config // Register for custom tls.Configs + tlsConfigLock sync.RWMutex + tlsConfigRegistry map[string]*tls.Config ) // RegisterTLSConfig registers a custom tls.Config to be used with sql.Open. // Use the key as a value in the DSN where tls=value. // +// Note: The provided tls.Config is exclusively owned by the driver after +// registering it. +// // rootCertPool := x509.NewCertPool() // pem, err := ioutil.ReadFile("/path/ca-cert.pem") // if err != nil { @@ -51,19 +57,32 @@ func RegisterTLSConfig(key string, config *tls.Config) error { return fmt.Errorf("key '%s' is reserved", key) } - if tlsConfigRegister == nil { - tlsConfigRegister = make(map[string]*tls.Config) + tlsConfigLock.Lock() + if tlsConfigRegistry == nil { + tlsConfigRegistry = make(map[string]*tls.Config) } - tlsConfigRegister[key] = config + tlsConfigRegistry[key] = config + tlsConfigLock.Unlock() return nil } // DeregisterTLSConfig removes the tls.Config associated with key. func DeregisterTLSConfig(key string) { - if tlsConfigRegister != nil { - delete(tlsConfigRegister, key) + tlsConfigLock.Lock() + if tlsConfigRegistry != nil { + delete(tlsConfigRegistry, key) } + tlsConfigLock.Unlock() +} + +func getTLSConfigClone(key string) (config *tls.Config) { + tlsConfigLock.RLock() + if v, ok := tlsConfigRegistry[key]; ok { + config = cloneTLSConfig(v) + } + tlsConfigLock.RUnlock() + return } // Returns the bool value of the input. @@ -80,119 +99,6 @@ func readBool(input string) (value bool, valid bool) { return } -/****************************************************************************** -* Authentication * -******************************************************************************/ - -// Encrypt password using 4.1+ method -func scramblePassword(scramble, password []byte) []byte { - if len(password) == 0 { - return nil - } - - // stage1Hash = SHA1(password) - crypt := sha1.New() - crypt.Write(password) - stage1 := crypt.Sum(nil) - - // scrambleHash = SHA1(scramble + SHA1(stage1Hash)) - // inner Hash - crypt.Reset() - crypt.Write(stage1) - hash := crypt.Sum(nil) - - // outer Hash - crypt.Reset() - crypt.Write(scramble) - crypt.Write(hash) - scramble = crypt.Sum(nil) - - // token = scrambleHash XOR stage1Hash - for i := range scramble { - scramble[i] ^= stage1[i] - } - return scramble -} - -// Encrypt password using pre 4.1 (old password) method -// https://github.com/atcurtis/mariadb/blob/master/mysys/my_rnd.c -type myRnd struct { - seed1, seed2 uint32 -} - -const myRndMaxVal = 0x3FFFFFFF - -// Pseudo random number generator -func newMyRnd(seed1, seed2 uint32) *myRnd { - return &myRnd{ - seed1: seed1 % myRndMaxVal, - seed2: seed2 % myRndMaxVal, - } -} - -// Tested to be equivalent to MariaDB's floating point variant -// http://play.golang.org/p/QHvhd4qved -// http://play.golang.org/p/RG0q4ElWDx -func (r *myRnd) NextByte() byte { - r.seed1 = (r.seed1*3 + r.seed2) % myRndMaxVal - r.seed2 = (r.seed1 + r.seed2 + 33) % myRndMaxVal - - return byte(uint64(r.seed1) * 31 / myRndMaxVal) -} - -// Generate binary hash from byte string using insecure pre 4.1 method -func pwHash(password []byte) (result [2]uint32) { - var add uint32 = 7 - var tmp uint32 - - result[0] = 1345345333 - result[1] = 0x12345671 - - for _, c := range password { - // skip spaces and tabs in password - if c == ' ' || c == '\t' { - continue - } - - tmp = uint32(c) - result[0] ^= (((result[0] & 63) + add) * tmp) + (result[0] << 8) - result[1] += (result[1] << 8) ^ result[0] - add += tmp - } - - // Remove sign bit (1<<31)-1) - result[0] &= 0x7FFFFFFF - result[1] &= 0x7FFFFFFF - - return -} - -// Encrypt password using insecure pre 4.1 method -func scrambleOldPassword(scramble, password []byte) []byte { - if len(password) == 0 { - return nil - } - - scramble = scramble[:8] - - hashPw := pwHash(password) - hashSc := pwHash(scramble) - - r := newMyRnd(hashPw[0]^hashSc[0], hashPw[1]^hashSc[1]) - - var out [8]byte - for i := range out { - out[i] = r.NextByte() + 64 - } - - mask := r.NextByte() - for i := range out { - out[i] ^= mask - } - - return out[:] -} - /****************************************************************************** * Time related utils * ******************************************************************************/ @@ -519,7 +425,7 @@ func readLengthEncodedString(b []byte) ([]byte, bool, int, error) { // Check data length if len(b) >= n { - return b[n-int(num) : n], false, n, nil + return b[n-int(num) : n : n], false, n, nil } return nil, false, n, io.EOF } @@ -548,8 +454,8 @@ func readLengthEncodedInteger(b []byte) (uint64, bool, int) { if len(b) == 0 { return 0, true, 1 } - switch b[0] { + switch b[0] { // 251: NULL case 0xfb: return 0, true, 1 @@ -738,3 +644,67 @@ func escapeStringQuotes(buf []byte, v string) []byte { return buf[:pos] } + +/****************************************************************************** +* Sync utils * +******************************************************************************/ + +// noCopy may be embedded into structs which must not be copied +// after the first use. +// +// See https://github.com/golang/go/issues/8005#issuecomment-190753527 +// for details. +type noCopy struct{} + +// Lock is a no-op used by -copylocks checker from `go vet`. +func (*noCopy) Lock() {} + +// atomicBool is a wrapper around uint32 for usage as a boolean value with +// atomic access. +type atomicBool struct { + _noCopy noCopy + value uint32 +} + +// IsSet returns wether the current boolean value is true +func (ab *atomicBool) IsSet() bool { + return atomic.LoadUint32(&ab.value) > 0 +} + +// Set sets the value of the bool regardless of the previous value +func (ab *atomicBool) Set(value bool) { + if value { + atomic.StoreUint32(&ab.value, 1) + } else { + atomic.StoreUint32(&ab.value, 0) + } +} + +// TrySet sets the value of the bool and returns wether the value changed +func (ab *atomicBool) TrySet(value bool) bool { + if value { + return atomic.SwapUint32(&ab.value, 1) == 0 + } + return atomic.SwapUint32(&ab.value, 0) > 0 +} + +// atomicError is a wrapper for atomically accessed error values +type atomicError struct { + _noCopy noCopy + value atomic.Value +} + +// Set sets the error value regardless of the previous value. +// The value must not be nil +func (ae *atomicError) Set(value error) { + ae.value.Store(value) +} + +// Value returns the current error value +func (ae *atomicError) Value() error { + if v := ae.value.Load(); v != nil { + // this will panic if the value doesn't implement the error interface + return v.(error) + } + return nil +} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_go17.go b/vendor/github.com/go-sql-driver/mysql/utils_go17.go new file mode 100644 index 000000000..f59563456 --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/utils_go17.go @@ -0,0 +1,40 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build go1.7 +// +build !go1.8 + +package mysql + +import "crypto/tls" + +func cloneTLSConfig(c *tls.Config) *tls.Config { + return &tls.Config{ + Rand: c.Rand, + Time: c.Time, + Certificates: c.Certificates, + NameToCertificate: c.NameToCertificate, + GetCertificate: c.GetCertificate, + RootCAs: c.RootCAs, + NextProtos: c.NextProtos, + ServerName: c.ServerName, + ClientAuth: c.ClientAuth, + ClientCAs: c.ClientCAs, + InsecureSkipVerify: c.InsecureSkipVerify, + CipherSuites: c.CipherSuites, + PreferServerCipherSuites: c.PreferServerCipherSuites, + SessionTicketsDisabled: c.SessionTicketsDisabled, + SessionTicketKey: c.SessionTicketKey, + ClientSessionCache: c.ClientSessionCache, + MinVersion: c.MinVersion, + MaxVersion: c.MaxVersion, + CurvePreferences: c.CurvePreferences, + DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, + Renegotiation: c.Renegotiation, + } +} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_go18.go b/vendor/github.com/go-sql-driver/mysql/utils_go18.go new file mode 100644 index 000000000..c35c2a6aa --- /dev/null +++ b/vendor/github.com/go-sql-driver/mysql/utils_go18.go @@ -0,0 +1,50 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build go1.8 + +package mysql + +import ( + "crypto/tls" + "database/sql" + "database/sql/driver" + "errors" + "fmt" +) + +func cloneTLSConfig(c *tls.Config) *tls.Config { + return c.Clone() +} + +func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { + dargs := make([]driver.Value, len(named)) + for n, param := range named { + if len(param.Name) > 0 { + // TODO: support the use of Named Parameters #561 + return nil, errors.New("mysql: driver does not support the use of Named Parameters") + } + dargs[n] = param.Value + } + return dargs, nil +} + +func mapIsolationLevel(level driver.IsolationLevel) (string, error) { + switch sql.IsolationLevel(level) { + case sql.LevelRepeatableRead: + return "REPEATABLE READ", nil + case sql.LevelReadCommitted: + return "READ COMMITTED", nil + case sql.LevelReadUncommitted: + return "READ UNCOMMITTED", nil + case sql.LevelSerializable: + return "SERIALIZABLE", nil + default: + return "", fmt.Errorf("mysql: unsupported isolation level: %v", level) + } +} From c71ee33057436dc2be1f071f379e6341c382e0ec Mon Sep 17 00:00:00 2001 From: Clar Charr Date: Tue, 3 Jul 2018 18:10:35 -0400 Subject: [PATCH 057/124] Increase default TOTP secret size to 320 bits (#4287) --- routers/user/setting/security_twofa.go | 1 + 1 file changed, 1 insertion(+) diff --git a/routers/user/setting/security_twofa.go b/routers/user/setting/security_twofa.go index 55101ed1a..cb61b9e27 100644 --- a/routers/user/setting/security_twofa.go +++ b/routers/user/setting/security_twofa.go @@ -76,6 +76,7 @@ func twofaGenerateSecretAndQr(ctx *context.Context) bool { if otpKey == nil { err = nil // clear the error, in case the URL was invalid otpKey, err = totp.Generate(totp.GenerateOpts{ + SecretSize: 40, Issuer: setting.AppName + " (" + strings.TrimRight(setting.AppURL, "/") + ")", AccountName: ctx.User.Name, }) From 5d1a6382b6898606ac6383bdd3101dfa1b487d9c Mon Sep 17 00:00:00 2001 From: Pofilo Date: Wed, 4 Jul 2018 01:03:31 +0200 Subject: [PATCH 058/124] #4354 Fix translation (#4355) --- options/locale/locale_en-US.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 21ae775e4..be0489680 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1273,8 +1273,8 @@ dashboard.operation_switch = Switch dashboard.operation_run = Run dashboard.clean_unbind_oauth = Clean unbound OAuth connections dashboard.clean_unbind_oauth_success = All unbound OAuth connections have been deleted. -dashboard.delete_inactivate_accounts = Delete all inactive accounts -dashboard.delete_inactivate_accounts_success = All inactive accounts have been deleted. +dashboard.delete_inactivate_accounts = Delete all not activated accounts +dashboard.delete_inactivate_accounts_success = All not activated accounts have been deleted. dashboard.delete_repo_archives = Delete all repository archives dashboard.delete_repo_archives_success = All repository archives have been deleted. dashboard.delete_missing_repos = Delete all repositories missing their Git files From 4b654ad17f50a441049c208e5011d0799522592b Mon Sep 17 00:00:00 2001 From: ucodi <40141083+ucodi@users.noreply.github.com> Date: Tue, 3 Jul 2018 23:16:46 +0000 Subject: [PATCH 059/124] Update notification icon (#4343) --- templates/base/head.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/base/head.tmpl b/templates/base/head.tmpl index fb9611cb6..53d3de1e9 100644 --- a/templates/base/head.tmpl +++ b/templates/base/head.tmpl @@ -174,7 +174,7 @@
diff --git a/templates/home.tmpl b/templates/home.tmpl index d115d8298..4e03c0c1a 100644 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -20,7 +20,7 @@ Einfach zu installieren

- Starte einfach die Anwendung für deine Plattform. Gitea gibt es auch für Docker, Vagrant oder als Installationspaket. + Starte einfach die Anwendung für deine Plattform. Gitea gibt es auch für Docker, Vagrant oder als Installationspaket.

@@ -28,7 +28,7 @@ Plattformübergreifend

- Gitea läuft überall. Go kompiliert für: Windows, macOS, Linux, ARM, etc. Wähle dasjenige System, was dir am meisten gefällt! + Gitea läuft überall. Go kompiliert für: Windows, macOS, Linux, ARM, etc. Wähle dasjenige System, was dir am meisten gefällt!

@@ -46,7 +46,7 @@ Quelloffen

- Der komplette Code befindet sich auf GitHub! Unterstütze uns bei der Verbesserung dieses Projekts. Trau dich! + Der komplette Code befindet sich auf GitHub! Unterstütze uns bei der Verbesserung dieses Projekts. Trau dich!

@@ -57,7 +57,7 @@ 易安裝

- 直接用 執行檔安裝,還可以透過 DockerVagrant,以及 套件安装。 + 直接用 執行檔安裝,還可以透過 DockerVagrant,以及 套件安装。

@@ -65,7 +65,7 @@ 跨平台

- Gitea 可以運作在任何 Go 語言能夠編譯的平台: Windows, macOS, Linux, ARM 等等。挑一個您喜歡的就好。 + Gitea 可以運作在任何 Go 語言能夠編譯的平台: Windows, macOS, Linux, ARM 等等。挑一個您喜歡的就好。

@@ -83,7 +83,7 @@ 開源化

- 所有程式碼都在 GitHub 上,加入我們讓 Gitea 更好,別害羞,你可以做到的。 + 所有程式碼都在 GitHub 上,加入我們讓 Gitea 更好,別害羞,你可以做到的。

@@ -94,7 +94,7 @@ 易安装

- 您除了可以根据操作系统平台通过 二进制运行,还可以通过 DockerVagrant,以及 包管理 安装。 + 您除了可以根据操作系统平台通过 二进制运行,还可以通过 DockerVagrant,以及 包管理 安装。

@@ -102,7 +102,7 @@ 跨平台

- 任何 Go 语言 支持的平台都可以运行 Gitea,包括 Windows、Mac、Linux 以及 ARM。挑一个您喜欢的就行! + 任何 Go 语言 支持的平台都可以运行 Gitea,包括 Windows、Mac、Linux 以及 ARM。挑一个您喜欢的就行!

@@ -120,7 +120,7 @@ 开源化

- 所有的代码都开源在 GitHub 上,赶快加入我们来共同发展这个伟大的项目!还等什么?成为贡献者吧! + 所有的代码都开源在 GitHub 上,赶快加入我们来共同发展这个伟大的项目!还等什么?成为贡献者吧!

@@ -131,10 +131,10 @@ Facile à installer

- Il suffit de lancer l'exécutable correspondant à votre système. - Ou d'utiliser Gitea avec Docker ou - Vagrant - ou en l'installant depuis un package. + Il suffit de lancer l'exécutable correspondant à votre système. + Ou d'utiliser Gitea avec Docker ou + Vagrant + ou en l'installant depuis un package.

@@ -142,7 +142,7 @@ Multi-plateforme

- Gitea tourne partout où Go peut être compilé : Windows, macOS, Linux, ARM, etc. Choisissez votre préféré ! + Gitea tourne partout où Go peut être compilé : Windows, macOS, Linux, ARM, etc. Choisissez votre préféré !

@@ -160,7 +160,7 @@ Open Source

- Toutes les sources sont sur GitHub ! Rejoignez-nous et contribuez à rendre ce projet encore meilleur. + Toutes les sources sont sur GitHub ! Rejoignez-nous et contribuez à rendre ce projet encore meilleur.

@@ -171,7 +171,7 @@ Fácil de instalar

- Simplemente arranca el binario para tu plataforma. O usa Gitea con Docker o Vagrant, o utilice el paquete. + Simplemente arranca el binario para tu plataforma. O usa Gitea con Docker o Vagrant, o utilice el paquete.

@@ -179,7 +179,7 @@ Multiplatforma

- Gitea funciona en cualquier parte, Go puede compilarse en: Windows, macOS, Linux, ARM, etc. !Elige tu favorita! + Gitea funciona en cualquier parte, Go puede compilarse en: Windows, macOS, Linux, ARM, etc. !Elige tu favorita!

@@ -197,7 +197,7 @@ Open Source

- ¡Está todo en GitHub! Uniros contribuyendo a hacer este proyecto todavía mejor. ¡No seas tímido y colabora! + ¡Está todo en GitHub! Uniros contribuyendo a hacer este proyecto todavía mejor. ¡No seas tímido y colabora!

@@ -208,7 +208,7 @@ Fácil de instalar

- Simplesmente rode o executável para o seu sistema operacional. Ou obtenha o Gitea com o Docker ou Vagrant, ou baixe o pacote. + Simplesmente rode o executável para o seu sistema operacional. Ou obtenha o Gitea com o Docker ou Vagrant, ou baixe o pacote.

@@ -216,7 +216,7 @@ Multi-plataforma

- Gitea roda em qualquer sistema operacional em que Go consegue compilar: Windows, macOS, Linux, ARM, etc. Escolha qual você gosta mais! + Gitea roda em qualquer sistema operacional em que Go consegue compilar: Windows, macOS, Linux, ARM, etc. Escolha qual você gosta mais!

@@ -234,7 +234,7 @@ Código aberto

- Está tudo no GitHub! Contribua e torne este projeto ainda melhor. Não tenha vergonha de contribuir! + Está tudo no GitHub! Contribua e torne este projeto ainda melhor. Não tenha vergonha de contribuir!

@@ -245,7 +245,7 @@ Простой в установке

- Просто запустите исполняемый файл для вашей платформы. Изпользуйте Gitea с Docker или Vagrant, или загрузите пакет. + Просто запустите исполняемый файл для вашей платформы. Изпользуйте Gitea с Docker или Vagrant, или загрузите пакет.

@@ -253,7 +253,7 @@ Кроссплатформенный

- Gitea работает на любой операционной системе, которая может компилировать Go: Windows, macOS, Linux, ARM и т. д. Выбирайте, что вам больше нравится! + Gitea работает на любой операционной системе, которая может компилировать Go: Windows, macOS, Linux, ARM и т. д. Выбирайте, что вам больше нравится!

@@ -271,7 +271,7 @@ Открытый исходный код

- Всё это на GitHub! Присоединяйтесь к нам, внося вклад, чтобы сделать этот проект еще лучше. Не бойтесь помогать! + Всё это на GitHub! Присоединяйтесь к нам, внося вклад, чтобы сделать этот проект еще лучше. Не бойтесь помогать!

@@ -282,7 +282,7 @@ Makkelijk te installeren

- Je hoeft alleen maar de binary uit te voeren. Of gebruik Gitea met Docker, Vagrant, of download een installatiepakket. + Je hoeft alleen maar de binary uit te voeren. Of gebruik Gitea met Docker, Vagrant, of download een installatiepakket.

@@ -290,7 +290,7 @@ Cross-platform

- Gitea werkt op alles waar Go op kan compileren: Windows, macOS, Linux, ARM, etc. Kies het platform dat bij je past! + Gitea werkt op alles waar Go op kan compileren: Windows, macOS, Linux, ARM, etc. Kies het platform dat bij je past!

@@ -308,7 +308,7 @@ Open Source

- Alles staat op GitHub! Help ons door mee te bouwen aan Gitea, samen maken we dit project nog beter. Aarzel dus niet om een bijdrage te leveren! + Alles staat op GitHub! Help ons door mee te bouwen aan Gitea, samen maken we dit project nog beter. Aarzel dus niet om een bijdrage te leveren!

@@ -319,7 +319,7 @@ Easy to install

- Simply run the binary for your platform. Or ship Gitea with Docker or Vagrant, or get it packaged. + Simply run the binary for your platform. Or ship Gitea with Docker or Vagrant, or get it packaged.

@@ -327,7 +327,7 @@ Cross-platform

- Gitea runs anywhere Go can compile for: Windows, macOS, Linux, ARM, etc. Choose the one you love! + Gitea runs anywhere Go can compile for: Windows, macOS, Linux, ARM, etc. Choose the one you love!

@@ -345,7 +345,7 @@ Open Source

- It's all on GitHub! Join us by contributing to make this project even better. Don't be shy to be a contributor! + It's all on GitHub! Join us by contributing to make this project even better. Don't be shy to be a contributor!

diff --git a/templates/mail/auth/activate.tmpl b/templates/mail/auth/activate.tmpl index ac552ca64..0f6afc196 100644 --- a/templates/mail/auth/activate.tmpl +++ b/templates/mail/auth/activate.tmpl @@ -10,6 +10,6 @@

Please click the following link to activate your account within {{.ActiveCodeLives}}:

{{AppUrl}}user/activate?code={{.Code}}

Not working? Try copying and pasting it to your browser.

-

© {{AppName}}

+

© {{AppName}}

diff --git a/templates/mail/auth/activate_email.tmpl b/templates/mail/auth/activate_email.tmpl index 5111de06c..7c47aaa7b 100644 --- a/templates/mail/auth/activate_email.tmpl +++ b/templates/mail/auth/activate_email.tmpl @@ -10,6 +10,6 @@

Please click the following link to verify your email address within {{.ActiveCodeLives}}:

{{AppUrl}}user/activate_email?code={{.Code}}&email={{.Email}}

Not working? Try copying and pasting it to your browser.

-

© {{AppName}}

+

© {{AppName}}

diff --git a/templates/mail/auth/register_notify.tmpl b/templates/mail/auth/register_notify.tmpl index a896f0e59..4c2a9c43a 100644 --- a/templates/mail/auth/register_notify.tmpl +++ b/templates/mail/auth/register_notify.tmpl @@ -10,6 +10,6 @@

You can now login via username: {{.Username}}.

{{AppUrl}}user/login

If this account has been created for you, please reset your password first.

-

© {{AppName}}

+

© {{AppName}}

diff --git a/templates/mail/auth/reset_passwd.tmpl b/templates/mail/auth/reset_passwd.tmpl index ea233d8f5..0a09c47e8 100644 --- a/templates/mail/auth/reset_passwd.tmpl +++ b/templates/mail/auth/reset_passwd.tmpl @@ -10,6 +10,6 @@

Please click the following link to reset your password within {{.ResetPwdCodeLives}}:

{{AppUrl}}user/reset_password?code={{.Code}}

Not working? Try copying and pasting it to your browser.

-

© {{AppName}}

+

© {{AppName}}

diff --git a/templates/org/home.tmpl b/templates/org/home.tmpl index 0b5ae0fac..13b557bd7 100644 --- a/templates/org/home.tmpl +++ b/templates/org/home.tmpl @@ -12,7 +12,7 @@ {{if .Org.Description}}

{{.Org.Description}}

{{end}}
{{if .Org.Location}}
{{.Org.Location}}
{{end}} - {{if .Org.Website}}{{end}} + {{if .Org.Website}}{{end}}
diff --git a/templates/repo/commit_status.tmpl b/templates/repo/commit_status.tmpl index d5f75c132..f5bbbb02d 100644 --- a/templates/repo/commit_status.tmpl +++ b/templates/repo/commit_status.tmpl @@ -1,15 +1,15 @@ {{if eq .State "pending"}} - + {{end}} {{if eq .State "success"}} - + {{end}} {{if eq .State "error"}} - + {{end}} {{if eq .State "failure"}} - + {{end}} {{if eq .State "warning"}} - -{{end}} \ No newline at end of file + +{{end}} diff --git a/templates/repo/header.tmpl b/templates/repo/header.tmpl index 6f54cb9f6..a496b9b91 100644 --- a/templates/repo/header.tmpl +++ b/templates/repo/header.tmpl @@ -8,7 +8,7 @@ {{.Owner.Name}}
/
{{.Name}} - {{if .IsMirror}}
{{$.i18n.Tr "repo.mirror_from"}} {{$.Mirror.Address}}
{{end}} + {{if .IsMirror}}
{{$.i18n.Tr "repo.mirror_from"}} {{$.Mirror.Address}}
{{end}} {{if .IsFork}}
{{$.i18n.Tr "repo.forked_from"}} {{SubStr .BaseRepo.RelLink 1 -1}}
{{end}} @@ -60,7 +60,7 @@ {{end}} {{if .Repository.UnitEnabled $.UnitTypeExternalTracker}} - + {{.i18n.Tr "repo.issues"}} {{end}} @@ -78,7 +78,7 @@ {{end}} {{if or (.Repository.UnitEnabled $.UnitTypeWiki) (.Repository.UnitEnabled $.UnitTypeExternalWiki)}} - + {{.i18n.Tr "repo.wiki"}} {{end}} diff --git a/templates/repo/issue/labels.tmpl b/templates/repo/issue/labels.tmpl index 3e360cb72..38d914520 100644 --- a/templates/repo/issue/labels.tmpl +++ b/templates/repo/issue/labels.tmpl @@ -63,7 +63,7 @@
DatabaseDefaultCharset-->SystemDefaultCharset. - // TODO: change TableOption parser to parse collate. - // This is a tmp solution. - return "utf8", "utf8_unicode_ci" -} - -func setColumnFlagWithConstraint(colMap map[string]*column.Col, v *ast.Constraint) { - switch v.Tp { - case ast.ConstraintPrimaryKey: - for _, key := range v.Keys { - c, ok := colMap[key.Column.Name.L] - if !ok { - // TODO: table constraint on unknown column. - continue - } - c.Flag |= mysql.PriKeyFlag - // Primary key can not be NULL. - c.Flag |= mysql.NotNullFlag - } - case ast.ConstraintUniq, ast.ConstraintUniqIndex, ast.ConstraintUniqKey: - for i, key := range v.Keys { - c, ok := colMap[key.Column.Name.L] - if !ok { - // TODO: table constraint on unknown column. - continue - } - if i == 0 { - // Only the first column can be set - // if unique index has multi columns, - // the flag should be MultipleKeyFlag. - // See: https://dev.mysql.com/doc/refman/5.7/en/show-columns.html - if len(v.Keys) > 1 { - c.Flag |= mysql.MultipleKeyFlag - } else { - c.Flag |= mysql.UniqueKeyFlag - } - } - } - case ast.ConstraintKey, ast.ConstraintIndex: - for i, key := range v.Keys { - c, ok := colMap[key.Column.Name.L] - if !ok { - // TODO: table constraint on unknown column. - continue - } - if i == 0 { - // Only the first column can be set. - c.Flag |= mysql.MultipleKeyFlag - } - } - } -} - -func (d *ddl) buildColumnsAndConstraints(ctx context.Context, colDefs []*ast.ColumnDef, - constraints []*ast.Constraint) ([]*column.Col, []*ast.Constraint, error) { - var cols []*column.Col - colMap := map[string]*column.Col{} - for i, colDef := range colDefs { - col, cts, err := d.buildColumnAndConstraint(ctx, i, colDef) - if err != nil { - return nil, nil, errors.Trace(err) - } - col.State = model.StatePublic - constraints = append(constraints, cts...) - cols = append(cols, col) - colMap[colDef.Name.Name.L] = col - } - // traverse table Constraints and set col.flag - for _, v := range constraints { - setColumnFlagWithConstraint(colMap, v) - } - return cols, constraints, nil -} - -func (d *ddl) buildColumnAndConstraint(ctx context.Context, offset int, - colDef *ast.ColumnDef) (*column.Col, []*ast.Constraint, error) { - // Set charset. - if len(colDef.Tp.Charset) == 0 { - switch colDef.Tp.Tp { - case mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob: - colDef.Tp.Charset, colDef.Tp.Collate = getDefaultCharsetAndCollate() - default: - colDef.Tp.Charset = charset.CharsetBin - colDef.Tp.Collate = charset.CharsetBin - } - } - - col, cts, err := columnDefToCol(ctx, offset, colDef) - if err != nil { - return nil, nil, errors.Trace(err) - } - - col.ID, err = d.genGlobalID() - if err != nil { - return nil, nil, errors.Trace(err) - } - - return col, cts, nil -} - -// columnDefToCol converts ColumnDef to Col and TableConstraints. -func columnDefToCol(ctx context.Context, offset int, colDef *ast.ColumnDef) (*column.Col, []*ast.Constraint, error) { - constraints := []*ast.Constraint{} - col := &column.Col{ - ColumnInfo: model.ColumnInfo{ - Offset: offset, - Name: colDef.Name.Name, - FieldType: *colDef.Tp, - }, - } - - // Check and set TimestampFlag and OnUpdateNowFlag. - if col.Tp == mysql.TypeTimestamp { - col.Flag |= mysql.TimestampFlag - col.Flag |= mysql.OnUpdateNowFlag - col.Flag |= mysql.NotNullFlag - } - - // If flen is not assigned, assigned it by type. - if col.Flen == types.UnspecifiedLength { - col.Flen = mysql.GetDefaultFieldLength(col.Tp) - } - if col.Decimal == types.UnspecifiedLength { - col.Decimal = mysql.GetDefaultDecimal(col.Tp) - } - - setOnUpdateNow := false - hasDefaultValue := false - if colDef.Options != nil { - keys := []*ast.IndexColName{ - { - Column: colDef.Name, - Length: colDef.Tp.Flen, - }, - } - for _, v := range colDef.Options { - switch v.Tp { - case ast.ColumnOptionNotNull: - col.Flag |= mysql.NotNullFlag - case ast.ColumnOptionNull: - col.Flag &= ^uint(mysql.NotNullFlag) - removeOnUpdateNowFlag(col) - case ast.ColumnOptionAutoIncrement: - col.Flag |= mysql.AutoIncrementFlag - case ast.ColumnOptionPrimaryKey: - constraint := &ast.Constraint{Tp: ast.ConstraintPrimaryKey, Keys: keys} - constraints = append(constraints, constraint) - col.Flag |= mysql.PriKeyFlag - case ast.ColumnOptionUniq: - constraint := &ast.Constraint{Tp: ast.ConstraintUniq, Name: colDef.Name.Name.O, Keys: keys} - constraints = append(constraints, constraint) - col.Flag |= mysql.UniqueKeyFlag - case ast.ColumnOptionIndex: - constraint := &ast.Constraint{Tp: ast.ConstraintIndex, Name: colDef.Name.Name.O, Keys: keys} - constraints = append(constraints, constraint) - case ast.ColumnOptionUniqIndex: - constraint := &ast.Constraint{Tp: ast.ConstraintUniqIndex, Name: colDef.Name.Name.O, Keys: keys} - constraints = append(constraints, constraint) - col.Flag |= mysql.UniqueKeyFlag - case ast.ColumnOptionKey: - constraint := &ast.Constraint{Tp: ast.ConstraintKey, Name: colDef.Name.Name.O, Keys: keys} - constraints = append(constraints, constraint) - case ast.ColumnOptionUniqKey: - constraint := &ast.Constraint{Tp: ast.ConstraintUniqKey, Name: colDef.Name.Name.O, Keys: keys} - constraints = append(constraints, constraint) - col.Flag |= mysql.UniqueKeyFlag - case ast.ColumnOptionDefaultValue: - value, err := getDefaultValue(ctx, v, colDef.Tp.Tp, colDef.Tp.Decimal) - if err != nil { - return nil, nil, errors.Errorf("invalid default value - %s", errors.Trace(err)) - } - col.DefaultValue = value - hasDefaultValue = true - removeOnUpdateNowFlag(col) - case ast.ColumnOptionOnUpdate: - if !evaluator.IsCurrentTimeExpr(v.Expr) { - return nil, nil, errors.Errorf("invalid ON UPDATE for - %s", col.Name) - } - - col.Flag |= mysql.OnUpdateNowFlag - setOnUpdateNow = true - case ast.ColumnOptionFulltext, ast.ColumnOptionComment: - // Do nothing. - } - } - } - - setTimestampDefaultValue(col, hasDefaultValue, setOnUpdateNow) - - // Set `NoDefaultValueFlag` if this field doesn't have a default value and - // it is `not null` and not an `AUTO_INCREMENT` field or `TIMESTAMP` field. - setNoDefaultValueFlag(col, hasDefaultValue) - - err := checkDefaultValue(col, hasDefaultValue) - if err != nil { - return nil, nil, errors.Trace(err) - } - if col.Charset == charset.CharsetBin { - col.Flag |= mysql.BinaryFlag - } - return col, constraints, nil -} - -func getDefaultValue(ctx context.Context, c *ast.ColumnOption, tp byte, fsp int) (interface{}, error) { - if tp == mysql.TypeTimestamp || tp == mysql.TypeDatetime { - value, err := evaluator.GetTimeValue(ctx, c.Expr, tp, fsp) - if err != nil { - return nil, errors.Trace(err) - } - - // Value is nil means `default null`. - if value == nil { - return nil, nil - } - - // If value is mysql.Time, convert it to string. - if vv, ok := value.(mysql.Time); ok { - return vv.String(), nil - } - - return value, nil - } - v, err := evaluator.Eval(ctx, c.Expr) - if err != nil { - return nil, errors.Trace(err) - } - return v, nil -} - -func removeOnUpdateNowFlag(c *column.Col) { - // For timestamp Col, if it is set null or default value, - // OnUpdateNowFlag should be removed. - if mysql.HasTimestampFlag(c.Flag) { - c.Flag &= ^uint(mysql.OnUpdateNowFlag) - } -} - -func setTimestampDefaultValue(c *column.Col, hasDefaultValue bool, setOnUpdateNow bool) { - if hasDefaultValue { - return - } - - // For timestamp Col, if is not set default value or not set null, use current timestamp. - if mysql.HasTimestampFlag(c.Flag) && mysql.HasNotNullFlag(c.Flag) { - if setOnUpdateNow { - c.DefaultValue = evaluator.ZeroTimestamp - } else { - c.DefaultValue = evaluator.CurrentTimestamp - } - } -} - -func setNoDefaultValueFlag(c *column.Col, hasDefaultValue bool) { - if hasDefaultValue { - return - } - - if !mysql.HasNotNullFlag(c.Flag) { - return - } - - // Check if it is an `AUTO_INCREMENT` field or `TIMESTAMP` field. - if !mysql.HasAutoIncrementFlag(c.Flag) && !mysql.HasTimestampFlag(c.Flag) { - c.Flag |= mysql.NoDefaultValueFlag - } -} - -func checkDefaultValue(c *column.Col, hasDefaultValue bool) error { - if !hasDefaultValue { - return nil - } - - if c.DefaultValue != nil { - return nil - } - - // Set not null but default null is invalid. - if mysql.HasNotNullFlag(c.Flag) { - return errors.Errorf("invalid default value for %s", c.Name) - } - - return nil -} - -func checkDuplicateColumn(colDefs []*ast.ColumnDef) error { - colNames := map[string]bool{} - for _, colDef := range colDefs { - nameLower := colDef.Name.Name.O - if colNames[nameLower] { - return errors.Errorf("CREATE TABLE: duplicate column %s", colDef.Name) - } - colNames[nameLower] = true - } - return nil -} - -func checkConstraintNames(constraints []*ast.Constraint) error { - constrNames := map[string]bool{} - - // Check not empty constraint name whether is duplicated. - for _, constr := range constraints { - if constr.Tp == ast.ConstraintForeignKey { - // Ignore foreign key. - continue - } - if constr.Name != "" { - nameLower := strings.ToLower(constr.Name) - if constrNames[nameLower] { - return errors.Errorf("CREATE TABLE: duplicate key %s", constr.Name) - } - constrNames[nameLower] = true - } - } - - // Set empty constraint names. - for _, constr := range constraints { - if constr.Name == "" && len(constr.Keys) > 0 { - colName := constr.Keys[0].Column.Name.O - constrName := colName - i := 2 - for constrNames[strings.ToLower(constrName)] { - // We loop forever until we find constrName that haven't been used. - constrName = fmt.Sprintf("%s_%d", colName, i) - i++ - } - constr.Name = constrName - constrNames[constrName] = true - } - } - return nil -} - -func (d *ddl) buildTableInfo(tableName model.CIStr, cols []*column.Col, constraints []*ast.Constraint) (tbInfo *model.TableInfo, err error) { - tbInfo = &model.TableInfo{ - Name: tableName, - } - tbInfo.ID, err = d.genGlobalID() - if err != nil { - return nil, errors.Trace(err) - } - for _, v := range cols { - tbInfo.Columns = append(tbInfo.Columns, &v.ColumnInfo) - } - for _, constr := range constraints { - if constr.Tp == ast.ConstraintPrimaryKey { - if len(constr.Keys) == 1 { - key := constr.Keys[0] - col := column.FindCol(cols, key.Column.Name.O) - if col == nil { - return nil, errors.Errorf("No such column: %v", key) - } - switch col.Tp { - case mysql.TypeLong, mysql.TypeLonglong: - tbInfo.PKIsHandle = true - // Avoid creating index for PK handle column. - continue - } - } - } - - // 1. check if the column is exists - // 2. add index - indexColumns := make([]*model.IndexColumn, 0, len(constr.Keys)) - for _, key := range constr.Keys { - col := column.FindCol(cols, key.Column.Name.O) - if col == nil { - return nil, errors.Errorf("No such column: %v", key) - } - indexColumns = append(indexColumns, &model.IndexColumn{ - Name: key.Column.Name, - Offset: col.Offset, - Length: key.Length, - }) - } - idxInfo := &model.IndexInfo{ - Name: model.NewCIStr(constr.Name), - Columns: indexColumns, - State: model.StatePublic, - } - switch constr.Tp { - case ast.ConstraintPrimaryKey: - idxInfo.Unique = true - idxInfo.Primary = true - idxInfo.Name = model.NewCIStr(column.PrimaryKeyName) - case ast.ConstraintUniq, ast.ConstraintUniqKey, ast.ConstraintUniqIndex: - idxInfo.Unique = true - } - if constr.Option != nil { - idxInfo.Comment = constr.Option.Comment - idxInfo.Tp = constr.Option.Tp - } else { - // Use btree as default index type. - idxInfo.Tp = model.IndexTypeBtree - } - idxInfo.ID, err = d.genGlobalID() - if err != nil { - return nil, errors.Trace(err) - } - tbInfo.Indices = append(tbInfo.Indices, idxInfo) - } - return -} - -func (d *ddl) CreateTable(ctx context.Context, ident ast.Ident, colDefs []*ast.ColumnDef, - constraints []*ast.Constraint, options []*ast.TableOption) (err error) { - is := d.GetInformationSchema() - schema, ok := is.SchemaByName(ident.Schema) - if !ok { - return infoschema.DatabaseNotExists.Gen("database %s not exists", ident.Schema) - } - if is.TableExists(ident.Schema, ident.Name) { - return errors.Trace(infoschema.TableExists) - } - if err = checkDuplicateColumn(colDefs); err != nil { - return errors.Trace(err) - } - - cols, newConstraints, err := d.buildColumnsAndConstraints(ctx, colDefs, constraints) - if err != nil { - return errors.Trace(err) - } - - err = checkConstraintNames(newConstraints) - if err != nil { - return errors.Trace(err) - } - - tbInfo, err := d.buildTableInfo(ident.Name, cols, newConstraints) - if err != nil { - return errors.Trace(err) - } - - job := &model.Job{ - SchemaID: schema.ID, - TableID: tbInfo.ID, - Type: model.ActionCreateTable, - Args: []interface{}{tbInfo}, - } - - err = d.startDDLJob(ctx, job) - if err == nil { - err = d.handleTableOptions(options, tbInfo, schema.ID) - } - err = d.hook.OnChanged(err) - return errors.Trace(err) -} - -func (d *ddl) handleTableOptions(options []*ast.TableOption, tbInfo *model.TableInfo, schemaID int64) error { - for _, op := range options { - if op.Tp == ast.TableOptionAutoIncrement { - alloc := autoid.NewAllocator(d.store, schemaID) - tbInfo.State = model.StatePublic - tb, err := table.TableFromMeta(alloc, tbInfo) - if err != nil { - return errors.Trace(err) - } - // The operation of the minus 1 to make sure that the current value doesn't be used, - // the next Alloc operation will get this value. - // Its behavior is consistent with MySQL. - if err = tb.RebaseAutoID(int64(op.UintValue-1), false); err != nil { - return errors.Trace(err) - } - } - } - - return nil -} - -func (d *ddl) AlterTable(ctx context.Context, ident ast.Ident, specs []*ast.AlterTableSpec) (err error) { - // now we only allow one schema changes at the same time. - if len(specs) != 1 { - return errors.New("can't run multi schema changes in one DDL") - } - - for _, spec := range specs { - switch spec.Tp { - case ast.AlterTableAddColumn: - err = d.AddColumn(ctx, ident, spec) - case ast.AlterTableDropColumn: - err = d.DropColumn(ctx, ident, spec.DropColumn.Name) - case ast.AlterTableDropIndex: - err = d.DropIndex(ctx, ident, model.NewCIStr(spec.Name)) - case ast.AlterTableAddConstraint: - constr := spec.Constraint - switch spec.Constraint.Tp { - case ast.ConstraintKey, ast.ConstraintIndex: - err = d.CreateIndex(ctx, ident, false, model.NewCIStr(constr.Name), spec.Constraint.Keys) - case ast.ConstraintUniq, ast.ConstraintUniqIndex, ast.ConstraintUniqKey: - err = d.CreateIndex(ctx, ident, true, model.NewCIStr(constr.Name), spec.Constraint.Keys) - default: - // nothing to do now. - } - default: - // nothing to do now. - } - - if err != nil { - return errors.Trace(err) - } - } - - return nil -} - -func checkColumnConstraint(constraints []*ast.ColumnOption) error { - for _, constraint := range constraints { - switch constraint.Tp { - case ast.ColumnOptionAutoIncrement, ast.ColumnOptionPrimaryKey, ast.ColumnOptionUniq, ast.ColumnOptionUniqKey: - return errors.Errorf("unsupported add column constraint - %v", constraint.Tp) - } - } - - return nil -} - -// AddColumn will add a new column to the table. -func (d *ddl) AddColumn(ctx context.Context, ti ast.Ident, spec *ast.AlterTableSpec) error { - // Check whether the added column constraints are supported. - err := checkColumnConstraint(spec.Column.Options) - if err != nil { - return errors.Trace(err) - } - - is := d.infoHandle.Get() - schema, ok := is.SchemaByName(ti.Schema) - if !ok { - return errors.Trace(infoschema.DatabaseNotExists) - } - - t, err := is.TableByName(ti.Schema, ti.Name) - if err != nil { - return errors.Trace(infoschema.TableNotExists) - } - - // Check whether added column has existed. - colName := spec.Column.Name.Name.O - col := column.FindCol(t.Cols(), colName) - if col != nil { - return errors.Errorf("column %s already exists", colName) - } - - // ingore table constraints now, maybe return error later - // we use length(t.Cols()) as the default offset first, later we will change the - // column's offset later. - col, _, err = d.buildColumnAndConstraint(ctx, len(t.Cols()), spec.Column) - if err != nil { - return errors.Trace(err) - } - - job := &model.Job{ - SchemaID: schema.ID, - TableID: t.Meta().ID, - Type: model.ActionAddColumn, - Args: []interface{}{&col.ColumnInfo, spec.Position, 0}, - } - - err = d.startDDLJob(ctx, job) - err = d.hook.OnChanged(err) - return errors.Trace(err) -} - -// DropColumn will drop a column from the table, now we don't support drop the column with index covered. -func (d *ddl) DropColumn(ctx context.Context, ti ast.Ident, colName model.CIStr) error { - is := d.infoHandle.Get() - schema, ok := is.SchemaByName(ti.Schema) - if !ok { - return errors.Trace(infoschema.DatabaseNotExists) - } - - t, err := is.TableByName(ti.Schema, ti.Name) - if err != nil { - return errors.Trace(infoschema.TableNotExists) - } - - // Check whether dropped column has existed. - col := column.FindCol(t.Cols(), colName.L) - if col == nil { - return errors.Errorf("column %s doesn’t exist", colName.L) - } - - job := &model.Job{ - SchemaID: schema.ID, - TableID: t.Meta().ID, - Type: model.ActionDropColumn, - Args: []interface{}{colName}, - } - - err = d.startDDLJob(ctx, job) - err = d.hook.OnChanged(err) - return errors.Trace(err) -} - -// DropTable will proceed even if some table in the list does not exists. -func (d *ddl) DropTable(ctx context.Context, ti ast.Ident) (err error) { - is := d.GetInformationSchema() - schema, ok := is.SchemaByName(ti.Schema) - if !ok { - return infoschema.DatabaseNotExists.Gen("database %s not exists", ti.Schema) - } - - tb, err := is.TableByName(ti.Schema, ti.Name) - if err != nil { - return errors.Trace(infoschema.TableNotExists) - } - - job := &model.Job{ - SchemaID: schema.ID, - TableID: tb.Meta().ID, - Type: model.ActionDropTable, - } - - err = d.startDDLJob(ctx, job) - err = d.hook.OnChanged(err) - return errors.Trace(err) -} - -func (d *ddl) CreateIndex(ctx context.Context, ti ast.Ident, unique bool, indexName model.CIStr, idxColNames []*ast.IndexColName) error { - is := d.infoHandle.Get() - schema, ok := is.SchemaByName(ti.Schema) - if !ok { - return infoschema.DatabaseNotExists.Gen("database %s not exists", ti.Schema) - } - - t, err := is.TableByName(ti.Schema, ti.Name) - if err != nil { - return errors.Trace(infoschema.TableNotExists) - } - indexID, err := d.genGlobalID() - if err != nil { - return errors.Trace(err) - } - - job := &model.Job{ - SchemaID: schema.ID, - TableID: t.Meta().ID, - Type: model.ActionAddIndex, - Args: []interface{}{unique, indexName, indexID, idxColNames}, - } - - err = d.startDDLJob(ctx, job) - err = d.hook.OnChanged(err) - return errors.Trace(err) -} - -func (d *ddl) DropIndex(ctx context.Context, ti ast.Ident, indexName model.CIStr) error { - is := d.infoHandle.Get() - schema, ok := is.SchemaByName(ti.Schema) - if !ok { - return errors.Trace(infoschema.DatabaseNotExists) - } - - t, err := is.TableByName(ti.Schema, ti.Name) - if err != nil { - return errors.Trace(infoschema.TableNotExists) - } - - job := &model.Job{ - SchemaID: schema.ID, - TableID: t.Meta().ID, - Type: model.ActionDropIndex, - Args: []interface{}{indexName}, - } - - err = d.startDDLJob(ctx, job) - err = d.hook.OnChanged(err) - return errors.Trace(err) -} - -// findCol finds column in cols by name. -func findCol(cols []*model.ColumnInfo, name string) *model.ColumnInfo { - name = strings.ToLower(name) - for _, col := range cols { - if col.Name.L == name { - return col - } - } - - return nil -} diff --git a/vendor/github.com/pingcap/tidb/ddl/ddl_worker.go b/vendor/github.com/pingcap/tidb/ddl/ddl_worker.go deleted file mode 100644 index e8bd97024..000000000 --- a/vendor/github.com/pingcap/tidb/ddl/ddl_worker.go +++ /dev/null @@ -1,392 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ddl - -import ( - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/terror" -) - -func (d *ddl) startDDLJob(ctx context.Context, job *model.Job) error { - // for every DDL, we must commit current transaction. - if err := ctx.FinishTxn(false); err != nil { - return errors.Trace(err) - } - - // Create a new job and queue it. - err := kv.RunInNewTxn(d.store, true, func(txn kv.Transaction) error { - t := meta.NewMeta(txn) - var err error - job.ID, err = t.GenGlobalID() - if err != nil { - return errors.Trace(err) - } - - err = t.EnQueueDDLJob(job) - return errors.Trace(err) - }) - - if err != nil { - return errors.Trace(err) - } - - // notice worker that we push a new job and wait the job done. - asyncNotify(d.ddlJobCh) - - log.Warnf("[ddl] start DDL job %v", job) - - jobID := job.ID - - var historyJob *model.Job - - // for a job from start to end, the state of it will be none -> delete only -> write only -> reorganization -> public - // for every state changes, we will wait as lease 2 * lease time, so here the ticker check is 10 * lease. - ticker := time.NewTicker(chooseLeaseTime(10*d.lease, 10*time.Second)) - defer ticker.Stop() - for { - select { - case <-d.ddlJobDoneCh: - case <-ticker.C: - } - - historyJob, err = d.getHistoryDDLJob(jobID) - if err != nil { - log.Errorf("[ddl] get history DDL job err %v, check again", err) - continue - } else if historyJob == nil { - log.Warnf("[ddl] DDL job %d is not in history, maybe not run", jobID) - continue - } - - // if a job is a history table, the state must be JobDone or JobCancel. - if historyJob.State == model.JobDone { - return nil - } - - return errors.Errorf(historyJob.Error) - } -} - -func (d *ddl) getHistoryDDLJob(id int64) (*model.Job, error) { - var job *model.Job - - err := kv.RunInNewTxn(d.store, false, func(txn kv.Transaction) error { - t := meta.NewMeta(txn) - var err1 error - job, err1 = t.GetHistoryDDLJob(id) - return errors.Trace(err1) - }) - - return job, errors.Trace(err) -} - -func asyncNotify(ch chan struct{}) { - select { - case ch <- struct{}{}: - default: - } -} - -func (d *ddl) checkOwner(t *meta.Meta, flag JobType) (*model.Owner, error) { - var owner *model.Owner - var err error - - switch flag { - case ddlJobFlag: - owner, err = t.GetDDLJobOwner() - case bgJobFlag: - owner, err = t.GetBgJobOwner() - default: - err = errInvalidJobFlag - } - if err != nil { - return nil, errors.Trace(err) - } - - if owner == nil { - owner = &model.Owner{} - // try to set onwer - owner.OwnerID = d.uuid - } - - now := time.Now().UnixNano() - // we must wait 2 * lease time to guarantee other servers update the schema, - // the owner will update its owner status every 2 * lease time, so here we use - // 4 * lease to check its timeout. - maxTimeout := int64(4 * d.lease) - if owner.OwnerID == d.uuid || now-owner.LastUpdateTS > maxTimeout { - owner.OwnerID = d.uuid - owner.LastUpdateTS = now - // update status. - switch flag { - case ddlJobFlag: - err = t.SetDDLJobOwner(owner) - case bgJobFlag: - err = t.SetBgJobOwner(owner) - } - if err != nil { - return nil, errors.Trace(err) - } - log.Debugf("[ddl] become %s job owner %s", flag, owner.OwnerID) - } - - if owner.OwnerID != d.uuid { - log.Debugf("[ddl] not %s job owner, owner is %s", flag, owner.OwnerID) - return nil, errors.Trace(ErrNotOwner) - } - - return owner, nil -} - -func (d *ddl) getFirstDDLJob(t *meta.Meta) (*model.Job, error) { - job, err := t.GetDDLJob(0) - return job, errors.Trace(err) -} - -// every time we enter another state except final state, we must call this function. -func (d *ddl) updateDDLJob(t *meta.Meta, job *model.Job) error { - err := t.UpdateDDLJob(0, job) - return errors.Trace(err) -} - -func (d *ddl) finishDDLJob(t *meta.Meta, job *model.Job) error { - log.Warnf("[ddl] finish DDL job %v", job) - // done, notice and run next job. - _, err := t.DeQueueDDLJob() - if err != nil { - return errors.Trace(err) - } - switch job.Type { - case model.ActionDropSchema, model.ActionDropTable: - if err = d.prepareBgJob(job); err != nil { - return errors.Trace(err) - } - } - - err = t.AddHistoryDDLJob(job) - return errors.Trace(err) -} - -// ErrNotOwner means we are not owner and can't handle DDL jobs. -var ErrNotOwner = errors.New("DDL: not owner") - -// ErrWorkerClosed means we have already closed the DDL worker. -var ErrWorkerClosed = errors.New("DDL: worker is closed") - -var errInvalidJobFlag = errors.New("DDL: invalid job flag") - -// JobType is job type, including ddl/background. -type JobType int - -const ( - ddlJobFlag = iota + 1 - bgJobFlag -) - -func (j JobType) String() string { - switch j { - case ddlJobFlag: - return "ddl" - case bgJobFlag: - return "background" - } - - return "unknown" -} - -func (d *ddl) handleDDLJobQueue() error { - for { - if d.isClosed() { - return nil - } - - waitTime := 2 * d.lease - - var job *model.Job - err := kv.RunInNewTxn(d.store, false, func(txn kv.Transaction) error { - t := meta.NewMeta(txn) - owner, err := d.checkOwner(t, ddlJobFlag) - if terror.ErrorEqual(err, ErrNotOwner) { - // we are not owner, return and retry checking later. - return nil - } else if err != nil { - return errors.Trace(err) - } - - // become the owner - // get the first job and run - job, err = d.getFirstDDLJob(t) - if job == nil || err != nil { - return errors.Trace(err) - } - - if job.IsRunning() { - // if we enter a new state, crash when waiting 2 * lease time, and restart quickly, - // we may run the job immediately again, but we don't wait enough 2 * lease time to - // let other servers update the schema. - // so here we must check the elapsed time from last update, if < 2 * lease, we must - // wait again. - elapsed := time.Duration(time.Now().UnixNano() - job.LastUpdateTS) - if elapsed > 0 && elapsed < waitTime { - log.Warnf("[ddl] the elapsed time from last update is %s < %s, wait again", elapsed, waitTime) - waitTime -= elapsed - return nil - } - } - - log.Warnf("[ddl] run DDL job %v", job) - - d.hook.OnJobRunBefore(job) - - // if run job meets error, we will save this error in job Error - // and retry later if the job is not cancelled. - d.runDDLJob(t, job) - - if job.IsFinished() { - err = d.finishDDLJob(t, job) - } else { - err = d.updateDDLJob(t, job) - } - if err != nil { - return errors.Trace(err) - } - - // running job may cost some time, so here we must update owner status to - // prevent other become the owner. - owner.LastUpdateTS = time.Now().UnixNano() - err = t.SetDDLJobOwner(owner) - - return errors.Trace(err) - }) - if err != nil { - return errors.Trace(err) - } else if job == nil { - // no job now, return and retry get later. - return nil - } - - d.hook.OnJobUpdated(job) - - // here means the job enters another state (delete only, write only, public, etc...) or is cancelled. - // if the job is done or still running, we will wait 2 * lease time to guarantee other servers to update - // the newest schema. - if job.State == model.JobRunning || job.State == model.JobDone { - d.waitSchemaChanged(waitTime) - } - - if job.IsFinished() { - d.startBgJob(job.Type) - asyncNotify(d.ddlJobDoneCh) - } - } -} - -func chooseLeaseTime(n1 time.Duration, n2 time.Duration) time.Duration { - if n1 > 0 { - return n1 - } - - return n2 -} - -// onDDLWorker is for async online schema change, it will try to become the owner first, -// then wait or pull the job queue to handle a schema change job. -func (d *ddl) onDDLWorker() { - defer d.wait.Done() - - // we use 4 * lease time to check owner's timeout, so here, we will update owner's status - // every 2 * lease time, if lease is 0, we will use default 10s. - checkTime := chooseLeaseTime(2*d.lease, 10*time.Second) - - ticker := time.NewTicker(checkTime) - defer ticker.Stop() - - for { - select { - case <-ticker.C: - log.Debugf("[ddl] wait %s to check DDL status again", checkTime) - case <-d.ddlJobCh: - case <-d.quitCh: - return - } - - err := d.handleDDLJobQueue() - if err != nil { - log.Errorf("[ddl] handle ddl job err %v", errors.ErrorStack(err)) - } - } -} - -func (d *ddl) runDDLJob(t *meta.Meta, job *model.Job) { - if job.IsFinished() { - return - } - - job.State = model.JobRunning - - var err error - switch job.Type { - case model.ActionCreateSchema: - err = d.onCreateSchema(t, job) - case model.ActionDropSchema: - err = d.onDropSchema(t, job) - case model.ActionCreateTable: - err = d.onCreateTable(t, job) - case model.ActionDropTable: - err = d.onDropTable(t, job) - case model.ActionAddColumn: - err = d.onAddColumn(t, job) - case model.ActionDropColumn: - err = d.onDropColumn(t, job) - case model.ActionAddIndex: - err = d.onCreateIndex(t, job) - case model.ActionDropIndex: - err = d.onDropIndex(t, job) - default: - // invalid job, cancel it. - job.State = model.JobCancelled - err = errors.Errorf("invalid ddl job %v", job) - } - - // saves error in job, so that others can know error happens. - if err != nil { - // if job is not cancelled, we should log this error. - if job.State != model.JobCancelled { - log.Errorf("run ddl job err %v", errors.ErrorStack(err)) - } - - job.Error = err.Error() - job.ErrorCount++ - } -} - -// for every lease seconds, we will re-update the whole schema, so we will wait 2 * lease time -// to guarantee that all servers have already updated schema. -func (d *ddl) waitSchemaChanged(waitTime time.Duration) { - if waitTime == 0 { - return - } - - select { - case <-time.After(waitTime): - case <-d.quitCh: - } -} diff --git a/vendor/github.com/pingcap/tidb/ddl/index.go b/vendor/github.com/pingcap/tidb/ddl/index.go deleted file mode 100644 index d4f5fc499..000000000 --- a/vendor/github.com/pingcap/tidb/ddl/index.go +++ /dev/null @@ -1,473 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ddl - -import ( - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/table/tables" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/types" -) - -func buildIndexInfo(tblInfo *model.TableInfo, unique bool, indexName model.CIStr, indexID int64, idxColNames []*ast.IndexColName) (*model.IndexInfo, error) { - // build offsets - idxColumns := make([]*model.IndexColumn, 0, len(idxColNames)) - for _, ic := range idxColNames { - col := findCol(tblInfo.Columns, ic.Column.Name.O) - if col == nil { - return nil, errors.Errorf("CREATE INDEX: column does not exist: %s", ic.Column.Name.O) - } - - idxColumns = append(idxColumns, &model.IndexColumn{ - Name: col.Name, - Offset: col.Offset, - Length: ic.Length, - }) - } - // create index info - idxInfo := &model.IndexInfo{ - ID: indexID, - Name: indexName, - Columns: idxColumns, - Unique: unique, - State: model.StateNone, - } - return idxInfo, nil -} - -func addIndexColumnFlag(tblInfo *model.TableInfo, indexInfo *model.IndexInfo) { - col := indexInfo.Columns[0] - - if indexInfo.Unique && len(indexInfo.Columns) == 1 { - tblInfo.Columns[col.Offset].Flag |= mysql.UniqueKeyFlag - } else { - tblInfo.Columns[col.Offset].Flag |= mysql.MultipleKeyFlag - } -} - -func dropIndexColumnFlag(tblInfo *model.TableInfo, indexInfo *model.IndexInfo) { - col := indexInfo.Columns[0] - - if indexInfo.Unique && len(indexInfo.Columns) == 1 { - tblInfo.Columns[col.Offset].Flag &= ^uint(mysql.UniqueKeyFlag) - } else { - tblInfo.Columns[col.Offset].Flag &= ^uint(mysql.MultipleKeyFlag) - } - - // other index may still cover this col - for _, index := range tblInfo.Indices { - if index.Name.L == indexInfo.Name.L { - continue - } - - if index.Columns[0].Name.L != col.Name.L { - continue - } - - addIndexColumnFlag(tblInfo, index) - } -} - -func (d *ddl) onCreateIndex(t *meta.Meta, job *model.Job) error { - schemaID := job.SchemaID - tblInfo, err := d.getTableInfo(t, job) - if err != nil { - return errors.Trace(err) - } - - var ( - unique bool - indexName model.CIStr - indexID int64 - idxColNames []*ast.IndexColName - ) - - err = job.DecodeArgs(&unique, &indexName, &indexID, &idxColNames) - if err != nil { - job.State = model.JobCancelled - return errors.Trace(err) - } - - var indexInfo *model.IndexInfo - for _, idx := range tblInfo.Indices { - if idx.Name.L == indexName.L { - if idx.State == model.StatePublic { - // we already have a index with same index name - job.State = model.JobCancelled - return errors.Errorf("CREATE INDEX: index already exist %s", indexName) - } - - indexInfo = idx - } - } - - if indexInfo == nil { - indexInfo, err = buildIndexInfo(tblInfo, unique, indexName, indexID, idxColNames) - if err != nil { - job.State = model.JobCancelled - return errors.Trace(err) - } - tblInfo.Indices = append(tblInfo.Indices, indexInfo) - } - - _, err = t.GenSchemaVersion() - if err != nil { - return errors.Trace(err) - } - - switch indexInfo.State { - case model.StateNone: - // none -> delete only - job.SchemaState = model.StateDeleteOnly - indexInfo.State = model.StateDeleteOnly - err = t.UpdateTable(schemaID, tblInfo) - return errors.Trace(err) - case model.StateDeleteOnly: - // delete only -> write only - job.SchemaState = model.StateWriteOnly - indexInfo.State = model.StateWriteOnly - err = t.UpdateTable(schemaID, tblInfo) - return errors.Trace(err) - case model.StateWriteOnly: - // write only -> reorganization - job.SchemaState = model.StateWriteReorganization - indexInfo.State = model.StateWriteReorganization - // initialize SnapshotVer to 0 for later reorganization check. - job.SnapshotVer = 0 - err = t.UpdateTable(schemaID, tblInfo) - return errors.Trace(err) - case model.StateWriteReorganization: - // reorganization -> public - reorgInfo, err := d.getReorgInfo(t, job) - if err != nil || reorgInfo.first { - // if we run reorg firstly, we should update the job snapshot version - // and then run the reorg next time. - return errors.Trace(err) - } - - var tbl table.Table - tbl, err = d.getTable(schemaID, tblInfo) - if err != nil { - return errors.Trace(err) - } - - err = d.runReorgJob(func() error { - return d.addTableIndex(tbl, indexInfo, reorgInfo) - }) - - if terror.ErrorEqual(err, errWaitReorgTimeout) { - // if timeout, we should return, check for the owner and re-wait job done. - return nil - } - if err != nil { - return errors.Trace(err) - } - - indexInfo.State = model.StatePublic - // set column index flag. - addIndexColumnFlag(tblInfo, indexInfo) - if err = t.UpdateTable(schemaID, tblInfo); err != nil { - return errors.Trace(err) - } - - // finish this job - job.SchemaState = model.StatePublic - job.State = model.JobDone - return nil - default: - return errors.Errorf("invalid index state %v", tblInfo.State) - } -} - -func (d *ddl) onDropIndex(t *meta.Meta, job *model.Job) error { - schemaID := job.SchemaID - tblInfo, err := d.getTableInfo(t, job) - if err != nil { - return errors.Trace(err) - } - - var indexName model.CIStr - if err = job.DecodeArgs(&indexName); err != nil { - job.State = model.JobCancelled - return errors.Trace(err) - } - - var indexInfo *model.IndexInfo - for _, idx := range tblInfo.Indices { - if idx.Name.L == indexName.L { - indexInfo = idx - } - } - - if indexInfo == nil { - job.State = model.JobCancelled - return errors.Errorf("index %s doesn't exist", indexName) - } - - _, err = t.GenSchemaVersion() - if err != nil { - return errors.Trace(err) - } - - switch indexInfo.State { - case model.StatePublic: - // public -> write only - job.SchemaState = model.StateWriteOnly - indexInfo.State = model.StateWriteOnly - err = t.UpdateTable(schemaID, tblInfo) - return errors.Trace(err) - case model.StateWriteOnly: - // write only -> delete only - job.SchemaState = model.StateDeleteOnly - indexInfo.State = model.StateDeleteOnly - err = t.UpdateTable(schemaID, tblInfo) - return errors.Trace(err) - case model.StateDeleteOnly: - // delete only -> reorganization - job.SchemaState = model.StateDeleteReorganization - indexInfo.State = model.StateDeleteReorganization - err = t.UpdateTable(schemaID, tblInfo) - return errors.Trace(err) - case model.StateDeleteReorganization: - // reorganization -> absent - tbl, err := d.getTable(schemaID, tblInfo) - if err != nil { - return errors.Trace(err) - } - - err = d.runReorgJob(func() error { - return d.dropTableIndex(tbl, indexInfo) - }) - - if terror.ErrorEqual(err, errWaitReorgTimeout) { - // if timeout, we should return, check for the owner and re-wait job done. - return nil - } - if err != nil { - return errors.Trace(err) - } - - // all reorganization jobs done, drop this index - newIndices := make([]*model.IndexInfo, 0, len(tblInfo.Indices)) - for _, idx := range tblInfo.Indices { - if idx.Name.L != indexName.L { - newIndices = append(newIndices, idx) - } - } - tblInfo.Indices = newIndices - // set column index flag. - dropIndexColumnFlag(tblInfo, indexInfo) - if err = t.UpdateTable(schemaID, tblInfo); err != nil { - return errors.Trace(err) - } - - // finish this job - job.SchemaState = model.StateNone - job.State = model.JobDone - return nil - default: - return errors.Errorf("invalid table state %v", tblInfo.State) - } -} - -func checkRowExist(txn kv.Transaction, t table.Table, handle int64) (bool, error) { - _, err := txn.Get(t.RecordKey(handle, nil)) - if terror.ErrorEqual(err, kv.ErrNotExist) { - // If row doesn't exist, we may have deleted the row already, - // no need to add index again. - return false, nil - } else if err != nil { - return false, errors.Trace(err) - } - - return true, nil -} - -func fetchRowColVals(txn kv.Transaction, t table.Table, handle int64, indexInfo *model.IndexInfo) ([]types.Datum, error) { - // fetch datas - cols := t.Cols() - vals := make([]types.Datum, 0, len(indexInfo.Columns)) - for _, v := range indexInfo.Columns { - col := cols[v.Offset] - k := t.RecordKey(handle, col) - data, err := txn.Get(k) - if err != nil { - return nil, errors.Trace(err) - } - val, err := tables.DecodeValue(data, &col.FieldType) - if err != nil { - return nil, errors.Trace(err) - } - vals = append(vals, val) - } - - return vals, nil -} - -const maxBatchSize = 1024 - -// How to add index in reorganization state? -// 1. Generate a snapshot with special version. -// 2. Traverse the snapshot, get every row in the table. -// 3. For one row, if the row has been already deleted, skip to next row. -// 4. If not deleted, check whether index has existed, if existed, skip to next row. -// 5. If index doesn't exist, create the index and then continue to handle next row. -func (d *ddl) addTableIndex(t table.Table, indexInfo *model.IndexInfo, reorgInfo *reorgInfo) error { - seekHandle := reorgInfo.Handle - version := reorgInfo.SnapshotVer - for { - handles, err := d.getSnapshotRows(t, version, seekHandle) - if err != nil { - return errors.Trace(err) - } else if len(handles) == 0 { - return nil - } - - seekHandle = handles[len(handles)-1] + 1 - - err = d.backfillTableIndex(t, indexInfo, handles, reorgInfo) - if err != nil { - return errors.Trace(err) - } - } -} - -func (d *ddl) getSnapshotRows(t table.Table, version uint64, seekHandle int64) ([]int64, error) { - ver := kv.Version{Ver: version} - - snap, err := d.store.GetSnapshot(ver) - if err != nil { - return nil, errors.Trace(err) - } - - defer snap.Release() - - firstKey := t.RecordKey(seekHandle, nil) - - it, err := snap.Seek(firstKey) - if err != nil { - return nil, errors.Trace(err) - } - defer it.Close() - - handles := make([]int64, 0, maxBatchSize) - - for it.Valid() { - if !it.Key().HasPrefix(t.RecordPrefix()) { - break - } - - var handle int64 - handle, err = tables.DecodeRecordKeyHandle(it.Key()) - if err != nil { - return nil, errors.Trace(err) - } - - rk := t.RecordKey(handle, nil) - - handles = append(handles, handle) - if len(handles) == maxBatchSize { - break - } - - err = kv.NextUntil(it, util.RowKeyPrefixFilter(rk)) - if terror.ErrorEqual(err, kv.ErrNotExist) { - break - } else if err != nil { - return nil, errors.Trace(err) - } - } - - return handles, nil -} - -func lockRow(txn kv.Transaction, t table.Table, h int64) error { - // Get row lock key - lockKey := t.RecordKey(h, nil) - // set row lock key to current txn - err := txn.Set(lockKey, []byte(txn.String())) - return errors.Trace(err) -} - -func (d *ddl) backfillTableIndex(t table.Table, indexInfo *model.IndexInfo, handles []int64, reorgInfo *reorgInfo) error { - kvX := kv.NewKVIndex(t.IndexPrefix(), indexInfo.Name.L, indexInfo.ID, indexInfo.Unique) - - for _, handle := range handles { - log.Debug("[ddl] building index...", handle) - - err := kv.RunInNewTxn(d.store, true, func(txn kv.Transaction) error { - if err := d.isReorgRunnable(txn); err != nil { - return errors.Trace(err) - } - - // first check row exists - exist, err := checkRowExist(txn, t, handle) - if err != nil { - return errors.Trace(err) - } else if !exist { - // row doesn't exist, skip it. - return nil - } - - var vals []types.Datum - vals, err = fetchRowColVals(txn, t, handle, indexInfo) - if err != nil { - return errors.Trace(err) - } - - exist, _, err = kvX.Exist(txn, vals, handle) - if err != nil { - return errors.Trace(err) - } else if exist { - // index already exists, skip it. - return nil - } - - err = lockRow(txn, t, handle) - if err != nil { - return errors.Trace(err) - } - - // create the index. - err = kvX.Create(txn, vals, handle) - if err != nil { - return errors.Trace(err) - } - - // update reorg next handle - return errors.Trace(reorgInfo.UpdateHandle(txn, handle)) - }) - - if err != nil { - return errors.Trace(err) - } - } - - return nil -} - -func (d *ddl) dropTableIndex(t table.Table, indexInfo *model.IndexInfo) error { - prefix := kv.GenIndexPrefix(t.IndexPrefix(), indexInfo.ID) - err := d.delKeysWithPrefix(prefix) - - return errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/ddl/reorg.go b/vendor/github.com/pingcap/tidb/ddl/reorg.go deleted file mode 100644 index a00c07297..000000000 --- a/vendor/github.com/pingcap/tidb/ddl/reorg.go +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ddl - -import ( - "fmt" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/terror" -) - -var _ context.Context = &reorgContext{} - -// reorgContext implements context.Context interface for reorganization use. -type reorgContext struct { - store kv.Storage - m map[fmt.Stringer]interface{} - txn kv.Transaction -} - -func (c *reorgContext) GetTxn(forceNew bool) (kv.Transaction, error) { - if forceNew { - if c.txn != nil { - if err := c.txn.Commit(); err != nil { - return nil, errors.Trace(err) - } - c.txn = nil - } - } - - if c.txn != nil { - return c.txn, nil - } - - txn, err := c.store.Begin() - if err != nil { - return nil, errors.Trace(err) - } - - c.txn = txn - return c.txn, nil -} - -func (c *reorgContext) FinishTxn(rollback bool) error { - if c.txn == nil { - return nil - } - - var err error - if rollback { - err = c.txn.Rollback() - } else { - err = c.txn.Commit() - } - - c.txn = nil - - return errors.Trace(err) -} - -func (c *reorgContext) SetValue(key fmt.Stringer, value interface{}) { - c.m[key] = value -} - -func (c *reorgContext) Value(key fmt.Stringer) interface{} { - return c.m[key] -} - -func (c *reorgContext) ClearValue(key fmt.Stringer) { - delete(c.m, key) -} - -func (d *ddl) newReorgContext() context.Context { - c := &reorgContext{ - store: d.store, - m: make(map[fmt.Stringer]interface{}), - } - - return c -} - -const waitReorgTimeout = 10 * time.Second - -var errWaitReorgTimeout = errors.New("wait for reorganization timeout") - -func (d *ddl) runReorgJob(f func() error) error { - if d.reorgDoneCh == nil { - // start a reorganization job - d.wait.Add(1) - d.reorgDoneCh = make(chan error, 1) - go func() { - defer d.wait.Done() - d.reorgDoneCh <- f() - }() - } - - waitTimeout := waitReorgTimeout - // if d.lease is 0, we are using a local storage, - // and we can wait the reorganization to be done here. - // if d.lease > 0, we don't need to wait here because - // we will wait 2 * lease outer and try checking again, - // so we use a very little timeout here. - if d.lease > 0 { - waitTimeout = 1 * time.Millisecond - } - - // wait reorganization job done or timeout - select { - case err := <-d.reorgDoneCh: - d.reorgDoneCh = nil - return errors.Trace(err) - case <-d.quitCh: - // we return errWaitReorgTimeout here too, so that outer loop will break. - return errWaitReorgTimeout - case <-time.After(waitTimeout): - // if timeout, we will return, check the owner and retry to wait job done again. - return errWaitReorgTimeout - } -} - -func (d *ddl) isReorgRunnable(txn kv.Transaction) error { - if d.isClosed() { - // worker is closed, can't run reorganization. - return errors.Trace(ErrWorkerClosed) - } - - t := meta.NewMeta(txn) - owner, err := t.GetDDLJobOwner() - if err != nil { - return errors.Trace(err) - } else if owner == nil || owner.OwnerID != d.uuid { - // if no owner, we will try later, so here just return error. - // or another server is owner, return error too. - return errors.Trace(ErrNotOwner) - } - - return nil -} - -func (d *ddl) delKeysWithPrefix(prefix kv.Key) error { - for { - keys := make([]kv.Key, 0, maxBatchSize) - err := kv.RunInNewTxn(d.store, true, func(txn kv.Transaction) error { - if err1 := d.isReorgRunnable(txn); err1 != nil { - return errors.Trace(err1) - } - - iter, err := txn.Seek(prefix) - if err != nil { - return errors.Trace(err) - } - - defer iter.Close() - for i := 0; i < maxBatchSize; i++ { - if iter.Valid() && iter.Key().HasPrefix(prefix) { - keys = append(keys, iter.Key().Clone()) - err = iter.Next() - if err != nil { - return errors.Trace(err) - } - } else { - break - } - } - - for _, key := range keys { - err := txn.Delete(key) - // must skip ErrNotExist - // if key doesn't exist, skip this error. - if err != nil && !terror.ErrorEqual(err, kv.ErrNotExist) { - return errors.Trace(err) - } - } - - return nil - }) - - if err != nil { - return errors.Trace(err) - } - - // delete no keys, return. - if len(keys) == 0 { - return nil - } - } -} - -type reorgInfo struct { - *model.Job - Handle int64 - d *ddl - first bool -} - -func (d *ddl) getReorgInfo(t *meta.Meta, job *model.Job) (*reorgInfo, error) { - var err error - - info := &reorgInfo{ - Job: job, - d: d, - first: job.SnapshotVer == 0, - } - - if info.first { - // get the current version for reorganization if we don't have - var ver kv.Version - ver, err = d.store.CurrentVersion() - if err != nil { - return nil, errors.Trace(err) - } else if ver.Ver <= 0 { - return nil, errors.Errorf("invalid storage current version %d", ver.Ver) - } - - job.SnapshotVer = ver.Ver - } else { - info.Handle, err = t.GetDDLReorgHandle(job) - if err != nil { - return nil, errors.Trace(err) - } - } - - if info.Handle > 0 { - // we have already handled this handle, so use next - info.Handle++ - } - - return info, errors.Trace(err) -} - -func (r *reorgInfo) UpdateHandle(txn kv.Transaction, handle int64) error { - t := meta.NewMeta(txn) - return errors.Trace(t.UpdateDDLReorgHandle(r.Job, handle)) -} diff --git a/vendor/github.com/pingcap/tidb/ddl/schema.go b/vendor/github.com/pingcap/tidb/ddl/schema.go deleted file mode 100644 index ad411a8c9..000000000 --- a/vendor/github.com/pingcap/tidb/ddl/schema.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ddl - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" -) - -func (d *ddl) onCreateSchema(t *meta.Meta, job *model.Job) error { - schemaID := job.SchemaID - dbInfo := &model.DBInfo{} - if err := job.DecodeArgs(dbInfo); err != nil { - // arg error, cancel this job. - job.State = model.JobCancelled - return errors.Trace(err) - } - - dbInfo.ID = schemaID - dbInfo.State = model.StateNone - - dbs, err := t.ListDatabases() - if err != nil { - return errors.Trace(err) - } - - for _, db := range dbs { - if db.Name.L == dbInfo.Name.L { - if db.ID != schemaID { - // database exists, can't create, we should cancel this job now. - job.State = model.JobCancelled - return errors.Trace(infoschema.DatabaseExists) - } - dbInfo = db - } - } - - _, err = t.GenSchemaVersion() - if err != nil { - return errors.Trace(err) - } - - switch dbInfo.State { - case model.StateNone: - // none -> public - job.SchemaState = model.StatePublic - dbInfo.State = model.StatePublic - err = t.CreateDatabase(dbInfo) - if err != nil { - return errors.Trace(err) - } - // finish this job - job.State = model.JobDone - return nil - default: - // we can't enter here. - return errors.Errorf("invalid db state %v", dbInfo.State) - } -} - -func (d *ddl) delReorgSchema(t *meta.Meta, job *model.Job) error { - dbInfo := &model.DBInfo{} - if err := job.DecodeArgs(dbInfo); err != nil { - // arg error, cancel this job. - job.State = model.JobCancelled - return errors.Trace(err) - } - - tables, err := t.ListTables(dbInfo.ID) - if terror.ErrorEqual(meta.ErrDBNotExists, err) { - job.State = model.JobDone - return nil - } - if err != nil { - return errors.Trace(err) - } - - if err = d.dropSchemaData(dbInfo, tables); err != nil { - return errors.Trace(err) - } - - // finish this background job - job.SchemaState = model.StateNone - job.State = model.JobDone - - return nil -} - -func (d *ddl) onDropSchema(t *meta.Meta, job *model.Job) error { - dbInfo, err := t.GetDatabase(job.SchemaID) - if err != nil { - return errors.Trace(err) - } - if dbInfo == nil { - job.State = model.JobCancelled - return errors.Trace(infoschema.DatabaseNotExists) - } - - _, err = t.GenSchemaVersion() - if err != nil { - return errors.Trace(err) - } - - switch dbInfo.State { - case model.StatePublic: - // public -> write only - job.SchemaState = model.StateWriteOnly - dbInfo.State = model.StateWriteOnly - err = t.UpdateDatabase(dbInfo) - case model.StateWriteOnly: - // write only -> delete only - job.SchemaState = model.StateDeleteOnly - dbInfo.State = model.StateDeleteOnly - err = t.UpdateDatabase(dbInfo) - case model.StateDeleteOnly: - dbInfo.State = model.StateDeleteReorganization - err = t.UpdateDatabase(dbInfo) - if err = t.DropDatabase(dbInfo.ID); err != nil { - break - } - // finish this job - job.Args = []interface{}{dbInfo} - job.State = model.JobDone - job.SchemaState = model.StateNone - default: - // we can't enter here. - err = errors.Errorf("invalid db state %v", dbInfo.State) - } - - return errors.Trace(err) -} - -func (d *ddl) dropSchemaData(dbInfo *model.DBInfo, tables []*model.TableInfo) error { - for _, tblInfo := range tables { - alloc := autoid.NewAllocator(d.store, dbInfo.ID) - t, err := table.TableFromMeta(alloc, tblInfo) - if err != nil { - return errors.Trace(err) - } - - err = d.dropTableData(t) - if err != nil { - return errors.Trace(err) - } - } - return nil -} diff --git a/vendor/github.com/pingcap/tidb/ddl/stat.go b/vendor/github.com/pingcap/tidb/ddl/stat.go deleted file mode 100644 index a39fa5717..000000000 --- a/vendor/github.com/pingcap/tidb/ddl/stat.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ddl - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/inspectkv" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/sessionctx/variable" -) - -var ( - serverID = "server_id" - ddlSchemaVersion = "ddl_schema_version" - ddlOwnerID = "ddl_owner_id" - ddlOwnerLastUpdateTS = "ddl_owner_last_update_ts" - ddlJobID = "ddl_job_id" - ddlJobAction = "ddl_job_action" - ddlJobLastUpdateTS = "ddl_job_last_update_ts" - ddlJobState = "ddl_job_state" - ddlJobError = "ddl_job_error" - ddlJobSchemaState = "ddl_job_schema_state" - ddlJobSchemaID = "ddl_job_schema_id" - ddlJobTableID = "ddl_job_table_id" - ddlJobSnapshotVer = "ddl_job_snapshot_ver" - ddlJobReorgHandle = "ddl_job_reorg_handle" - ddlJobArgs = "ddl_job_args" - bgSchemaVersion = "bg_schema_version" - bgOwnerID = "bg_owner_id" - bgOwnerLastUpdateTS = "bg_owner_last_update_ts" - bgJobID = "bg_job_id" - bgJobAction = "bg_job_action" - bgJobLastUpdateTS = "bg_job_last_update_ts" - bgJobState = "bg_job_state" - bgJobError = "bg_job_error" - bgJobSchemaState = "bg_job_schema_state" - bgJobSchemaID = "bg_job_schema_id" - bgJobTableID = "bg_job_table_id" - bgJobSnapshotVer = "bg_job_snapshot_ver" - bgJobReorgHandle = "bg_job_reorg_handle" - bgJobArgs = "bg_job_args" -) - -// GetScope gets the status variables scope. -func (d *ddl) GetScope(status string) variable.ScopeFlag { - // Now ddl status variables scope are all default scope. - return variable.DefaultScopeFlag -} - -// Stat returns the DDL statistics. -func (d *ddl) Stats() (map[string]interface{}, error) { - m := make(map[string]interface{}) - m[serverID] = d.uuid - var ddlInfo, bgInfo *inspectkv.DDLInfo - - err := kv.RunInNewTxn(d.store, false, func(txn kv.Transaction) error { - var err1 error - ddlInfo, err1 = inspectkv.GetDDLInfo(txn) - if err1 != nil { - return errors.Trace(err1) - } - bgInfo, err1 = inspectkv.GetBgDDLInfo(txn) - - return errors.Trace(err1) - }) - if err != nil { - return nil, errors.Trace(err) - } - - m[ddlSchemaVersion] = ddlInfo.SchemaVer - if ddlInfo.Owner != nil { - m[ddlOwnerID] = ddlInfo.Owner.OwnerID - // LastUpdateTS uses nanosecond. - m[ddlOwnerLastUpdateTS] = ddlInfo.Owner.LastUpdateTS / 1e9 - } - if ddlInfo.Job != nil { - m[ddlJobID] = ddlInfo.Job.ID - m[ddlJobAction] = ddlInfo.Job.Type.String() - m[ddlJobLastUpdateTS] = ddlInfo.Job.LastUpdateTS / 1e9 - m[ddlJobState] = ddlInfo.Job.State.String() - m[ddlJobError] = ddlInfo.Job.Error - m[ddlJobSchemaState] = ddlInfo.Job.SchemaState.String() - m[ddlJobSchemaID] = ddlInfo.Job.SchemaID - m[ddlJobTableID] = ddlInfo.Job.TableID - m[ddlJobSnapshotVer] = ddlInfo.Job.SnapshotVer - m[ddlJobReorgHandle] = ddlInfo.ReorgHandle - m[ddlJobArgs] = ddlInfo.Job.Args - } - - // background DDL info - m[bgSchemaVersion] = bgInfo.SchemaVer - if bgInfo.Owner != nil { - m[bgOwnerID] = bgInfo.Owner.OwnerID - // LastUpdateTS uses nanosecond. - m[bgOwnerLastUpdateTS] = bgInfo.Owner.LastUpdateTS / 1e9 - } - if bgInfo.Job != nil { - m[bgJobID] = bgInfo.Job.ID - m[bgJobAction] = bgInfo.Job.Type.String() - m[bgJobLastUpdateTS] = bgInfo.Job.LastUpdateTS / 1e9 - m[bgJobState] = bgInfo.Job.State.String() - m[bgJobError] = bgInfo.Job.Error - m[bgJobSchemaState] = bgInfo.Job.SchemaState.String() - m[bgJobSchemaID] = bgInfo.Job.SchemaID - m[bgJobTableID] = bgInfo.Job.TableID - m[bgJobSnapshotVer] = bgInfo.Job.SnapshotVer - m[bgJobReorgHandle] = bgInfo.ReorgHandle - m[bgJobArgs] = bgInfo.Job.Args - } - - return m, nil -} diff --git a/vendor/github.com/pingcap/tidb/ddl/table.go b/vendor/github.com/pingcap/tidb/ddl/table.go deleted file mode 100644 index ef9708a75..000000000 --- a/vendor/github.com/pingcap/tidb/ddl/table.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ddl - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" -) - -func (d *ddl) onCreateTable(t *meta.Meta, job *model.Job) error { - schemaID := job.SchemaID - tbInfo := &model.TableInfo{} - if err := job.DecodeArgs(tbInfo); err != nil { - // arg error, cancel this job. - job.State = model.JobCancelled - return errors.Trace(err) - } - - tbInfo.State = model.StateNone - - tables, err := t.ListTables(schemaID) - if terror.ErrorEqual(err, meta.ErrDBNotExists) { - job.State = model.JobCancelled - return errors.Trace(infoschema.DatabaseNotExists) - } else if err != nil { - return errors.Trace(err) - } - - for _, tbl := range tables { - if tbl.Name.L == tbInfo.Name.L { - if tbl.ID != tbInfo.ID { - // table exists, can't create, we should cancel this job now. - job.State = model.JobCancelled - return errors.Trace(infoschema.TableExists) - } - - tbInfo = tbl - } - } - - _, err = t.GenSchemaVersion() - if err != nil { - return errors.Trace(err) - } - - switch tbInfo.State { - case model.StateNone: - // none -> public - job.SchemaState = model.StatePublic - tbInfo.State = model.StatePublic - err = t.CreateTable(schemaID, tbInfo) - if err != nil { - return errors.Trace(err) - } - // finish this job - job.State = model.JobDone - return nil - default: - return errors.Errorf("invalid table state %v", tbInfo.State) - } -} - -func (d *ddl) delReorgTable(t *meta.Meta, job *model.Job) error { - tblInfo := &model.TableInfo{} - err := job.DecodeArgs(tblInfo) - if err != nil { - // arg error, cancel this job. - job.State = model.JobCancelled - return errors.Trace(err) - } - tblInfo.State = model.StateDeleteReorganization - tbl, err := d.getTable(job.SchemaID, tblInfo) - if err != nil { - return errors.Trace(err) - } - - err = d.dropTableData(tbl) - if err != nil { - return errors.Trace(err) - } - - // finish this background job - job.SchemaState = model.StateNone - job.State = model.JobDone - - return nil -} - -func (d *ddl) onDropTable(t *meta.Meta, job *model.Job) error { - schemaID := job.SchemaID - tableID := job.TableID - - tblInfo, err := t.GetTable(schemaID, tableID) - if terror.ErrorEqual(err, meta.ErrDBNotExists) { - job.State = model.JobCancelled - return errors.Trace(infoschema.DatabaseNotExists) - } else if err != nil { - return errors.Trace(err) - } - - if tblInfo == nil { - job.State = model.JobCancelled - return errors.Trace(infoschema.TableNotExists) - } - - _, err = t.GenSchemaVersion() - if err != nil { - return errors.Trace(err) - } - - switch tblInfo.State { - case model.StatePublic: - // public -> write only - job.SchemaState = model.StateWriteOnly - tblInfo.State = model.StateWriteOnly - err = t.UpdateTable(schemaID, tblInfo) - case model.StateWriteOnly: - // write only -> delete only - job.SchemaState = model.StateDeleteOnly - tblInfo.State = model.StateDeleteOnly - err = t.UpdateTable(schemaID, tblInfo) - case model.StateDeleteOnly: - tblInfo.State = model.StateNone - err = t.UpdateTable(schemaID, tblInfo) - if err = t.DropTable(job.SchemaID, job.TableID); err != nil { - break - } - // finish this job - job.Args = []interface{}{tblInfo} - job.State = model.JobDone - job.SchemaState = model.StateNone - default: - err = errors.Errorf("invalid table state %v", tblInfo.State) - } - - return errors.Trace(err) -} - -func (d *ddl) getTable(schemaID int64, tblInfo *model.TableInfo) (table.Table, error) { - alloc := autoid.NewAllocator(d.store, schemaID) - tbl, err := table.TableFromMeta(alloc, tblInfo) - return tbl, errors.Trace(err) -} - -func (d *ddl) getTableInfo(t *meta.Meta, job *model.Job) (*model.TableInfo, error) { - schemaID := job.SchemaID - tableID := job.TableID - tblInfo, err := t.GetTable(schemaID, tableID) - if terror.ErrorEqual(err, meta.ErrDBNotExists) { - job.State = model.JobCancelled - return nil, errors.Trace(infoschema.DatabaseNotExists) - } else if err != nil { - return nil, errors.Trace(err) - } else if tblInfo == nil { - job.State = model.JobCancelled - return nil, errors.Trace(infoschema.TableNotExists) - } - - if tblInfo.State != model.StatePublic { - job.State = model.JobCancelled - return nil, errors.Errorf("table %s is not in public, but %s", tblInfo.Name.L, tblInfo.State) - } - - return tblInfo, nil -} - -func (d *ddl) dropTableData(t table.Table) error { - // delete table data - err := d.delKeysWithPrefix(t.RecordPrefix()) - if err != nil { - return errors.Trace(err) - } - - // delete table index - err = d.delKeysWithPrefix(t.IndexPrefix()) - - return errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/domain/domain.go b/vendor/github.com/pingcap/tidb/domain/domain.go deleted file mode 100644 index 1ac14b6fa..000000000 --- a/vendor/github.com/pingcap/tidb/domain/domain.go +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package domain - -import ( - "sync" - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/ddl" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/store/localstore" - "github.com/pingcap/tidb/terror" -) - -var ddlLastReloadSchemaTS = "ddl_last_reload_schema_ts" - -// Domain represents a storage space. Different domains can use the same database name. -// Multiple domains can be used in parallel without synchronization. -type Domain struct { - store kv.Storage - infoHandle *infoschema.Handle - ddl ddl.DDL - leaseCh chan time.Duration - // nano seconds - lastLeaseTS int64 - m sync.Mutex -} - -func (do *Domain) loadInfoSchema(txn kv.Transaction) (err error) { - m := meta.NewMeta(txn) - schemaMetaVersion, err := m.GetSchemaVersion() - if err != nil { - return errors.Trace(err) - } - - info := do.infoHandle.Get() - if info != nil && schemaMetaVersion <= info.SchemaMetaVersion() { - // info may be changed by other txn, so here its version may be bigger than schema version, - // so we don't need to reload. - log.Debugf("[ddl] schema version is still %d, no need reload", schemaMetaVersion) - return nil - } - - schemas, err := m.ListDatabases() - if err != nil { - return errors.Trace(err) - } - - for _, di := range schemas { - if di.State != model.StatePublic { - // schema is not public, can't be used outside. - continue - } - - tables, err1 := m.ListTables(di.ID) - if err1 != nil { - return errors.Trace(err1) - } - - di.Tables = make([]*model.TableInfo, 0, len(tables)) - for _, tbl := range tables { - if tbl.State != model.StatePublic { - // schema is not public, can't be used outsiee. - continue - } - di.Tables = append(di.Tables, tbl) - } - } - - log.Infof("[ddl] loadInfoSchema %d", schemaMetaVersion) - err = do.infoHandle.Set(schemas, schemaMetaVersion) - return errors.Trace(err) -} - -// InfoSchema gets information schema from domain. -func (do *Domain) InfoSchema() infoschema.InfoSchema { - // try reload if possible. - do.tryReload() - return do.infoHandle.Get() -} - -// DDL gets DDL from domain. -func (do *Domain) DDL() ddl.DDL { - return do.ddl -} - -// Store gets KV store from domain. -func (do *Domain) Store() kv.Storage { - return do.store -} - -// SetLease will reset the lease time for online DDL change. -func (do *Domain) SetLease(lease time.Duration) { - do.leaseCh <- lease - - // let ddl to reset lease too. - do.ddl.SetLease(lease) -} - -// Stats returns the domain statistic. -func (do *Domain) Stats() (map[string]interface{}, error) { - m := make(map[string]interface{}) - m[ddlLastReloadSchemaTS] = atomic.LoadInt64(&do.lastLeaseTS) / 1e9 - - return m, nil -} - -// GetScope gets the status variables scope. -func (do *Domain) GetScope(status string) variable.ScopeFlag { - // Now domain status variables scope are all default scope. - return variable.DefaultScopeFlag -} - -func (do *Domain) tryReload() { - // if we don't have update the schema for a long time > lease, we must force reloading it. - // Although we try to reload schema every lease time in a goroutine, sometimes it may not - // run accurately, e.g, the machine has a very high load, running the ticker is delayed. - last := atomic.LoadInt64(&do.lastLeaseTS) - lease := do.ddl.GetLease() - - // if lease is 0, we use the local store, so no need to reload. - if lease > 0 && time.Now().UnixNano()-last > lease.Nanoseconds() { - do.mustReload() - } -} - -const minReloadTimeout = 20 * time.Second - -func (do *Domain) reload() error { - // lock here for only once at same time. - do.m.Lock() - defer do.m.Unlock() - - timeout := do.ddl.GetLease() / 2 - if timeout < minReloadTimeout { - timeout = minReloadTimeout - } - - done := make(chan error, 1) - go func() { - var err error - - for { - err = kv.RunInNewTxn(do.store, false, do.loadInfoSchema) - // if err is db closed, we will return it directly, otherwise, we will - // check reloading again. - if terror.ErrorEqual(err, localstore.ErrDBClosed) { - break - } - - if err != nil { - log.Errorf("[ddl] load schema err %v, retry again", errors.ErrorStack(err)) - // TODO: use a backoff algorithm. - time.Sleep(500 * time.Millisecond) - continue - } - - atomic.StoreInt64(&do.lastLeaseTS, time.Now().UnixNano()) - break - } - - done <- err - }() - - select { - case err := <-done: - return errors.Trace(err) - case <-time.After(timeout): - return errors.New("reload schema timeout") - } -} - -func (do *Domain) mustReload() { - // if reload error, we will terminate whole program to guarantee data safe. - err := do.reload() - if err != nil { - log.Fatalf("[ddl] reload schema err %v", errors.ErrorStack(err)) - } -} - -// check schema every 300 seconds default. -const defaultLoadTime = 300 * time.Second - -func (do *Domain) loadSchemaInLoop(lease time.Duration) { - if lease <= 0 { - lease = defaultLoadTime - } - - ticker := time.NewTicker(lease) - defer ticker.Stop() - - for { - select { - case <-ticker.C: - err := do.reload() - // we may close store in test, but the domain load schema loop is still checking, - // so we can't panic for ErrDBClosed and just return here. - if terror.ErrorEqual(err, localstore.ErrDBClosed) { - return - } else if err != nil { - log.Fatalf("[ddl] reload schema err %v", errors.ErrorStack(err)) - } - case newLease := <-do.leaseCh: - if newLease <= 0 { - newLease = defaultLoadTime - } - - if lease == newLease { - // nothing to do - continue - } - - lease = newLease - // reset ticker too. - ticker.Stop() - ticker = time.NewTicker(lease) - } - } -} - -type ddlCallback struct { - ddl.BaseCallback - do *Domain -} - -func (c *ddlCallback) OnChanged(err error) error { - if err != nil { - return err - } - log.Warnf("[ddl] on DDL change") - - c.do.mustReload() - return nil -} - -// NewDomain creates a new domain. -func NewDomain(store kv.Storage, lease time.Duration) (d *Domain, err error) { - d = &Domain{ - store: store, - leaseCh: make(chan time.Duration, 1), - } - - d.infoHandle = infoschema.NewHandle(d.store) - d.ddl = ddl.NewDDL(d.store, d.infoHandle, &ddlCallback{do: d}, lease) - d.mustReload() - - variable.RegisterStatistics(d) - - go d.loadSchemaInLoop(lease) - - return d, nil -} diff --git a/vendor/github.com/pingcap/tidb/driver.go b/vendor/github.com/pingcap/tidb/driver.go deleted file mode 100644 index f8b95421a..000000000 --- a/vendor/github.com/pingcap/tidb/driver.go +++ /dev/null @@ -1,560 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -// database/sql/driver - -package tidb - -import ( - "database/sql" - "database/sql/driver" - "io" - "net/url" - "path/filepath" - "strings" - "sync" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/types" -) - -const ( - // DriverName is name of TiDB driver. - DriverName = "tidb" -) - -var ( - _ driver.Conn = (*driverConn)(nil) - _ driver.Execer = (*driverConn)(nil) - _ driver.Queryer = (*driverConn)(nil) - _ driver.Tx = (*driverConn)(nil) - - _ driver.Result = (*driverResult)(nil) - _ driver.Rows = (*driverRows)(nil) - _ driver.Stmt = (*driverStmt)(nil) - _ driver.Driver = (*sqlDriver)(nil) - - txBeginSQL = "BEGIN;" - txCommitSQL = "COMMIT;" - txRollbackSQL = "ROLLBACK;" - - errNoResult = errors.New("query statement does not produce a result set (no top level SELECT)") -) - -type errList []error - -type driverParams struct { - storePath string - dbName string - // when set to true `mysql.Time` isn't encoded as string but passed as `time.Time` - // this option is named for compatibility the same as in the mysql driver - // while we actually do not have additional parsing to do - parseTime bool -} - -func (e *errList) append(err error) { - if err != nil { - *e = append(*e, err) - } -} - -func (e errList) error() error { - if len(e) == 0 { - return nil - } - - return e -} - -func (e errList) Error() string { - a := make([]string, len(e)) - for i, v := range e { - a[i] = v.Error() - } - return strings.Join(a, "\n") -} - -func params(args []driver.Value) []interface{} { - r := make([]interface{}, len(args)) - for i, v := range args { - r[i] = interface{}(v) - } - return r -} - -var ( - tidbDriver = &sqlDriver{} - driverOnce sync.Once -) - -// RegisterDriver registers TiDB driver. -// The name argument can be optionally prefixed by "engine://". In that case the -// prefix is recognized as a storage engine name. -// -// The name argument can be optionally prefixed by "memory://". In that case -// the prefix is stripped before interpreting it as a name of a memory-only, -// volatile DB. -// -// [0]: http://golang.org/pkg/database/sql/driver/ -func RegisterDriver() { - driverOnce.Do(func() { sql.Register(DriverName, tidbDriver) }) -} - -// sqlDriver implements the interface required by database/sql/driver. -type sqlDriver struct { - mu sync.Mutex -} - -func (d *sqlDriver) lock() { - d.mu.Lock() -} - -func (d *sqlDriver) unlock() { - d.mu.Unlock() -} - -// parseDriverDSN cuts off DB name from dsn. It returns error if the dsn is not -// valid. -func parseDriverDSN(dsn string) (params *driverParams, err error) { - u, err := url.Parse(dsn) - if err != nil { - return nil, errors.Trace(err) - } - path := filepath.Join(u.Host, u.Path) - dbName := filepath.Clean(filepath.Base(path)) - if dbName == "" || dbName == "." || dbName == string(filepath.Separator) { - return nil, errors.Errorf("invalid DB name %q", dbName) - } - // cut off dbName - path = filepath.Clean(filepath.Dir(path)) - if path == "" || path == "." || path == string(filepath.Separator) { - return nil, errors.Errorf("invalid dsn %q", dsn) - } - u.Path, u.Host = path, "" - params = &driverParams{ - storePath: u.String(), - dbName: dbName, - } - // parse additional driver params - query := u.Query() - if parseTime := query.Get("parseTime"); parseTime == "true" { - params.parseTime = true - } - - return params, nil -} - -// Open returns a new connection to the database. -// -// The dsn must be a URL format 'engine://path/dbname?params'. -// Engine is the storage name registered with RegisterStore. -// Path is the storage specific format. -// Params is key-value pairs split by '&', optional params are storage specific. -// Examples: -// goleveldb://relative/path/test -// boltdb:///absolute/path/test -// hbase://zk1,zk2,zk3/hbasetbl/test?tso=zk -// -// Open may return a cached connection (one previously closed), but doing so is -// unnecessary; the sql package maintains a pool of idle connections for -// efficient re-use. -// -// The behavior of the mysql driver regarding time parsing can also be imitated -// by passing ?parseTime -// -// The returned connection is only used by one goroutine at a time. -func (d *sqlDriver) Open(dsn string) (driver.Conn, error) { - params, err := parseDriverDSN(dsn) - if err != nil { - return nil, errors.Trace(err) - } - store, err := NewStore(params.storePath) - if err != nil { - return nil, errors.Trace(err) - } - - sess, err := CreateSession(store) - if err != nil { - return nil, errors.Trace(err) - } - s := sess.(*session) - - d.lock() - defer d.unlock() - - DBName := model.NewCIStr(params.dbName) - domain := sessionctx.GetDomain(s) - cs := &ast.CharsetOpt{ - Chs: "utf8", - Col: "utf8_bin", - } - if !domain.InfoSchema().SchemaExists(DBName) { - err = domain.DDL().CreateSchema(s, DBName, cs) - if err != nil { - return nil, errors.Trace(err) - } - } - driver := &sqlDriver{} - return newDriverConn(s, driver, DBName.O, params) -} - -// driverConn is a connection to a database. It is not used concurrently by -// multiple goroutines. -// -// Conn is assumed to be stateful. -type driverConn struct { - s Session - driver *sqlDriver - stmts map[string]driver.Stmt - params *driverParams -} - -func newDriverConn(sess *session, d *sqlDriver, schema string, params *driverParams) (driver.Conn, error) { - r := &driverConn{ - driver: d, - stmts: map[string]driver.Stmt{}, - s: sess, - params: params, - } - - _, err := r.s.Execute("use " + schema) - if err != nil { - return nil, errors.Trace(err) - } - return r, nil -} - -// Prepare returns a prepared statement, bound to this connection. -func (c *driverConn) Prepare(query string) (driver.Stmt, error) { - stmtID, paramCount, fields, err := c.s.PrepareStmt(query) - if err != nil { - return nil, err - } - s := &driverStmt{ - conn: c, - query: query, - stmtID: stmtID, - paramCount: paramCount, - isQuery: fields != nil, - } - c.stmts[query] = s - return s, nil -} - -// Close invalidates and potentially stops any current prepared statements and -// transactions, marking this connection as no longer in use. -// -// Because the sql package maintains a free pool of connections and only calls -// Close when there's a surplus of idle connections, it shouldn't be necessary -// for drivers to do their own connection caching. -func (c *driverConn) Close() error { - var err errList - for _, s := range c.stmts { - stmt := s.(*driverStmt) - err.append(stmt.conn.s.DropPreparedStmt(stmt.stmtID)) - } - - c.driver.lock() - defer c.driver.unlock() - - return err.error() -} - -// Begin starts and returns a new transaction. -func (c *driverConn) Begin() (driver.Tx, error) { - if c.s == nil { - return nil, errors.Errorf("Need init first") - } - - if _, err := c.s.Execute(txBeginSQL); err != nil { - return nil, errors.Trace(err) - } - - return c, nil -} - -func (c *driverConn) Commit() error { - if c.s == nil { - return terror.CommitNotInTransaction - } - _, err := c.s.Execute(txCommitSQL) - - if err != nil { - return errors.Trace(err) - } - - err = c.s.FinishTxn(false) - return errors.Trace(err) -} - -func (c *driverConn) Rollback() error { - if c.s == nil { - return terror.RollbackNotInTransaction - } - - if _, err := c.s.Execute(txRollbackSQL); err != nil { - return errors.Trace(err) - } - - return nil -} - -// Execer is an optional interface that may be implemented by a Conn. -// -// If a Conn does not implement Execer, the sql package's DB.Exec will first -// prepare a query, execute the statement, and then close the statement. -// -// Exec may return driver.ErrSkip. -func (c *driverConn) Exec(query string, args []driver.Value) (driver.Result, error) { - return c.driverExec(query, args) - -} - -func (c *driverConn) getStmt(query string) (stmt driver.Stmt, err error) { - stmt, ok := c.stmts[query] - if !ok { - stmt, err = c.Prepare(query) - if err != nil { - return nil, errors.Trace(err) - } - } - return -} - -func (c *driverConn) driverExec(query string, args []driver.Value) (driver.Result, error) { - if len(args) == 0 { - if _, err := c.s.Execute(query); err != nil { - return nil, errors.Trace(err) - } - r := &driverResult{} - r.lastInsertID, r.rowsAffected = int64(c.s.LastInsertID()), int64(c.s.AffectedRows()) - return r, nil - } - stmt, err := c.getStmt(query) - if err != nil { - return nil, errors.Trace(err) - } - return stmt.Exec(args) -} - -// Queryer is an optional interface that may be implemented by a Conn. -// -// If a Conn does not implement Queryer, the sql package's DB.Query will first -// prepare a query, execute the statement, and then close the statement. -// -// Query may return driver.ErrSkip. -func (c *driverConn) Query(query string, args []driver.Value) (driver.Rows, error) { - return c.driverQuery(query, args) -} - -func (c *driverConn) driverQuery(query string, args []driver.Value) (driver.Rows, error) { - if len(args) == 0 { - rss, err := c.s.Execute(query) - if err != nil { - return nil, errors.Trace(err) - } - if len(rss) == 0 { - return nil, errors.Trace(errNoResult) - } - return &driverRows{params: c.params, rs: rss[0]}, nil - } - stmt, err := c.getStmt(query) - if err != nil { - return nil, errors.Trace(err) - } - return stmt.Query(args) -} - -// driverResult is the result of a query execution. -type driverResult struct { - lastInsertID int64 - rowsAffected int64 -} - -// LastInsertID returns the database's auto-generated ID after, for example, an -// INSERT into a table with primary key. -func (r *driverResult) LastInsertId() (int64, error) { // -golint - return r.lastInsertID, nil -} - -// RowsAffected returns the number of rows affected by the query. -func (r *driverResult) RowsAffected() (int64, error) { - return r.rowsAffected, nil -} - -// driverRows is an iterator over an executed query's results. -type driverRows struct { - rs ast.RecordSet - params *driverParams -} - -// Columns returns the names of the columns. The number of columns of the -// result is inferred from the length of the slice. If a particular column -// name isn't known, an empty string should be returned for that entry. -func (r *driverRows) Columns() []string { - if r.rs == nil { - return []string{} - } - fs, _ := r.rs.Fields() - names := make([]string, len(fs)) - for i, f := range fs { - names[i] = f.ColumnAsName.O - } - return names -} - -// Close closes the rows iterator. -func (r *driverRows) Close() error { - if r.rs != nil { - return r.rs.Close() - } - return nil -} - -// Next is called to populate the next row of data into the provided slice. The -// provided slice will be the same size as the Columns() are wide. -// -// The dest slice may be populated only with a driver Value type, but excluding -// string. All string values must be converted to []byte. -// -// Next should return io.EOF when there are no more rows. -func (r *driverRows) Next(dest []driver.Value) error { - if r.rs == nil { - return io.EOF - } - row, err := r.rs.Next() - if err != nil { - return errors.Trace(err) - } - if row == nil { - return io.EOF - } - if len(row.Data) != len(dest) { - return errors.Errorf("field count mismatch: got %d, need %d", len(row.Data), len(dest)) - } - for i, xi := range row.Data { - switch xi.Kind() { - case types.KindNull: - dest[i] = nil - case types.KindInt64: - dest[i] = xi.GetInt64() - case types.KindUint64: - dest[i] = xi.GetUint64() - case types.KindFloat32: - dest[i] = xi.GetFloat32() - case types.KindFloat64: - dest[i] = xi.GetFloat64() - case types.KindString: - dest[i] = xi.GetString() - case types.KindBytes: - dest[i] = xi.GetBytes() - case types.KindMysqlBit: - dest[i] = xi.GetMysqlBit().ToString() - case types.KindMysqlDecimal: - dest[i] = xi.GetMysqlDecimal().String() - case types.KindMysqlDuration: - dest[i] = xi.GetMysqlDuration().String() - case types.KindMysqlEnum: - dest[i] = xi.GetMysqlEnum().String() - case types.KindMysqlHex: - dest[i] = xi.GetMysqlHex().ToString() - case types.KindMysqlSet: - dest[i] = xi.GetMysqlSet().String() - case types.KindMysqlTime: - t := xi.GetMysqlTime() - if !r.params.parseTime { - dest[i] = t.String() - } else { - dest[i] = t.Time - } - default: - return errors.Errorf("unable to handle type %T", xi.GetValue()) - } - } - return nil -} - -// driverStmt is a prepared statement. It is bound to a driverConn and not used -// by multiple goroutines concurrently. -type driverStmt struct { - conn *driverConn - query string - stmtID uint32 - paramCount int - isQuery bool -} - -// Close closes the statement. -// -// As of Go 1.1, a Stmt will not be closed if it's in use by any queries. -func (s *driverStmt) Close() error { - s.conn.s.DropPreparedStmt(s.stmtID) - delete(s.conn.stmts, s.query) - return nil -} - -// NumInput returns the number of placeholder parameters. -// -// If NumInput returns >= 0, the sql package will sanity check argument counts -// from callers and return errors to the caller before the statement's Exec or -// Query methods are called. -// -// NumInput may also return -1, if the driver doesn't know its number of -// placeholders. In that case, the sql package will not sanity check Exec or -// Query argument counts. -func (s *driverStmt) NumInput() int { - return s.paramCount -} - -// Exec executes a query that doesn't return rows, such as an INSERT or UPDATE. -func (s *driverStmt) Exec(args []driver.Value) (driver.Result, error) { - c := s.conn - _, err := c.s.ExecutePreparedStmt(s.stmtID, params(args)...) - if err != nil { - return nil, errors.Trace(err) - } - r := &driverResult{} - if s != nil { - r.lastInsertID, r.rowsAffected = int64(c.s.LastInsertID()), int64(c.s.AffectedRows()) - } - return r, nil -} - -// Exec executes a query that may return rows, such as a SELECT. -func (s *driverStmt) Query(args []driver.Value) (driver.Rows, error) { - c := s.conn - rs, err := c.s.ExecutePreparedStmt(s.stmtID, params(args)...) - if err != nil { - return nil, errors.Trace(err) - } - if rs == nil { - if s.isQuery { - return nil, errors.Trace(errNoResult) - } - // The statement is not a query. - return &driverRows{}, nil - } - return &driverRows{params: s.conn.params, rs: rs}, nil -} - -func init() { - RegisterDriver() -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/builtin.go b/vendor/github.com/pingcap/tidb/evaluator/builtin.go deleted file mode 100644 index 5d44b616c..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/builtin.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/util/types" -) - -// OldFunc is for a old builtin function. -type OldFunc struct { - // F is the specific calling function. - F func([]interface{}, context.Context) (interface{}, error) - // MinArgs is the minimal arguments needed, - MinArgs int - // MaxArgs is the maximal arguments needed, -1 for infinity. - MaxArgs int - // IsStatic shows whether this function can be called statically. - IsStatic bool - // IsAggregate represents whether this function is an aggregate function or not. - IsAggregate bool -} - -// Func is for a builtin function. -type Func struct { - // F is the specific calling function. - F func([]types.Datum, context.Context) (types.Datum, error) - // MinArgs is the minimal arguments needed, - MinArgs int - // MaxArgs is the maximal arguments needed, -1 for infinity. - MaxArgs int -} - -// OldFuncs holds all has old registered builtin functions. -var OldFuncs = map[string]OldFunc{ - // control functions - "if": {builtinIf, 3, 3, true, false}, - "ifnull": {builtinIfNull, 2, 2, true, false}, - "nullif": {builtinNullIf, 2, 2, true, false}, - - // string functions - "replace": {builtinReplace, 3, 3, true, false}, - "strcmp": {builtinStrcmp, 2, 2, true, false}, - "convert": {builtinConvert, 2, 2, true, false}, - "substring": {builtinSubstring, 2, 3, true, false}, - "substring_index": {builtinSubstringIndex, 3, 3, true, false}, - "locate": {builtinLocate, 2, 3, true, false}, - "trim": {builtinTrim, 1, 3, true, false}, - - // information functions - "current_user": {builtinCurrentUser, 0, 0, false, false}, - "database": {builtinDatabase, 0, 0, false, false}, - "found_rows": {builtinFoundRows, 0, 0, false, false}, - "user": {builtinUser, 0, 0, false, false}, - "connection_id": {builtinConnectionID, 0, 0, true, false}, - "version": {builtinVersion, 0, 0, true, false}, -} - -// Funcs holds all registered builtin functions. -var Funcs = map[string]Func{ - // common functions - "coalesce": {builtinCoalesce, 1, -1}, - - // math functions - "abs": {builtinAbs, 1, 1}, - "pow": {builtinPow, 2, 2}, - "power": {builtinPow, 2, 2}, - "rand": {builtinRand, 0, 1}, - - // time functions - "curdate": {builtinCurrentDate, 0, 0}, - "current_date": {builtinCurrentDate, 0, 0}, - "current_time": {builtinCurrentTime, 0, 1}, - "current_timestamp": {builtinNow, 0, 1}, - "curtime": {builtinCurrentTime, 0, 1}, - "date": {builtinDate, 1, 1}, - "day": {builtinDay, 1, 1}, - "dayname": {builtinDayName, 1, 1}, - "dayofmonth": {builtinDayOfMonth, 1, 1}, - "dayofweek": {builtinDayOfWeek, 1, 1}, - "dayofyear": {builtinDayOfYear, 1, 1}, - "hour": {builtinHour, 1, 1}, - "microsecond": {builtinMicroSecond, 1, 1}, - "minute": {builtinMinute, 1, 1}, - "month": {builtinMonth, 1, 1}, - "now": {builtinNow, 0, 1}, - "second": {builtinSecond, 1, 1}, - "sysdate": {builtinSysDate, 0, 1}, - "week": {builtinWeek, 1, 2}, - "weekday": {builtinWeekDay, 1, 1}, - "weekofyear": {builtinWeekOfYear, 1, 1}, - "year": {builtinYear, 1, 1}, - "yearweek": {builtinYearWeek, 1, 2}, - "extract": {builtinExtract, 2, 2}, - "date_arith": {builtinDateArith, 3, 3}, - - // string functions - "concat": {builtinConcat, 1, -1}, - "concat_ws": {builtinConcatWS, 2, -1}, - "left": {builtinLeft, 2, 2}, - "length": {builtinLength, 1, 1}, - "lower": {builtinLower, 1, 1}, - "repeat": {builtinRepeat, 2, 2}, - "upper": {builtinUpper, 1, 1}, -} - -// See: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce -func builtinCoalesce(args []types.Datum, ctx context.Context) (d types.Datum, err error) { - for _, d = range args { - if d.Kind() != types.KindNull { - return d, nil - } - } - return d, nil -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/builtin_control.go b/vendor/github.com/pingcap/tidb/evaluator/builtin_control.go deleted file mode 100644 index c310f3fab..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/builtin_control.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/util/types" -) - -// See https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_if -func builtinIf(args []interface{}, _ context.Context) (interface{}, error) { - // if(expr1, expr2, expr3) - // if expr1 is true, return expr2, otherwise, return expr3 - v1 := args[0] - v2 := args[1] - v3 := args[2] - - if v1 == nil { - return v3, nil - } - - b, err := types.ToBool(v1) - if err != nil { - return nil, err - } - - // TODO: check return type, must be numeric or string - if b == 1 { - return v2, nil - } - - return v3, nil -} - -// See https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull -func builtinIfNull(args []interface{}, _ context.Context) (interface{}, error) { - // ifnull(expr1, expr2) - // if expr1 is not null, return expr1, otherwise, return expr2 - v1 := args[0] - v2 := args[1] - - if v1 != nil { - return v1, nil - } - - return v2, nil -} - -// See https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_nullif -func builtinNullIf(args []interface{}, _ context.Context) (interface{}, error) { - // nullif(expr1, expr2) - // returns null if expr1 = expr2 is true, otherwise returns expr1 - v1 := args[0] - v2 := args[1] - - if v1 == nil || v2 == nil { - return v1, nil - } - - if n, err := types.Compare(v1, v2); err != nil || n == 0 { - return nil, err - } - - return v1, nil -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/builtin_info.go b/vendor/github.com/pingcap/tidb/evaluator/builtin_info.go deleted file mode 100644 index 2004c0d13..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/builtin_info.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx/db" - "github.com/pingcap/tidb/sessionctx/variable" -) - -// See: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html - -func builtinDatabase(args []interface{}, ctx context.Context) (v interface{}, err error) { - d := db.GetCurrentSchema(ctx) - if d == "" { - return nil, nil - } - return d, nil -} - -func builtinFoundRows(arg []interface{}, ctx context.Context) (interface{}, error) { - data := variable.GetSessionVars(ctx) - if data == nil { - return nil, errors.Errorf("Missing session variable when evalue builtin") - } - - return data.FoundRows, nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_current-user -// TODO: The value of CURRENT_USER() can differ from the value of USER(). We will finish this after we support grant tables. -func builtinCurrentUser(args []interface{}, ctx context.Context) (v interface{}, err error) { - data := variable.GetSessionVars(ctx) - if data == nil { - return nil, errors.Errorf("Missing session variable when evalue builtin") - } - - return data.User, nil -} - -func builtinUser(args []interface{}, ctx context.Context) (v interface{}, err error) { - data := variable.GetSessionVars(ctx) - if data == nil { - return nil, errors.Errorf("Missing session variable when evalue builtin") - } - - return data.User, nil -} - -func builtinConnectionID(args []interface{}, ctx context.Context) (v interface{}, err error) { - data := variable.GetSessionVars(ctx) - if data == nil { - return nil, errors.Errorf("Missing session variable when evalue builtin") - } - - return data.ConnectionID, nil -} - -func builtinVersion(args []interface{}, ctx context.Context) (v interface{}, err error) { - return mysql.ServerVersion, nil -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/builtin_math.go b/vendor/github.com/pingcap/tidb/evaluator/builtin_math.go deleted file mode 100644 index d01289426..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/builtin_math.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "math" - "math/rand" - - "github.com/juju/errors" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/util/types" -) - -// see https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html - -func builtinAbs(args []types.Datum, _ context.Context) (d types.Datum, err error) { - d = args[0] - switch d.Kind() { - case types.KindNull: - return d, nil - case types.KindUint64: - return d, nil - case types.KindInt64: - iv := d.GetInt64() - if iv >= 0 { - d.SetInt64(iv) - return d, nil - } - d.SetInt64(-iv) - return d, nil - default: - // we will try to convert other types to float - // TODO: if time has no precision, it will be a integer - f, err := d.ToFloat64() - d.SetFloat64(math.Abs(f)) - return d, errors.Trace(err) - } -} - -func builtinRand(args []types.Datum, _ context.Context) (d types.Datum, err error) { - if len(args) == 1 && args[0].Kind() != types.KindNull { - seed, err := args[0].ToInt64() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - - rand.Seed(seed) - } - d.SetFloat64(rand.Float64()) - return d, nil -} - -func builtinPow(args []types.Datum, _ context.Context) (d types.Datum, err error) { - x, err := args[0].ToFloat64() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - - y, err := args[1].ToFloat64() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - d.SetFloat64(math.Pow(x, y)) - return d, nil -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/builtin_string.go b/vendor/github.com/pingcap/tidb/evaluator/builtin_string.go deleted file mode 100644 index 1751c83f9..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/builtin_string.go +++ /dev/null @@ -1,476 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "fmt" - "strings" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/types" - "golang.org/x/text/transform" -) - -// https://dev.mysql.com/doc/refman/5.7/en/string-functions.html - -func builtinLength(args []types.Datum, _ context.Context) (d types.Datum, err error) { - switch args[0].Kind() { - case types.KindNull: - d.SetNull() - return d, nil - default: - s, err := args[0].ToString() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - d.SetInt64(int64(len(s))) - return d, nil - } -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat -func builtinConcat(args []types.Datum, _ context.Context) (d types.Datum, err error) { - var s []byte - for _, a := range args { - if a.Kind() == types.KindNull { - d.SetNull() - return d, nil - } - var ss string - ss, err = a.ToString() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - s = append(s, []byte(ss)...) - } - d.SetBytesAsString(s) - return d, nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat-ws -func builtinConcatWS(args []types.Datum, _ context.Context) (d types.Datum, err error) { - var sep string - s := make([]string, 0, len(args)) - for i, a := range args { - if a.Kind() == types.KindNull { - if i == 0 { - d.SetNull() - return d, nil - } - continue - } - ss, err := a.ToString() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - - if i == 0 { - sep = ss - continue - } - s = append(s, ss) - } - - d.SetString(strings.Join(s, sep)) - return d, nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_left -func builtinLeft(args []types.Datum, _ context.Context) (d types.Datum, err error) { - str, err := args[0].ToString() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - length, err := args[1].ToInt64() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - l := int(length) - if l < 0 { - l = 0 - } else if l > len(str) { - l = len(str) - } - d.SetString(str[:l]) - return d, nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_repeat -func builtinRepeat(args []types.Datum, _ context.Context) (d types.Datum, err error) { - str, err := args[0].ToString() - if err != nil { - d.SetNull() - return d, err - } - ch := fmt.Sprintf("%v", str) - num := 0 - x := args[1] - switch x.Kind() { - case types.KindInt64: - num = int(x.GetInt64()) - case types.KindUint64: - num = int(x.GetUint64()) - } - if num < 1 { - d.SetString("") - return d, nil - } - d.SetString(strings.Repeat(ch, num)) - return d, nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_lower -func builtinLower(args []types.Datum, _ context.Context) (d types.Datum, err error) { - x := args[0] - switch x.Kind() { - case types.KindNull: - d.SetNull() - return d, nil - default: - s, err := x.ToString() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - d.SetString(strings.ToLower(s)) - return d, nil - } -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_upper -func builtinUpper(args []types.Datum, _ context.Context) (d types.Datum, err error) { - x := args[0] - switch x.Kind() { - case types.KindNull: - d.SetNull() - return d, nil - default: - s, err := x.ToString() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - d.SetString(strings.ToUpper(s)) - return d, nil - } -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html -func builtinStrcmp(args []interface{}, _ context.Context) (interface{}, error) { - if args[0] == nil || args[1] == nil { - return nil, nil - } - left, err := types.ToString(args[0]) - if err != nil { - return nil, errors.Trace(err) - } - right, err := types.ToString(args[1]) - if err != nil { - return nil, errors.Trace(err) - } - res := types.CompareString(left, right) - return res, nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace -func builtinReplace(args []interface{}, _ context.Context) (interface{}, error) { - for _, arg := range args { - if arg == nil { - return nil, nil - } - } - - str, err := types.ToString(args[0]) - if err != nil { - return nil, errors.Trace(err) - } - oldStr, err := types.ToString(args[1]) - if err != nil { - return nil, errors.Trace(err) - } - newStr, err := types.ToString(args[2]) - if err != nil { - return nil, errors.Trace(err) - } - - return strings.Replace(str, oldStr, newStr, -1), nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert -func builtinConvert(args []interface{}, _ context.Context) (interface{}, error) { - value := args[0] - Charset := args[1].(string) - - // Casting nil to any type returns nil - if value == nil { - return nil, nil - } - str, ok := value.(string) - if !ok { - return nil, nil - } - if strings.ToLower(Charset) == "ascii" { - return value, nil - } else if strings.ToLower(Charset) == "utf8mb4" { - return value, nil - } - - encoding, _ := charset.Lookup(Charset) - if encoding == nil { - return nil, errors.Errorf("unknown encoding: %s", Charset) - } - - target, _, err := transform.String(encoding.NewDecoder(), str) - if err != nil { - log.Errorf("Convert %s to %s with error: %v", str, Charset, err) - return nil, errors.Trace(err) - } - return target, nil -} - -func builtinSubstring(args []interface{}, _ context.Context) (interface{}, error) { - // The meaning of the elements of args. - // arg[0] -> StrExpr - // arg[1] -> Pos - // arg[2] -> Len (Optional) - str, err := types.ToString(args[0]) - if err != nil { - return nil, errors.Errorf("Substring invalid args, need string but get %T", args[0]) - } - - t := args[1] - p, ok := t.(int64) - if !ok { - return nil, errors.Errorf("Substring invalid pos args, need int but get %T", t) - } - pos := int(p) - - length := -1 - if len(args) == 3 { - t = args[2] - p, ok = t.(int64) - if !ok { - return nil, errors.Errorf("Substring invalid pos args, need int but get %T", t) - } - length = int(p) - } - // The forms without a len argument return a substring from string str starting at position pos. - // The forms with a len argument return a substring len characters long from string str, starting at position pos. - // The forms that use FROM are standard SQL syntax. It is also possible to use a negative value for pos. - // In this case, the beginning of the substring is pos characters from the end of the string, rather than the beginning. - // A negative value may be used for pos in any of the forms of this function. - if pos < 0 { - pos = len(str) + pos - } else { - pos-- - } - if pos > len(str) || pos <= 0 { - pos = len(str) - } - end := len(str) - if length != -1 { - end = pos + length - } - if end > len(str) { - end = len(str) - } - return str[pos:end], nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index -func builtinSubstringIndex(args []interface{}, _ context.Context) (interface{}, error) { - // The meaning of the elements of args. - // args[0] -> StrExpr - // args[1] -> Delim - // args[2] -> Count - fs := args[0] - str, err := types.ToString(fs) - if err != nil { - return nil, errors.Errorf("Substring_Index invalid args, need string but get %T", fs) - } - - t := args[1] - delim, err := types.ToString(t) - if err != nil { - return nil, errors.Errorf("Substring_Index invalid delim, need string but get %T", t) - } - if len(delim) == 0 { - return "", nil - } - - t = args[2] - c, err := types.ToInt64(t) - if err != nil { - return nil, errors.Trace(err) - } - count := int(c) - strs := strings.Split(str, delim) - var ( - start = 0 - end = len(strs) - ) - if count > 0 { - // If count is positive, everything to the left of the final delimiter (counting from the left) is returned. - if count < end { - end = count - } - } else { - // If count is negative, everything to the right of the final delimiter (counting from the right) is returned. - count = -count - if count < end { - start = end - count - } - } - substrs := strs[start:end] - return strings.Join(substrs, delim), nil -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_locate -func builtinLocate(args []interface{}, _ context.Context) (interface{}, error) { - // The meaning of the elements of args. - // args[0] -> SubStr - // args[1] -> Str - // args[2] -> Pos - // eval str - fs := args[1] - if fs == nil { - return nil, nil - } - str, err := types.ToString(fs) - if err != nil { - return nil, errors.Trace(err) - } - // eval substr - fs = args[0] - if fs == nil { - return nil, nil - } - subStr, err := types.ToString(fs) - if err != nil { - return nil, errors.Trace(err) - } - // eval pos - pos := int64(0) - if len(args) == 3 { - t := args[2] - p, err := types.ToInt64(t) - if err != nil { - return nil, errors.Trace(err) - } - pos = p - 1 - if pos < 0 || pos > int64(len(str)) { - return 0, nil - } - if pos > int64(len(str)-len(subStr)) { - return 0, nil - } - } - if len(subStr) == 0 { - return pos + 1, nil - } - i := strings.Index(str[pos:], subStr) - if i == -1 { - return 0, nil - } - return int64(i) + pos + 1, nil -} - -const spaceChars = "\n\t\r " - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_trim -func builtinTrim(args []interface{}, _ context.Context) (interface{}, error) { - // args[0] -> Str - // args[1] -> RemStr - // args[2] -> Direction - // eval str - fs := args[0] - if fs == nil { - return nil, nil - } - str, err := types.ToString(fs) - if err != nil { - return nil, errors.Trace(err) - } - remstr := "" - // eval remstr - if len(args) > 1 { - fs = args[1] - if fs != nil { - remstr, err = types.ToString(fs) - if err != nil { - return nil, errors.Trace(err) - } - } - } - // do trim - var result string - var direction ast.TrimDirectionType - if len(args) > 2 { - direction = args[2].(ast.TrimDirectionType) - } else { - direction = ast.TrimBothDefault - } - if direction == ast.TrimLeading { - if len(remstr) > 0 { - result = trimLeft(str, remstr) - } else { - result = strings.TrimLeft(str, spaceChars) - } - } else if direction == ast.TrimTrailing { - if len(remstr) > 0 { - result = trimRight(str, remstr) - } else { - result = strings.TrimRight(str, spaceChars) - } - } else if len(remstr) > 0 { - x := trimLeft(str, remstr) - result = trimRight(x, remstr) - } else { - result = strings.Trim(str, spaceChars) - } - return result, nil -} - -func trimLeft(str, remstr string) string { - for { - x := strings.TrimPrefix(str, remstr) - if len(x) == len(str) { - return x - } - str = x - } -} - -func trimRight(str, remstr string) string { - for { - x := strings.TrimSuffix(str, remstr) - if len(x) == len(str) { - return x - } - str = x - } -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/builtin_time.go b/vendor/github.com/pingcap/tidb/evaluator/builtin_time.go deleted file mode 100644 index 084ae1337..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/builtin_time.go +++ /dev/null @@ -1,555 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "fmt" - "regexp" - "strings" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/types" -) - -func convertToTime(arg types.Datum, tp byte) (d types.Datum, err error) { - f := types.NewFieldType(tp) - f.Decimal = mysql.MaxFsp - - d, err = arg.ConvertTo(f) - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - - if d.Kind() == types.KindNull { - return d, nil - } - - if d.Kind() != types.KindMysqlTime { - err = errors.Errorf("need time type, but got %T", d.GetValue()) - d.SetNull() - return d, err - } - return d, nil -} - -func convertToDuration(arg types.Datum, fsp int) (d types.Datum, err error) { - f := types.NewFieldType(mysql.TypeDuration) - f.Decimal = fsp - - d, err = arg.ConvertTo(f) - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - - if d.Kind() == types.KindNull { - d.SetNull() - return d, nil - } - - if d.Kind() != types.KindMysqlDuration { - err = errors.Errorf("need duration type, but got %T", d.GetValue()) - d.SetNull() - return d, err - } - return d, nil -} - -func builtinDate(args []types.Datum, _ context.Context) (types.Datum, error) { - return convertToTime(args[0], mysql.TypeDate) -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_day -// day is a synonym for DayOfMonth -func builtinDay(args []types.Datum, ctx context.Context) (types.Datum, error) { - return builtinDayOfMonth(args, ctx) -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_hour -func builtinHour(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToDuration(args[0], mysql.MaxFsp) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - h := int64(d.GetMysqlDuration().Hour()) - d.SetInt64(h) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_minute -func builtinMinute(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToDuration(args[0], mysql.MaxFsp) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - m := int64(d.GetMysqlDuration().Minute()) - d.SetInt64(m) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_second -func builtinSecond(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToDuration(args[0], mysql.MaxFsp) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - s := int64(d.GetMysqlDuration().Second()) - d.SetInt64(s) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_microsecond -func builtinMicroSecond(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToDuration(args[0], mysql.MaxFsp) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - m := int64(d.GetMysqlDuration().MicroSecond()) - d.SetInt64(m) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_month -func builtinMonth(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToTime(args[0], mysql.TypeDate) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - t := d.GetMysqlTime() - i := int64(0) - if t.IsZero() { - d.SetInt64(i) - return d, nil - } - i = int64(t.Month()) - d.SetInt64(i) - return d, nil -} - -func builtinNow(args []types.Datum, _ context.Context) (d types.Datum, err error) { - // TODO: if NOW is used in stored function or trigger, NOW will return the beginning time - // of the execution. - fsp := 0 - if len(args) == 1 && args[0].Kind() != types.KindNull { - if fsp, err = checkFsp(args[0]); err != nil { - d.SetNull() - return d, errors.Trace(err) - } - } - - t := mysql.Time{ - Time: time.Now(), - Type: mysql.TypeDatetime, - // set unspecified for later round - Fsp: mysql.UnspecifiedFsp, - } - - tr, err := t.RoundFrac(int(fsp)) - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - d.SetMysqlTime(tr) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayname -func builtinDayName(args []types.Datum, ctx context.Context) (types.Datum, error) { - d, err := builtinWeekDay(args, ctx) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - weekday := d.GetInt64() - if (weekday < 0) || (weekday >= int64(len(mysql.WeekdayNames))) { - d.SetNull() - return d, errors.Errorf("no name for invalid weekday: %d.", weekday) - } - d.SetString(mysql.WeekdayNames[weekday]) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofmonth -func builtinDayOfMonth(args []types.Datum, _ context.Context) (d types.Datum, err error) { - // TODO: some invalid format like 2000-00-00 will return 0 too. - d, err = convertToTime(args[0], mysql.TypeDate) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - t := d.GetMysqlTime() - if t.IsZero() { - d.SetInt64(int64(0)) - return d, nil - } - - d.SetInt64(int64(t.Day())) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofweek -func builtinDayOfWeek(args []types.Datum, _ context.Context) (d types.Datum, err error) { - d, err = convertToTime(args[0], mysql.TypeDate) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - t := d.GetMysqlTime() - if t.IsZero() { - d.SetNull() - // TODO: log warning or return error? - return d, nil - } - - // 1 is Sunday, 2 is Monday, .... 7 is Saturday - d.SetInt64(int64(t.Weekday()) + 1) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofyear -func builtinDayOfYear(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToTime(args[0], mysql.TypeDate) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - t := d.GetMysqlTime() - if t.IsZero() { - // TODO: log warning or return error? - d.SetNull() - return d, nil - } - - yd := int64(t.YearDay()) - d.SetInt64(yd) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_week -func builtinWeek(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToTime(args[0], mysql.TypeDate) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - t := d.GetMysqlTime() - if t.IsZero() { - // TODO: log warning or return error? - d.SetNull() - return d, nil - } - - // TODO: support multi mode for week - _, week := t.ISOWeek() - wi := int64(week) - d.SetInt64(wi) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_weekday -func builtinWeekDay(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToTime(args[0], mysql.TypeDate) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - t := d.GetMysqlTime() - if t.IsZero() { - // TODO: log warning or return error? - d.SetNull() - return d, nil - } - - // Monday is 0, ... Sunday = 6 in MySQL - // but in go, Sunday is 0, ... Saturday is 6 - // w will do a conversion. - w := (int64(t.Weekday()) + 6) % 7 - d.SetInt64(w) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_weekofyear -func builtinWeekOfYear(args []types.Datum, ctx context.Context) (types.Datum, error) { - // WeekOfYear is equivalent to to Week(date, 3) - d := types.Datum{} - d.SetInt64(3) - return builtinWeek([]types.Datum{args[0], d}, ctx) -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_year -func builtinYear(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToTime(args[0], mysql.TypeDate) - if err != nil || d.Kind() == types.KindNull { - return d, errors.Trace(err) - } - - // No need to check type here. - t := d.GetMysqlTime() - if t.IsZero() { - d.SetInt64(0) - return d, nil - } - - d.SetInt64(int64(t.Year())) - return d, nil -} - -// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_yearweek -func builtinYearWeek(args []types.Datum, _ context.Context) (types.Datum, error) { - d, err := convertToTime(args[0], mysql.TypeDate) - if err != nil || d.Kind() == types.KindNull { - d.SetNull() - return d, errors.Trace(err) - } - - // No need to check type here. - t := d.GetMysqlTime() - if t.IsZero() { - d.SetNull() - // TODO: log warning or return error? - return d, nil - } - - // TODO: support multi mode for week - year, week := t.ISOWeek() - d.SetInt64(int64(year*100 + week)) - return d, nil -} - -func builtinSysDate(args []types.Datum, ctx context.Context) (types.Datum, error) { - // SYSDATE is not the same as NOW if NOW is used in a stored function or trigger. - // But here we can just think they are the same because we don't support stored function - // and trigger now. - return builtinNow(args, ctx) -} - -// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_curdate -func builtinCurrentDate(args []types.Datum, _ context.Context) (d types.Datum, err error) { - year, month, day := time.Now().Date() - t := mysql.Time{ - Time: time.Date(year, month, day, 0, 0, 0, 0, time.Local), - Type: mysql.TypeDate, Fsp: 0} - d.SetMysqlTime(t) - return d, nil -} - -// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_curtime -func builtinCurrentTime(args []types.Datum, _ context.Context) (d types.Datum, err error) { - fsp := 0 - if len(args) == 1 && args[0].Kind() != types.KindNull { - if fsp, err = checkFsp(args[0]); err != nil { - d.SetNull() - return d, errors.Trace(err) - } - } - d.SetString(time.Now().Format("15:04:05.000000")) - return convertToDuration(d, fsp) -} - -// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_extract -func builtinExtract(args []types.Datum, _ context.Context) (d types.Datum, err error) { - unit := args[0].GetString() - vd := args[1] - - if vd.Kind() == types.KindNull { - d.SetNull() - return d, nil - } - - f := types.NewFieldType(mysql.TypeDatetime) - f.Decimal = mysql.MaxFsp - val, err := vd.ConvertTo(f) - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - if val.Kind() == types.KindNull { - d.SetNull() - return d, nil - } - - if val.Kind() != types.KindMysqlTime { - err = errors.Errorf("need time type, but got %T", val) - d.SetNull() - return d, err - } - t := val.GetMysqlTime() - n, err1 := mysql.ExtractTimeNum(unit, t) - if err1 != nil { - d.SetNull() - return d, errors.Trace(err1) - } - d.SetInt64(n) - return d, nil -} - -func checkFsp(arg types.Datum) (int, error) { - fsp, err := arg.ToInt64() - if err != nil { - return 0, errors.Trace(err) - } - if int(fsp) > mysql.MaxFsp { - return 0, errors.Errorf("Too big precision %d specified. Maximum is 6.", fsp) - } else if fsp < 0 { - return 0, errors.Errorf("Invalid negative %d specified, must in [0, 6].", fsp) - } - return int(fsp), nil -} - -func builtinDateArith(args []types.Datum, ctx context.Context) (d types.Datum, err error) { - // Op is used for distinguishing date_add and date_sub. - // args[0] -> Op - // args[1] -> Date - // args[2] -> DateArithInterval - // health check for date and interval - if args[1].Kind() == types.KindNull { - d.SetNull() - return d, nil - } - nodeDate := args[1] - nodeInterval := args[2].GetInterface().(ast.DateArithInterval) - nodeIntervalIntervalDatum := nodeInterval.Interval.GetDatum() - if nodeIntervalIntervalDatum.Kind() == types.KindNull { - d.SetNull() - return d, nil - } - // parse date - fieldType := mysql.TypeDate - var resultField *types.FieldType - switch nodeDate.Kind() { - case types.KindMysqlTime: - x := nodeDate.GetMysqlTime() - if (x.Type == mysql.TypeDatetime) || (x.Type == mysql.TypeTimestamp) { - fieldType = mysql.TypeDatetime - } - case types.KindString: - x := nodeDate.GetString() - if !mysql.IsDateFormat(x) { - fieldType = mysql.TypeDatetime - } - case types.KindInt64: - x := nodeDate.GetInt64() - if t, err1 := mysql.ParseTimeFromInt64(x); err1 == nil { - if (t.Type == mysql.TypeDatetime) || (t.Type == mysql.TypeTimestamp) { - fieldType = mysql.TypeDatetime - } - } - } - if mysql.IsClockUnit(nodeInterval.Unit) { - fieldType = mysql.TypeDatetime - } - resultField = types.NewFieldType(fieldType) - resultField.Decimal = mysql.MaxFsp - value, err := nodeDate.ConvertTo(resultField) - if err != nil { - d.SetNull() - return d, ErrInvalidOperation.Gen("DateArith invalid args, need date but get %T", nodeDate) - } - if value.Kind() == types.KindNull { - d.SetNull() - return d, ErrInvalidOperation.Gen("DateArith invalid args, need date but get %v", value.GetValue()) - } - if value.Kind() != types.KindMysqlTime { - d.SetNull() - return d, ErrInvalidOperation.Gen("DateArith need time type, but got %T", value.GetValue()) - } - result := value.GetMysqlTime() - // parse interval - var interval string - if strings.ToLower(nodeInterval.Unit) == "day" { - day, err2 := parseDayInterval(*nodeIntervalIntervalDatum) - if err2 != nil { - d.SetNull() - return d, ErrInvalidOperation.Gen("DateArith invalid day interval, need int but got %T", nodeIntervalIntervalDatum.GetString()) - } - interval = fmt.Sprintf("%d", day) - } else { - if nodeIntervalIntervalDatum.Kind() == types.KindString { - interval = fmt.Sprintf("%v", nodeIntervalIntervalDatum.GetString()) - } else { - ii, err := nodeIntervalIntervalDatum.ToInt64() - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - interval = fmt.Sprintf("%v", ii) - } - } - year, month, day, duration, err := mysql.ExtractTimeValue(nodeInterval.Unit, interval) - if err != nil { - d.SetNull() - return d, errors.Trace(err) - } - op := args[0].GetInterface().(ast.DateArithType) - if op == ast.DateSub { - year, month, day, duration = -year, -month, -day, -duration - } - result.Time = result.Time.Add(duration) - result.Time = result.Time.AddDate(int(year), int(month), int(day)) - if result.Time.Nanosecond() == 0 { - result.Fsp = 0 - } - d.SetMysqlTime(result) - return d, nil -} - -var reg = regexp.MustCompile(`[\d]+`) - -func parseDayInterval(value types.Datum) (int64, error) { - switch value.Kind() { - case types.KindString: - vs := value.GetString() - s := strings.ToLower(vs) - if s == "false" { - return 0, nil - } else if s == "true" { - return 1, nil - } - value.SetString(reg.FindString(vs)) - } - return value.ToInt64() -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/evaluator.go b/vendor/github.com/pingcap/tidb/evaluator/evaluator.go deleted file mode 100644 index 5531a8777..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/evaluator.go +++ /dev/null @@ -1,717 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/types" -) - -// Error instances. -var ( - ErrInvalidOperation = terror.ClassEvaluator.New(CodeInvalidOperation, "invalid operation") -) - -// Error codes. -const ( - CodeInvalidOperation terror.ErrCode = 1 -) - -// Eval evaluates an expression to a value. -func Eval(ctx context.Context, expr ast.ExprNode) (interface{}, error) { - e := &Evaluator{ctx: ctx} - expr.Accept(e) - if e.err != nil { - return nil, errors.Trace(e.err) - } - return expr.GetValue(), nil -} - -// EvalBool evalueates an expression to a boolean value. -func EvalBool(ctx context.Context, expr ast.ExprNode) (bool, error) { - val, err := Eval(ctx, expr) - if err != nil { - return false, errors.Trace(err) - } - if val == nil { - return false, nil - } - - i, err := types.ToBool(val) - if err != nil { - return false, errors.Trace(err) - } - return i != 0, nil -} - -func boolToInt64(v bool) int64 { - if v { - return int64(1) - } - return int64(0) -} - -// Evaluator is an ast Visitor that evaluates an expression. -type Evaluator struct { - ctx context.Context - err error - multipleRows bool - existRow bool -} - -// Enter implements ast.Visitor interface. -func (e *Evaluator) Enter(in ast.Node) (out ast.Node, skipChildren bool) { - switch v := in.(type) { - case *ast.SubqueryExpr: - if v.Evaluated && !v.UseOuterContext { - return in, true - } - case *ast.PatternInExpr, *ast.CompareSubqueryExpr: - e.multipleRows = true - case *ast.ExistsSubqueryExpr: - e.existRow = true - } - return in, false -} - -// Leave implements ast.Visitor interface. -func (e *Evaluator) Leave(in ast.Node) (out ast.Node, ok bool) { - switch v := in.(type) { - case *ast.AggregateFuncExpr: - ok = e.aggregateFunc(v) - case *ast.BetweenExpr: - ok = e.between(v) - case *ast.BinaryOperationExpr: - ok = e.binaryOperation(v) - case *ast.CaseExpr: - ok = e.caseExpr(v) - case *ast.ColumnName: - ok = true - case *ast.ColumnNameExpr: - ok = e.columnName(v) - case *ast.CompareSubqueryExpr: - e.multipleRows = false - ok = e.compareSubquery(v) - case *ast.DefaultExpr: - ok = e.defaultExpr(v) - case *ast.ExistsSubqueryExpr: - e.existRow = false - ok = e.existsSubquery(v) - case *ast.FuncCallExpr: - ok = e.funcCall(v) - case *ast.FuncCastExpr: - ok = e.funcCast(v) - case *ast.IsNullExpr: - ok = e.isNull(v) - case *ast.IsTruthExpr: - ok = e.isTruth(v) - case *ast.ParamMarkerExpr: - ok = e.paramMarker(v) - case *ast.ParenthesesExpr: - ok = e.parentheses(v) - case *ast.PatternInExpr: - e.multipleRows = false - ok = e.patternIn(v) - case *ast.PatternLikeExpr: - ok = e.patternLike(v) - case *ast.PatternRegexpExpr: - ok = e.patternRegexp(v) - case *ast.PositionExpr: - ok = e.position(v) - case *ast.RowExpr: - ok = e.row(v) - case *ast.SubqueryExpr: - ok = e.subqueryExpr(v) - case ast.SubqueryExec: - ok = e.subqueryExec(v) - case *ast.UnaryOperationExpr: - ok = e.unaryOperation(v) - case *ast.ValueExpr: - ok = true - case *ast.ValuesExpr: - ok = e.values(v) - case *ast.VariableExpr: - ok = e.variable(v) - case *ast.WhenClause: - ok = true - } - out = in - return -} - -func (e *Evaluator) between(v *ast.BetweenExpr) bool { - var l, r ast.ExprNode - op := opcode.AndAnd - - if v.Not { - // v < lv || v > rv - op = opcode.OrOr - l = &ast.BinaryOperationExpr{Op: opcode.LT, L: v.Expr, R: v.Left} - r = &ast.BinaryOperationExpr{Op: opcode.GT, L: v.Expr, R: v.Right} - } else { - // v >= lv && v <= rv - l = &ast.BinaryOperationExpr{Op: opcode.GE, L: v.Expr, R: v.Left} - r = &ast.BinaryOperationExpr{Op: opcode.LE, L: v.Expr, R: v.Right} - } - - ret := &ast.BinaryOperationExpr{Op: op, L: l, R: r} - ret.Accept(e) - if e.err != nil { - return false - } - v.SetDatum(*ret.GetDatum()) - return true -} - -func (e *Evaluator) caseExpr(v *ast.CaseExpr) bool { - tmp := types.NewDatum(boolToInt64(true)) - target := &tmp - if v.Value != nil { - target = v.Value.GetDatum() - } - if target.Kind() != types.KindNull { - for _, val := range v.WhenClauses { - cmp, err := target.CompareDatum(*val.Expr.GetDatum()) - if err != nil { - e.err = errors.Trace(err) - return false - } - if cmp == 0 { - v.SetDatum(*val.Result.GetDatum()) - return true - } - } - } - if v.ElseClause != nil { - v.SetDatum(*v.ElseClause.GetDatum()) - } else { - v.SetNull() - } - return true -} - -func (e *Evaluator) columnName(v *ast.ColumnNameExpr) bool { - v.SetDatum(*v.Refer.Expr.GetDatum()) - return true -} - -func (e *Evaluator) defaultExpr(v *ast.DefaultExpr) bool { - return true -} - -func (e *Evaluator) compareSubquery(cs *ast.CompareSubqueryExpr) bool { - lvDatum := cs.L.GetDatum() - if lvDatum.Kind() == types.KindNull { - cs.SetNull() - return true - } - lv := lvDatum.GetValue() - x, err := e.checkResult(cs, lv, cs.R.GetValue().([]interface{})) - if err != nil { - e.err = errors.Trace(err) - return false - } - cs.SetValue(x) - return true -} - -func (e *Evaluator) checkResult(cs *ast.CompareSubqueryExpr, lv interface{}, result []interface{}) (interface{}, error) { - if cs.All { - return e.checkAllResult(cs, lv, result) - } - return e.checkAnyResult(cs, lv, result) -} - -func (e *Evaluator) checkAllResult(cs *ast.CompareSubqueryExpr, lv interface{}, result []interface{}) (interface{}, error) { - hasNull := false - for _, v := range result { - if v == nil { - hasNull = true - continue - } - - comRes, err := types.Compare(lv, v) - if err != nil { - return nil, errors.Trace(err) - } - - res, err := getCompResult(cs.Op, comRes) - if err != nil { - return nil, errors.Trace(err) - } - if !res { - return false, nil - } - } - if hasNull { - // If no matched but we get null, return null. - // Like `insert t (c) values (1),(2),(null)`, then - // `select 3 > all (select c from t)`, returns null. - return nil, nil - } - return true, nil -} - -func (e *Evaluator) checkAnyResult(cs *ast.CompareSubqueryExpr, lv interface{}, result []interface{}) (interface{}, error) { - hasNull := false - for _, v := range result { - if v == nil { - hasNull = true - continue - } - - comRes, err := types.Compare(lv, v) - if err != nil { - return nil, errors.Trace(err) - } - - res, err := getCompResult(cs.Op, comRes) - if err != nil { - return nil, errors.Trace(err) - } - if res { - return true, nil - } - } - - if hasNull { - // If no matched but we get null, return null. - // Like `insert t (c) values (1),(2),(null)`, then - // `select 0 > any (select c from t)`, returns null. - return nil, nil - } - - return false, nil -} - -func (e *Evaluator) existsSubquery(v *ast.ExistsSubqueryExpr) bool { - datum := v.Sel.GetDatum() - if datum.Kind() == types.KindNull { - v.SetInt64(0) - return true - } - r := datum.GetValue() - rows, _ := r.([]interface{}) - if len(rows) > 0 { - v.SetInt64(1) - } else { - v.SetInt64(0) - } - return true -} - -// Evaluate SubqueryExpr. -// Get the value from v.SubQuery and set it to v. -func (e *Evaluator) subqueryExpr(v *ast.SubqueryExpr) bool { - if v.SubqueryExec != nil { - v.SetDatum(*v.SubqueryExec.GetDatum()) - } - v.Evaluated = true - return true -} - -// Do the real work to evaluate subquery. -func (e *Evaluator) subqueryExec(v ast.SubqueryExec) bool { - rowCount := 2 - if e.multipleRows { - rowCount = -1 - } else if e.existRow { - rowCount = 1 - } - rows, err := v.EvalRows(e.ctx, rowCount) - if err != nil { - e.err = errors.Trace(err) - return false - } - if e.multipleRows || e.existRow { - v.SetValue(rows) - return true - } - switch len(rows) { - case 0: - v.GetDatum().SetNull() - case 1: - v.SetValue(rows[0]) - default: - e.err = errors.New("Subquery returns more than 1 row") - return false - } - return true -} - -func (e *Evaluator) checkInList(not bool, in interface{}, list []interface{}) interface{} { - hasNull := false - for _, v := range list { - if v == nil { - hasNull = true - continue - } - - r, err := types.Compare(types.Coerce(in, v)) - if err != nil { - e.err = errors.Trace(err) - return nil - } - if r == 0 { - if !not { - return 1 - } - return 0 - } - } - - if hasNull { - // if no matched but we got null in In, return null - // e.g 1 in (null, 2, 3) returns null - return nil - } - if not { - return 1 - } - return 0 -} - -func (e *Evaluator) patternIn(n *ast.PatternInExpr) bool { - lhs := n.Expr.GetDatum() - if lhs.Kind() == types.KindNull { - n.SetNull() - return true - } - if n.Sel == nil { - values := make([]interface{}, 0, len(n.List)) - for _, ei := range n.List { - values = append(values, ei.GetValue()) - } - x := e.checkInList(n.Not, lhs.GetValue(), values) - if e.err != nil { - return false - } - n.SetValue(x) - return true - } - se := n.Sel.(*ast.SubqueryExpr) - sel := se.SubqueryExec - - res := sel.GetValue().([]interface{}) - x := e.checkInList(n.Not, lhs.GetValue(), res) - if e.err != nil { - return false - } - n.SetValue(x) - return true -} - -func (e *Evaluator) isNull(v *ast.IsNullExpr) bool { - var boolVal bool - if v.Expr.GetDatum().Kind() == types.KindNull { - boolVal = true - } - if v.Not { - boolVal = !boolVal - } - v.SetInt64(boolToInt64(boolVal)) - return true -} - -func (e *Evaluator) isTruth(v *ast.IsTruthExpr) bool { - var boolVal bool - datum := v.Expr.GetDatum() - if datum.Kind() != types.KindNull { - ival, err := datum.ToBool() - if err != nil { - e.err = errors.Trace(err) - return false - } - if ival == v.True { - boolVal = true - } - } - if v.Not { - boolVal = !boolVal - } - v.GetDatum().SetInt64(boolToInt64(boolVal)) - return true -} - -func (e *Evaluator) paramMarker(v *ast.ParamMarkerExpr) bool { - return true -} - -func (e *Evaluator) parentheses(v *ast.ParenthesesExpr) bool { - v.SetDatum(*v.Expr.GetDatum()) - return true -} - -func (e *Evaluator) position(v *ast.PositionExpr) bool { - v.SetDatum(*v.Refer.Expr.GetDatum()) - return true -} - -func (e *Evaluator) row(v *ast.RowExpr) bool { - row := make([]interface{}, 0, len(v.Values)) - for _, val := range v.Values { - row = append(row, val.GetValue()) - } - v.SetValue(row) - return true -} - -func (e *Evaluator) unaryOperation(u *ast.UnaryOperationExpr) bool { - defer func() { - if er := recover(); er != nil { - e.err = errors.Errorf("%v", er) - } - }() - aDatum := u.V.GetDatum() - if aDatum.Kind() == types.KindNull { - u.SetNull() - return true - } - switch op := u.Op; op { - case opcode.Not: - n, err := aDatum.ToBool() - if err != nil { - e.err = errors.Trace(err) - } else if n == 0 { - u.SetInt64(1) - } else { - u.SetInt64(0) - } - case opcode.BitNeg: - // for bit operation, we will use int64 first, then return uint64 - n, err := aDatum.ToInt64() - if err != nil { - e.err = errors.Trace(err) - return false - } - u.SetUint64(uint64(^n)) - case opcode.Plus: - switch aDatum.Kind() { - case types.KindInt64, - types.KindUint64, - types.KindFloat64, - types.KindFloat32, - types.KindMysqlDuration, - types.KindMysqlTime, - types.KindString, - types.KindMysqlDecimal, - types.KindBytes, - types.KindMysqlHex, - types.KindMysqlBit, - types.KindMysqlEnum, - types.KindMysqlSet: - u.SetDatum(*aDatum) - default: - e.err = ErrInvalidOperation - return false - } - case opcode.Minus: - switch aDatum.Kind() { - case types.KindInt64: - u.SetInt64(-aDatum.GetInt64()) - case types.KindUint64: - u.SetInt64(-int64(aDatum.GetUint64())) - case types.KindFloat64: - u.SetFloat64(-aDatum.GetFloat64()) - case types.KindFloat32: - u.SetFloat32(-aDatum.GetFloat32()) - case types.KindMysqlDuration: - u.SetValue(mysql.ZeroDecimal.Sub(aDatum.GetMysqlDuration().ToNumber())) - case types.KindMysqlTime: - u.SetValue(mysql.ZeroDecimal.Sub(aDatum.GetMysqlTime().ToNumber())) - case types.KindString: - f, err := types.StrToFloat(aDatum.GetString()) - e.err = errors.Trace(err) - u.SetFloat64(-f) - case types.KindMysqlDecimal: - f, _ := aDatum.GetMysqlDecimal().Float64() - u.SetValue(mysql.NewDecimalFromFloat(-f)) - case types.KindBytes: - f, err := types.StrToFloat(string(aDatum.GetBytes())) - e.err = errors.Trace(err) - u.SetFloat64(-f) - case types.KindMysqlHex: - u.SetFloat64(-aDatum.GetMysqlHex().ToNumber()) - case types.KindMysqlBit: - u.SetFloat64(-aDatum.GetMysqlBit().ToNumber()) - case types.KindMysqlEnum: - u.SetFloat64(-aDatum.GetMysqlEnum().ToNumber()) - case types.KindMysqlSet: - u.SetFloat64(-aDatum.GetMysqlSet().ToNumber()) - default: - e.err = ErrInvalidOperation - return false - } - default: - e.err = ErrInvalidOperation - return false - } - - return true -} - -func (e *Evaluator) values(v *ast.ValuesExpr) bool { - v.SetDatum(*v.Column.GetDatum()) - return true -} - -func (e *Evaluator) variable(v *ast.VariableExpr) bool { - name := strings.ToLower(v.Name) - sessionVars := variable.GetSessionVars(e.ctx) - globalVars := variable.GetGlobalVarAccessor(e.ctx) - if !v.IsSystem { - // user vars - if value, ok := sessionVars.Users[name]; ok { - v.SetString(value) - return true - } - // select null user vars is permitted. - v.SetNull() - return true - } - - _, ok := variable.SysVars[name] - if !ok { - // select null sys vars is not permitted - e.err = variable.UnknownSystemVar.Gen("Unknown system variable '%s'", name) - return false - } - - if !v.IsGlobal { - if value, ok := sessionVars.Systems[name]; ok { - v.SetString(value) - return true - } - } - - value, err := globalVars.GetGlobalSysVar(e.ctx, name) - if err != nil { - e.err = errors.Trace(err) - return false - } - - v.SetString(value) - return true -} - -func (e *Evaluator) funcCall(v *ast.FuncCallExpr) bool { - of, ok := OldFuncs[v.FnName.L] - if ok { - if len(v.Args) < of.MinArgs || (of.MaxArgs != -1 && len(v.Args) > of.MaxArgs) { - e.err = ErrInvalidOperation.Gen("number of function arguments must in [%d, %d].", of.MinArgs, of.MaxArgs) - return false - } - a := make([]interface{}, len(v.Args)) - for i, arg := range v.Args { - a[i] = arg.GetValue() - } - val, err := of.F(a, e.ctx) - if err != nil { - e.err = errors.Trace(err) - return false - } - v.SetValue(val) - return true - } - f, ok := Funcs[v.FnName.L] - if !ok { - e.err = ErrInvalidOperation.Gen("unknown function %s", v.FnName.O) - return false - } - if len(v.Args) < f.MinArgs || (f.MaxArgs != -1 && len(v.Args) > f.MaxArgs) { - e.err = ErrInvalidOperation.Gen("number of function arguments must in [%d, %d].", f.MinArgs, f.MaxArgs) - return false - } - a := make([]types.Datum, len(v.Args)) - for i, arg := range v.Args { - a[i] = *arg.GetDatum() - } - val, err := f.F(a, e.ctx) - if err != nil { - e.err = errors.Trace(err) - return false - } - v.SetDatum(val) - return true -} - -func (e *Evaluator) funcCast(v *ast.FuncCastExpr) bool { - value := v.Expr.GetValue() - // Casting nil to any type returns null - if value == nil { - v.SetNull() - return true - } - var err error - value, err = types.Cast(value, v.Tp) - if err != nil { - e.err = errors.Trace(err) - return false - } - v.SetValue(value) - return true -} - -func (e *Evaluator) aggregateFunc(v *ast.AggregateFuncExpr) bool { - name := strings.ToLower(v.F) - switch name { - case ast.AggFuncAvg: - e.evalAggAvg(v) - case ast.AggFuncCount: - e.evalAggCount(v) - case ast.AggFuncFirstRow, ast.AggFuncMax, ast.AggFuncMin, ast.AggFuncSum: - e.evalAggSetValue(v) - case ast.AggFuncGroupConcat: - e.evalAggGroupConcat(v) - } - return e.err == nil -} - -func (e *Evaluator) evalAggCount(v *ast.AggregateFuncExpr) { - ctx := v.GetContext() - v.SetInt64(ctx.Count) -} - -func (e *Evaluator) evalAggSetValue(v *ast.AggregateFuncExpr) { - ctx := v.GetContext() - v.SetValue(ctx.Value) -} - -func (e *Evaluator) evalAggAvg(v *ast.AggregateFuncExpr) { - ctx := v.GetContext() - switch x := ctx.Value.(type) { - case float64: - ctx.Value = x / float64(ctx.Count) - case mysql.Decimal: - ctx.Value = x.Div(mysql.NewDecimalFromUint(uint64(ctx.Count), 0)) - } - v.SetValue(ctx.Value) -} - -func (e *Evaluator) evalAggGroupConcat(v *ast.AggregateFuncExpr) { - ctx := v.GetContext() - if ctx.Buffer != nil { - v.SetValue(ctx.Buffer.String()) - } else { - v.SetValue(nil) - } -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/evaluator_binop.go b/vendor/github.com/pingcap/tidb/evaluator/evaluator_binop.go deleted file mode 100644 index bec6a1f8d..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/evaluator_binop.go +++ /dev/null @@ -1,564 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "math" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/util/types" -) - -const ( - zeroI64 int64 = 0 - oneI64 int64 = 1 -) - -func (e *Evaluator) binaryOperation(o *ast.BinaryOperationExpr) bool { - switch o.Op { - case opcode.AndAnd, opcode.OrOr, opcode.LogicXor: - return e.handleLogicOperation(o) - case opcode.LT, opcode.LE, opcode.GE, opcode.GT, opcode.EQ, opcode.NE, opcode.NullEQ: - return e.handleComparisonOp(o) - case opcode.RightShift, opcode.LeftShift, opcode.And, opcode.Or, opcode.Xor: - return e.handleBitOp(o) - case opcode.Plus, opcode.Minus, opcode.Mod, opcode.Div, opcode.Mul, opcode.IntDiv: - return e.handleArithmeticOp(o) - default: - e.err = ErrInvalidOperation - return false - } -} - -func (e *Evaluator) handleLogicOperation(o *ast.BinaryOperationExpr) bool { - switch o.Op { - case opcode.AndAnd: - return e.handleAndAnd(o) - case opcode.OrOr: - return e.handleOrOr(o) - case opcode.LogicXor: - return e.handleXor(o) - default: - e.err = ErrInvalidOperation.Gen("unkown operator %s", o.Op) - return false - } -} - -func (e *Evaluator) handleAndAnd(o *ast.BinaryOperationExpr) bool { - leftVal := o.L.GetValue() - righVal := o.R.GetValue() - if leftVal != nil { - x, err := types.ToBool(leftVal) - if err != nil { - e.err = errors.Trace(err) - return false - } else if x == 0 { - // false && any other types is false - o.SetValue(x) - return true - } - } - if righVal != nil { - y, err := types.ToBool(righVal) - if err != nil { - e.err = errors.Trace(err) - return false - } else if y == 0 { - o.SetValue(y) - return true - } - } - if leftVal == nil || righVal == nil { - o.SetValue(nil) - return true - } - o.SetValue(int64(1)) - return true -} - -func (e *Evaluator) handleOrOr(o *ast.BinaryOperationExpr) bool { - leftVal := o.L.GetValue() - righVal := o.R.GetValue() - if leftVal != nil { - x, err := types.ToBool(leftVal) - if err != nil { - e.err = errors.Trace(err) - return false - } else if x == 1 { - // true || any other types is true. - o.SetValue(x) - return true - } - } - if righVal != nil { - y, err := types.ToBool(righVal) - if err != nil { - e.err = errors.Trace(err) - return false - } else if y == 1 { - o.SetValue(y) - return true - } - } - if leftVal == nil || righVal == nil { - o.SetValue(nil) - return true - } - o.SetValue(int64(0)) - return true -} - -func (e *Evaluator) handleXor(o *ast.BinaryOperationExpr) bool { - leftVal := o.L.GetValue() - righVal := o.R.GetValue() - if leftVal == nil || righVal == nil { - o.SetValue(nil) - return true - } - x, err := types.ToBool(leftVal) - if err != nil { - e.err = errors.Trace(err) - return false - } - - y, err := types.ToBool(righVal) - if err != nil { - e.err = errors.Trace(err) - return false - } - if x == y { - o.SetValue(int64(0)) - } else { - o.SetValue(int64(1)) - } - return true -} - -func (e *Evaluator) handleComparisonOp(o *ast.BinaryOperationExpr) bool { - a, b := types.Coerce(o.L.GetValue(), o.R.GetValue()) - if a == nil || b == nil { - // for <=>, if a and b are both nil, return true. - // if a or b is nil, return false. - if o.Op == opcode.NullEQ { - if a == nil && b == nil { - o.SetValue(oneI64) - } else { - o.SetValue(zeroI64) - } - } else { - o.SetValue(nil) - } - return true - } - - n, err := types.Compare(a, b) - if err != nil { - e.err = errors.Trace(err) - return false - } - - r, err := getCompResult(o.Op, n) - if err != nil { - e.err = errors.Trace(err) - return false - } - if r { - o.SetValue(oneI64) - } else { - o.SetValue(zeroI64) - } - return true -} - -func getCompResult(op opcode.Op, value int) (bool, error) { - switch op { - case opcode.LT: - return value < 0, nil - case opcode.LE: - return value <= 0, nil - case opcode.GE: - return value >= 0, nil - case opcode.GT: - return value > 0, nil - case opcode.EQ: - return value == 0, nil - case opcode.NE: - return value != 0, nil - case opcode.NullEQ: - return value == 0, nil - default: - return false, ErrInvalidOperation.Gen("invalid op %v in comparision operation", op) - } -} - -func (e *Evaluator) handleBitOp(o *ast.BinaryOperationExpr) bool { - a, b := types.Coerce(o.L.GetValue(), o.R.GetValue()) - - if a == nil || b == nil { - o.SetValue(nil) - return true - } - - x, err := types.ToInt64(a) - if err != nil { - e.err = errors.Trace(err) - return false - } - - y, err := types.ToInt64(b) - if err != nil { - e.err = errors.Trace(err) - return false - } - - // use a int64 for bit operator, return uint64 - switch o.Op { - case opcode.And: - o.SetValue(uint64(x & y)) - case opcode.Or: - o.SetValue(uint64(x | y)) - case opcode.Xor: - o.SetValue(uint64(x ^ y)) - case opcode.RightShift: - o.SetValue(uint64(x) >> uint64(y)) - case opcode.LeftShift: - o.SetValue(uint64(x) << uint64(y)) - default: - e.err = ErrInvalidOperation.Gen("invalid op %v in bit operation", o.Op) - return false - } - return true -} - -func (e *Evaluator) handleArithmeticOp(o *ast.BinaryOperationExpr) bool { - a, err := coerceArithmetic(o.L.GetValue()) - if err != nil { - e.err = errors.Trace(err) - return false - } - - b, err := coerceArithmetic(o.R.GetValue()) - if err != nil { - e.err = errors.Trace(err) - return false - } - - a, b = types.Coerce(a, b) - if a == nil || b == nil { - o.SetValue(nil) - return true - } - - var result interface{} - switch o.Op { - case opcode.Plus: - result, e.err = computePlus(a, b) - case opcode.Minus: - result, e.err = computeMinus(a, b) - case opcode.Mul: - result, e.err = computeMul(a, b) - case opcode.Div: - result, e.err = computeDiv(a, b) - case opcode.Mod: - result, e.err = computeMod(a, b) - case opcode.IntDiv: - result, e.err = computeIntDiv(a, b) - default: - e.err = ErrInvalidOperation.Gen("invalid op %v in arithmetic operation", o.Op) - return false - } - o.SetValue(result) - return e.err == nil -} - -func computePlus(a, b interface{}) (interface{}, error) { - switch x := a.(type) { - case int64: - switch y := b.(type) { - case int64: - return types.AddInt64(x, y) - case uint64: - return types.AddInteger(y, x) - } - case uint64: - switch y := b.(type) { - case int64: - return types.AddInteger(x, y) - case uint64: - return types.AddUint64(x, y) - } - case float64: - switch y := b.(type) { - case float64: - return x + y, nil - } - case mysql.Decimal: - switch y := b.(type) { - case mysql.Decimal: - return x.Add(y), nil - } - } - return types.InvOp2(a, b, opcode.Plus) -} - -func computeMinus(a, b interface{}) (interface{}, error) { - switch x := a.(type) { - case int64: - switch y := b.(type) { - case int64: - return types.SubInt64(x, y) - case uint64: - return types.SubIntWithUint(x, y) - } - case uint64: - switch y := b.(type) { - case int64: - return types.SubUintWithInt(x, y) - case uint64: - return types.SubUint64(x, y) - } - case float64: - switch y := b.(type) { - case float64: - return x - y, nil - } - case mysql.Decimal: - switch y := b.(type) { - case mysql.Decimal: - return x.Sub(y), nil - } - } - - return types.InvOp2(a, b, opcode.Minus) -} - -func computeMul(a, b interface{}) (interface{}, error) { - switch x := a.(type) { - case int64: - switch y := b.(type) { - case int64: - return types.MulInt64(x, y) - case uint64: - return types.MulInteger(y, x) - } - case uint64: - switch y := b.(type) { - case int64: - return types.MulInteger(x, y) - case uint64: - return types.MulUint64(x, y) - } - case float64: - switch y := b.(type) { - case float64: - return x * y, nil - } - case mysql.Decimal: - switch y := b.(type) { - case mysql.Decimal: - return x.Mul(y), nil - } - } - - return types.InvOp2(a, b, opcode.Mul) -} - -func computeDiv(a, b interface{}) (interface{}, error) { - // MySQL support integer divison Div and division operator / - // we use opcode.Div for division operator and will use another for integer division later. - // for division operator, we will use float64 for calculation. - switch x := a.(type) { - case float64: - y, err := types.ToFloat64(b) - if err != nil { - return nil, errors.Trace(err) - } - - if y == 0 { - return nil, nil - } - - return x / y, nil - default: - // the scale of the result is the scale of the first operand plus - // the value of the div_precision_increment system variable (which is 4 by default) - // we will use 4 here - xa, err := types.ToDecimal(a) - if err != nil { - return nil, errors.Trace(err) - } - - xb, err := types.ToDecimal(b) - if err != nil { - return nil, errors.Trace(err) - } - if f, _ := xb.Float64(); f == 0 { - // division by zero return null - return nil, nil - } - - return xa.Div(xb), nil - } -} - -func computeMod(a, b interface{}) (interface{}, error) { - switch x := a.(type) { - case int64: - switch y := b.(type) { - case int64: - if y == 0 { - return nil, nil - } - return x % y, nil - case uint64: - if y == 0 { - return nil, nil - } else if x < 0 { - // first is int64, return int64. - return -int64(uint64(-x) % y), nil - } - return int64(uint64(x) % y), nil - } - case uint64: - switch y := b.(type) { - case int64: - if y == 0 { - return nil, nil - } else if y < 0 { - // first is uint64, return uint64. - return uint64(x % uint64(-y)), nil - } - return x % uint64(y), nil - case uint64: - if y == 0 { - return nil, nil - } - return x % y, nil - } - case float64: - switch y := b.(type) { - case float64: - if y == 0 { - return nil, nil - } - return math.Mod(x, y), nil - } - case mysql.Decimal: - switch y := b.(type) { - case mysql.Decimal: - xf, _ := x.Float64() - yf, _ := y.Float64() - if yf == 0 { - return nil, nil - } - return math.Mod(xf, yf), nil - } - } - - return types.InvOp2(a, b, opcode.Mod) -} - -func computeIntDiv(a, b interface{}) (interface{}, error) { - switch x := a.(type) { - case int64: - switch y := b.(type) { - case int64: - if y == 0 { - return nil, nil - } - return types.DivInt64(x, y) - case uint64: - if y == 0 { - return nil, nil - } - return types.DivIntWithUint(x, y) - } - case uint64: - switch y := b.(type) { - case int64: - if y == 0 { - return nil, nil - } - return types.DivUintWithInt(x, y) - case uint64: - if y == 0 { - return nil, nil - } - return x / y, nil - } - } - - // if any is none integer, use decimal to calculate - x, err := types.ToDecimal(a) - if err != nil { - return nil, errors.Trace(err) - } - - y, err := types.ToDecimal(b) - if err != nil { - return nil, errors.Trace(err) - } - - if f, _ := y.Float64(); f == 0 { - return nil, nil - } - - return x.Div(y).IntPart(), nil -} - -func coerceArithmetic(a interface{}) (interface{}, error) { - switch x := a.(type) { - case string: - // MySQL will convert string to float for arithmetic operation - f, err := types.StrToFloat(x) - if err != nil { - return nil, errors.Trace(err) - } - return f, errors.Trace(err) - case mysql.Time: - // if time has no precision, return int64 - v := x.ToNumber() - if x.Fsp == 0 { - return v.IntPart(), nil - } - return v, nil - case mysql.Duration: - // if duration has no precision, return int64 - v := x.ToNumber() - if x.Fsp == 0 { - return v.IntPart(), nil - } - return v, nil - case []byte: - // []byte is the same as string, converted to float for arithmetic operator. - f, err := types.StrToFloat(string(x)) - if err != nil { - return nil, errors.Trace(err) - } - return f, errors.Trace(err) - case mysql.Hex: - return x.ToNumber(), nil - case mysql.Bit: - return x.ToNumber(), nil - case mysql.Enum: - return x.ToNumber(), nil - case mysql.Set: - return x.ToNumber(), nil - default: - return x, nil - } -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/evaluator_like.go b/vendor/github.com/pingcap/tidb/evaluator/evaluator_like.go deleted file mode 100644 index 2870fa782..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/evaluator_like.go +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package evaluator - -import ( - "regexp" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/util/types" -) - -const ( - patMatch = iota + 1 - patOne - patAny -) - -// handle escapes and wild cards convert pattern characters and pattern types, -func compilePattern(pattern string, escape byte) (patChars, patTypes []byte) { - var lastAny bool - patChars = make([]byte, len(pattern)) - patTypes = make([]byte, len(pattern)) - patLen := 0 - for i := 0; i < len(pattern); i++ { - var tp byte - var c = pattern[i] - switch c { - case escape: - lastAny = false - tp = patMatch - if i < len(pattern)-1 { - i++ - c = pattern[i] - if c == escape || c == '_' || c == '%' { - // valid escape. - } else { - // invalid escape, fall back to escape byte - // mysql will treat escape character as the origin value even - // the escape sequence is invalid in Go or C. - // e.g, \m is invalid in Go, but in MySQL we will get "m" for select '\m'. - // Following case is correct just for escape \, not for others like +. - // TODO: add more checks for other escapes. - i-- - c = escape - } - } - case '_': - lastAny = false - tp = patOne - case '%': - if lastAny { - continue - } - lastAny = true - tp = patAny - default: - lastAny = false - tp = patMatch - } - patChars[patLen] = c - patTypes[patLen] = tp - patLen++ - } - for i := 0; i < patLen-1; i++ { - if (patTypes[i] == patAny) && (patTypes[i+1] == patOne) { - patTypes[i] = patOne - patTypes[i+1] = patAny - } - } - patChars = patChars[:patLen] - patTypes = patTypes[:patLen] - return -} - -const caseDiff = 'a' - 'A' - -func matchByteCI(a, b byte) bool { - if a == b { - return true - } - if a >= 'a' && a <= 'z' && a-caseDiff == b { - return true - } - return a >= 'A' && a <= 'Z' && a+caseDiff == b -} - -func doMatch(str string, patChars, patTypes []byte) bool { - var sIdx int - for i := 0; i < len(patChars); i++ { - switch patTypes[i] { - case patMatch: - if sIdx >= len(str) || !matchByteCI(str[sIdx], patChars[i]) { - return false - } - sIdx++ - case patOne: - sIdx++ - if sIdx > len(str) { - return false - } - case patAny: - i++ - if i == len(patChars) { - return true - } - for sIdx < len(str) { - if matchByteCI(patChars[i], str[sIdx]) && doMatch(str[sIdx:], patChars[i:], patTypes[i:]) { - return true - } - sIdx++ - } - return false - } - } - return sIdx == len(str) -} - -func (e *Evaluator) patternLike(p *ast.PatternLikeExpr) bool { - expr := p.Expr.GetValue() - if expr == nil { - p.SetValue(nil) - return true - } - - sexpr, err := types.ToString(expr) - if err != nil { - e.err = errors.Trace(err) - return false - } - - // We need to compile pattern if it has not been compiled or it is not static. - var needCompile = len(p.PatChars) == 0 || !ast.IsConstant(p.Pattern) - if needCompile { - pattern := p.Pattern.GetValue() - if pattern == nil { - p.SetValue(nil) - return true - } - spattern, err := types.ToString(pattern) - if err != nil { - e.err = errors.Trace(err) - return false - } - p.PatChars, p.PatTypes = compilePattern(spattern, p.Escape) - } - match := doMatch(sexpr, p.PatChars, p.PatTypes) - if p.Not { - match = !match - } - p.SetValue(boolToInt64(match)) - return true -} - -func (e *Evaluator) patternRegexp(p *ast.PatternRegexpExpr) bool { - var sexpr string - if p.Sexpr != nil { - sexpr = *p.Sexpr - } else { - expr := p.Expr.GetValue() - if expr == nil { - p.SetValue(nil) - return true - } - var err error - sexpr, err = types.ToString(expr) - if err != nil { - e.err = errors.Errorf("non-string Expression in LIKE: %v (Value of type %T)", expr, expr) - return false - } - - if ast.IsConstant(p.Expr) { - p.Sexpr = new(string) - *p.Sexpr = sexpr - } - } - - re := p.Re - if re == nil { - pattern := p.Pattern.GetValue() - if pattern == nil { - p.SetValue(nil) - return true - } - spattern, err := types.ToString(pattern) - if err != nil { - e.err = errors.Errorf("non-string pattern in LIKE: %v (Value of type %T)", pattern, pattern) - return false - } - - if re, err = regexp.Compile(spattern); err != nil { - e.err = errors.Trace(err) - return false - } - - if ast.IsConstant(p.Pattern) { - p.Re = re - } - } - match := re.MatchString(sexpr) - if p.Not { - match = !match - } - p.SetValue(boolToInt64(match)) - return true -} diff --git a/vendor/github.com/pingcap/tidb/evaluator/helper.go b/vendor/github.com/pingcap/tidb/evaluator/helper.go deleted file mode 100644 index eaa759e71..000000000 --- a/vendor/github.com/pingcap/tidb/evaluator/helper.go +++ /dev/null @@ -1,136 +0,0 @@ -package evaluator - -import ( - "strconv" - "strings" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/util/types" -) - -var ( - // CurrentTimestamp is the keyword getting default value for datetime and timestamp type. - CurrentTimestamp = "CURRENT_TIMESTAMP" - currentTimestampL = "current_timestamp" - // ZeroTimestamp shows the zero datetime and timestamp. - ZeroTimestamp = "0000-00-00 00:00:00" -) - -var ( - errDefaultValue = errors.New("invalid default value") -) - -// GetTimeValue gets the time value with type tp. -func GetTimeValue(ctx context.Context, v interface{}, tp byte, fsp int) (interface{}, error) { - return getTimeValue(ctx, v, tp, fsp) -} - -func getTimeValue(ctx context.Context, v interface{}, tp byte, fsp int) (interface{}, error) { - value := mysql.Time{ - Type: tp, - Fsp: fsp, - } - - defaultTime, err := getSystemTimestamp(ctx) - if err != nil { - return nil, errors.Trace(err) - } - - switch x := v.(type) { - case string: - upperX := strings.ToUpper(x) - if upperX == CurrentTimestamp { - value.Time = defaultTime - } else if upperX == ZeroTimestamp { - value, _ = mysql.ParseTimeFromNum(0, tp, fsp) - } else { - value, err = mysql.ParseTime(x, tp, fsp) - if err != nil { - return nil, errors.Trace(err) - } - } - case *ast.ValueExpr: - switch x.Kind() { - case types.KindString: - value, err = mysql.ParseTime(x.GetString(), tp, fsp) - if err != nil { - return nil, errors.Trace(err) - } - case types.KindInt64: - value, err = mysql.ParseTimeFromNum(x.GetInt64(), tp, fsp) - if err != nil { - return nil, errors.Trace(err) - } - case types.KindNull: - return nil, nil - default: - return nil, errors.Trace(errDefaultValue) - } - case *ast.FuncCallExpr: - if x.FnName.L == currentTimestampL { - return CurrentTimestamp, nil - } - return nil, errors.Trace(errDefaultValue) - case *ast.UnaryOperationExpr: - // support some expression, like `-1` - v, err := Eval(ctx, x) - if err != nil { - return nil, errors.Trace(err) - } - ft := types.NewFieldType(mysql.TypeLonglong) - xval, err := types.Convert(v, ft) - if err != nil { - return nil, errors.Trace(err) - } - - value, err = mysql.ParseTimeFromNum(xval.(int64), tp, fsp) - if err != nil { - return nil, errors.Trace(err) - } - default: - return nil, nil - } - - return value, nil -} - -// IsCurrentTimeExpr returns whether e is CurrentTimeExpr. -func IsCurrentTimeExpr(e ast.ExprNode) bool { - x, ok := e.(*ast.FuncCallExpr) - if !ok { - return false - } - return x.FnName.L == currentTimestampL -} - -func getSystemTimestamp(ctx context.Context) (time.Time, error) { - value := time.Now() - - if ctx == nil { - return value, nil - } - - // check whether use timestamp varibale - sessionVars := variable.GetSessionVars(ctx) - if v, ok := sessionVars.Systems["timestamp"]; ok { - if v != "" { - timestamp, err := strconv.ParseInt(v, 10, 64) - if err != nil { - return time.Time{}, errors.Trace(err) - } - - if timestamp <= 0 { - return value, nil - } - - return time.Unix(timestamp, 0), nil - } - } - - return value, nil -} diff --git a/vendor/github.com/pingcap/tidb/executor/adapter.go b/vendor/github.com/pingcap/tidb/executor/adapter.go deleted file mode 100644 index fbc8657b5..000000000 --- a/vendor/github.com/pingcap/tidb/executor/adapter.go +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/optimizer/plan" -) - -// recordSet wraps an executor, implements ast.RecordSet interface -type recordSet struct { - fields []*ast.ResultField - executor Executor -} - -func (a *recordSet) Fields() ([]*ast.ResultField, error) { - return a.fields, nil -} - -func (a *recordSet) Next() (*ast.Row, error) { - row, err := a.executor.Next() - if err != nil || row == nil { - return nil, errors.Trace(err) - } - return &ast.Row{Data: row.Data}, nil -} - -func (a *recordSet) Close() error { - return a.executor.Close() -} - -type statement struct { - is infoschema.InfoSchema - plan plan.Plan -} - -func (a *statement) OriginText() string { - return "" -} - -func (a *statement) SetText(text string) { - return -} - -func (a *statement) IsDDL() bool { - return false -} - -func (a *statement) Exec(ctx context.Context) (ast.RecordSet, error) { - b := newExecutorBuilder(ctx, a.is) - e := b.build(a.plan) - if b.err != nil { - return nil, errors.Trace(b.err) - } - - if executorExec, ok := e.(*ExecuteExec); ok { - err := executorExec.Build() - if err != nil { - return nil, errors.Trace(err) - } - e = executorExec.StmtExec - } - - if len(e.Fields()) == 0 { - // No result fields means no Recordset. - defer e.Close() - for { - row, err := e.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - // It's used to insert retry. - changeInsertValueForRetry(a.plan, e) - return nil, nil - } - } - } - - fs := e.Fields() - for _, f := range fs { - if len(f.ColumnAsName.O) == 0 { - f.ColumnAsName = f.Column.Name - } - } - return &recordSet{ - executor: e, - fields: fs, - }, nil -} - -func changeInsertValueForRetry(p plan.Plan, e Executor) { - if v, ok := p.(*plan.Insert); ok { - var insertValue *InsertValues - if !v.IsReplace { - insertValue = e.(*InsertExec).InsertValues - } else { - insertValue = e.(*ReplaceExec).InsertValues - } - v.Columns = insertValue.Columns - v.Setlist = insertValue.Setlist - if len(v.Setlist) == 0 { - v.Lists = insertValue.Lists - } - } -} diff --git a/vendor/github.com/pingcap/tidb/executor/builder.go b/vendor/github.com/pingcap/tidb/executor/builder.go deleted file mode 100644 index 07143ff42..000000000 --- a/vendor/github.com/pingcap/tidb/executor/builder.go +++ /dev/null @@ -1,438 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "math" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/optimizer/plan" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/sessionctx/autocommit" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/util/types" -) - -// executorBuilder builds an Executor from a Plan. -// The InfoSchema must be the same one used in InfoBinder. -type executorBuilder struct { - ctx context.Context - is infoschema.InfoSchema - err error -} - -func newExecutorBuilder(ctx context.Context, is infoschema.InfoSchema) *executorBuilder { - return &executorBuilder{ - ctx: ctx, - is: is, - } -} - -func (b *executorBuilder) build(p plan.Plan) Executor { - switch v := p.(type) { - case nil: - return nil - case *plan.Aggregate: - return b.buildAggregate(v) - case *plan.CheckTable: - return b.buildCheckTable(v) - case *plan.DDL: - return b.buildDDL(v) - case *plan.Deallocate: - return b.buildDeallocate(v) - case *plan.Delete: - return b.buildDelete(v) - case *plan.Distinct: - return b.buildDistinct(v) - case *plan.Execute: - return b.buildExecute(v) - case *plan.Explain: - return b.buildExplain(v) - case *plan.Filter: - src := b.build(v.Src()) - return b.buildFilter(src, v.Conditions) - case *plan.Having: - return b.buildHaving(v) - case *plan.IndexScan: - return b.buildIndexScan(v) - case *plan.Insert: - return b.buildInsert(v) - case *plan.JoinInner: - return b.buildJoinInner(v) - case *plan.JoinOuter: - return b.buildJoinOuter(v) - case *plan.Limit: - return b.buildLimit(v) - case *plan.Prepare: - return b.buildPrepare(v) - case *plan.SelectFields: - return b.buildSelectFields(v) - case *plan.SelectLock: - return b.buildSelectLock(v) - case *plan.ShowDDL: - return b.buildShowDDL(v) - case *plan.Show: - return b.buildShow(v) - case *plan.Simple: - return b.buildSimple(v) - case *plan.Sort: - return b.buildSort(v) - case *plan.TableScan: - return b.buildTableScan(v) - case *plan.Union: - return b.buildUnion(v) - case *plan.Update: - return b.buildUpdate(v) - default: - b.err = ErrUnknownPlan.Gen("Unknown Plan %T", p) - return nil - } -} - -func (b *executorBuilder) buildFilter(src Executor, conditions []ast.ExprNode) Executor { - if len(conditions) == 0 { - return src - } - return &FilterExec{ - Src: src, - Condition: b.joinConditions(conditions), - ctx: b.ctx, - } -} - -func (b *executorBuilder) buildTableScan(v *plan.TableScan) Executor { - table, _ := b.is.TableByID(v.Table.ID) - e := &TableScanExec{ - t: table, - fields: v.Fields(), - ctx: b.ctx, - ranges: v.Ranges, - seekHandle: math.MinInt64, - } - return b.buildFilter(e, v.FilterConditions) -} - -func (b *executorBuilder) buildShowDDL(v *plan.ShowDDL) Executor { - return &ShowDDLExec{ - fields: v.Fields(), - ctx: b.ctx, - } -} - -func (b *executorBuilder) buildCheckTable(v *plan.CheckTable) Executor { - return &CheckTableExec{ - tables: v.Tables, - ctx: b.ctx, - } -} - -func (b *executorBuilder) buildDeallocate(v *plan.Deallocate) Executor { - return &DeallocateExec{ - ctx: b.ctx, - Name: v.Name, - } -} - -func (b *executorBuilder) buildIndexScan(v *plan.IndexScan) Executor { - tbl, _ := b.is.TableByID(v.Table.ID) - var idx *column.IndexedCol - for _, val := range tbl.Indices() { - if val.IndexInfo.Name.L == v.Index.Name.L { - idx = val - break - } - } - e := &IndexScanExec{ - tbl: tbl, - idx: idx, - fields: v.Fields(), - ctx: b.ctx, - Desc: v.Desc, - valueTypes: make([]*types.FieldType, len(idx.Columns)), - } - - for i, ic := range idx.Columns { - col := tbl.Cols()[ic.Offset] - e.valueTypes[i] = &col.FieldType - } - - e.Ranges = make([]*IndexRangeExec, len(v.Ranges)) - for i, val := range v.Ranges { - e.Ranges[i] = b.buildIndexRange(e, val) - } - return b.buildFilter(e, v.FilterConditions) -} - -func (b *executorBuilder) buildIndexRange(scan *IndexScanExec, v *plan.IndexRange) *IndexRangeExec { - ran := &IndexRangeExec{ - scan: scan, - lowVals: v.LowVal, - lowExclude: v.LowExclude, - highVals: v.HighVal, - highExclude: v.HighExclude, - } - return ran -} - -func (b *executorBuilder) buildJoinOuter(v *plan.JoinOuter) *JoinOuterExec { - e := &JoinOuterExec{ - OuterExec: b.build(v.Outer), - InnerPlan: v.Inner, - fields: v.Fields(), - builder: b, - } - return e -} - -func (b *executorBuilder) buildJoinInner(v *plan.JoinInner) *JoinInnerExec { - e := &JoinInnerExec{ - InnerPlans: v.Inners, - innerExecs: make([]Executor, len(v.Inners)), - Condition: b.joinConditions(v.Conditions), - fields: v.Fields(), - ctx: b.ctx, - builder: b, - } - return e -} - -func (b *executorBuilder) joinConditions(conditions []ast.ExprNode) ast.ExprNode { - if len(conditions) == 0 { - return nil - } - if len(conditions) == 1 { - return conditions[0] - } - condition := &ast.BinaryOperationExpr{ - Op: opcode.AndAnd, - L: conditions[0], - R: b.joinConditions(conditions[1:]), - } - return condition -} - -func (b *executorBuilder) buildSelectLock(v *plan.SelectLock) Executor { - src := b.build(v.Src()) - if autocommit.ShouldAutocommit(b.ctx) { - // Locking of rows for update using SELECT FOR UPDATE only applies when autocommit - // is disabled (either by beginning transaction with START TRANSACTION or by setting - // autocommit to 0. If autocommit is enabled, the rows matching the specification are not locked. - // See: https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html - return src - } - e := &SelectLockExec{ - Src: src, - Lock: v.Lock, - ctx: b.ctx, - } - return e -} - -func (b *executorBuilder) buildSelectFields(v *plan.SelectFields) Executor { - src := b.build(v.Src()) - e := &SelectFieldsExec{ - Src: src, - ResultFields: v.Fields(), - ctx: b.ctx, - } - return e -} - -func (b *executorBuilder) buildAggregate(v *plan.Aggregate) Executor { - src := b.build(v.Src()) - e := &AggregateExec{ - Src: src, - ResultFields: v.Fields(), - ctx: b.ctx, - AggFuncs: v.AggFuncs, - GroupByItems: v.GroupByItems, - } - return e -} - -func (b *executorBuilder) buildHaving(v *plan.Having) Executor { - src := b.build(v.Src()) - return b.buildFilter(src, v.Conditions) -} - -func (b *executorBuilder) buildSort(v *plan.Sort) Executor { - src := b.build(v.Src()) - e := &SortExec{ - Src: src, - ByItems: v.ByItems, - ctx: b.ctx, - } - return e -} - -func (b *executorBuilder) buildLimit(v *plan.Limit) Executor { - src := b.build(v.Src()) - e := &LimitExec{ - Src: src, - Offset: v.Offset, - Count: v.Count, - } - return e -} - -func (b *executorBuilder) buildUnion(v *plan.Union) Executor { - e := &UnionExec{ - fields: v.Fields(), - Sels: make([]Executor, len(v.Selects)), - } - for i, sel := range v.Selects { - selExec := b.build(sel) - e.Sels[i] = selExec - } - return e -} - -func (b *executorBuilder) buildDistinct(v *plan.Distinct) Executor { - return &DistinctExec{Src: b.build(v.Src())} -} - -func (b *executorBuilder) buildPrepare(v *plan.Prepare) Executor { - return &PrepareExec{ - Ctx: b.ctx, - IS: b.is, - Name: v.Name, - SQLText: v.SQLText, - } -} - -func (b *executorBuilder) buildExecute(v *plan.Execute) Executor { - return &ExecuteExec{ - Ctx: b.ctx, - IS: b.is, - Name: v.Name, - UsingVars: v.UsingVars, - ID: v.ID, - } -} - -func (b *executorBuilder) buildUpdate(v *plan.Update) Executor { - selExec := b.build(v.SelectPlan) - return &UpdateExec{ctx: b.ctx, SelectExec: selExec, OrderedList: v.OrderedList} -} - -func (b *executorBuilder) buildDelete(v *plan.Delete) Executor { - selExec := b.build(v.SelectPlan) - return &DeleteExec{ - ctx: b.ctx, - SelectExec: selExec, - Tables: v.Tables, - IsMultiTable: v.IsMultiTable, - } -} - -func (b *executorBuilder) buildShow(v *plan.Show) Executor { - e := &ShowExec{ - Tp: v.Tp, - DBName: model.NewCIStr(v.DBName), - Table: v.Table, - Column: v.Column, - User: v.User, - Flag: v.Flag, - Full: v.Full, - GlobalScope: v.GlobalScope, - ctx: b.ctx, - is: b.is, - fields: v.Fields(), - } - if e.Tp == ast.ShowGrants && len(e.User) == 0 { - e.User = variable.GetSessionVars(e.ctx).User - } - return e -} - -func (b *executorBuilder) buildSimple(v *plan.Simple) Executor { - switch s := v.Statement.(type) { - case *ast.GrantStmt: - return b.buildGrant(s) - } - return &SimpleExec{Statement: v.Statement, ctx: b.ctx} -} - -func (b *executorBuilder) buildInsert(v *plan.Insert) Executor { - ivs := &InsertValues{ - ctx: b.ctx, - Columns: v.Columns, - Lists: v.Lists, - Setlist: v.Setlist, - } - if v.SelectPlan != nil { - ivs.SelectExec = b.build(v.SelectPlan) - } - // Get Table - ts, ok := v.Table.TableRefs.Left.(*ast.TableSource) - if !ok { - b.err = errors.New("Can not get table") - return nil - } - tn, ok := ts.Source.(*ast.TableName) - if !ok { - b.err = errors.New("Can not get table") - return nil - } - tableInfo := tn.TableInfo - tbl, ok := b.is.TableByID(tableInfo.ID) - if !ok { - b.err = errors.Errorf("Can not get table %d", tableInfo.ID) - return nil - } - ivs.Table = tbl - if v.IsReplace { - return b.buildReplace(ivs) - } - insert := &InsertExec{ - InsertValues: ivs, - OnDuplicate: v.OnDuplicate, - Priority: v.Priority, - } - // fields is used to evaluate values expr. - insert.fields = ts.GetResultFields() - return insert -} - -func (b *executorBuilder) buildReplace(vals *InsertValues) Executor { - return &ReplaceExec{ - InsertValues: vals, - } -} - -func (b *executorBuilder) buildGrant(grant *ast.GrantStmt) Executor { - return &GrantExec{ - ctx: b.ctx, - Privs: grant.Privs, - ObjectType: grant.ObjectType, - Level: grant.Level, - Users: grant.Users, - } -} - -func (b *executorBuilder) buildDDL(v *plan.DDL) Executor { - return &DDLExec{Statement: v.Statement, ctx: b.ctx, is: b.is} -} - -func (b *executorBuilder) buildExplain(v *plan.Explain) Executor { - return &ExplainExec{ - StmtPlan: v.StmtPlan, - fields: v.Fields(), - } -} diff --git a/vendor/github.com/pingcap/tidb/executor/compiler.go b/vendor/github.com/pingcap/tidb/executor/compiler.go deleted file mode 100644 index a00e2eb19..000000000 --- a/vendor/github.com/pingcap/tidb/executor/compiler.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/optimizer" - "github.com/pingcap/tidb/optimizer/plan" - "github.com/pingcap/tidb/sessionctx" -) - -// Compiler compiles an ast.StmtNode to a stmt.Statement. -type Compiler struct { -} - -// Compile compiles an ast.StmtNode to a stmt.Statement. -// If it is supported to use new plan and executer, it optimizes the node to -// a plan, and we wrap the plan in an adapter as stmt.Statement. -// If it is not supported, the node will be converted to old statement. -func (c *Compiler) Compile(ctx context.Context, node ast.StmtNode) (ast.Statement, error) { - ast.SetFlag(node) - - is := sessionctx.GetDomain(ctx).InfoSchema() - if err := optimizer.Preprocess(node, is, ctx); err != nil { - return nil, errors.Trace(err) - } - // Validate should be after NameResolve. - if err := optimizer.Validate(node, false); err != nil { - return nil, errors.Trace(err) - } - sb := NewSubQueryBuilder(is) - p, err := optimizer.Optimize(ctx, node, sb) - if err != nil { - return nil, errors.Trace(err) - } - sa := &statement{ - is: is, - plan: p, - } - return sa, nil -} - -// NewSubQueryBuilder builds and returns a new SubQuery builder. -func NewSubQueryBuilder(is infoschema.InfoSchema) plan.SubQueryBuilder { - return &subqueryBuilder{is: is} -} diff --git a/vendor/github.com/pingcap/tidb/executor/executor.go b/vendor/github.com/pingcap/tidb/executor/executor.go deleted file mode 100644 index 6372317ba..000000000 --- a/vendor/github.com/pingcap/tidb/executor/executor.go +++ /dev/null @@ -1,1157 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "sort" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/evaluator" - "github.com/pingcap/tidb/inspectkv" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/optimizer/plan" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/sessionctx/db" - "github.com/pingcap/tidb/sessionctx/forupdate" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/codec" - "github.com/pingcap/tidb/util/distinct" - "github.com/pingcap/tidb/util/types" -) - -var ( - _ Executor = &AggregateExec{} - _ Executor = &CheckTableExec{} - _ Executor = &FilterExec{} - _ Executor = &IndexRangeExec{} - _ Executor = &IndexScanExec{} - _ Executor = &LimitExec{} - _ Executor = &SelectFieldsExec{} - _ Executor = &SelectLockExec{} - _ Executor = &ShowDDLExec{} - _ Executor = &SortExec{} - _ Executor = &TableScanExec{} -) - -// Error instances. -var ( - ErrUnknownPlan = terror.ClassExecutor.New(CodeUnknownPlan, "Unknown plan") - ErrPrepareMulti = terror.ClassExecutor.New(CodePrepareMulti, "Can not prepare multiple statements") - ErrStmtNotFound = terror.ClassExecutor.New(CodeStmtNotFound, "Prepared statement not found") - ErrSchemaChanged = terror.ClassExecutor.New(CodeSchemaChanged, "Schema has changed") - ErrWrongParamCount = terror.ClassExecutor.New(CodeWrongParamCount, "Wrong parameter count") -) - -// Error codes. -const ( - CodeUnknownPlan terror.ErrCode = 1 - CodePrepareMulti terror.ErrCode = 2 - CodeStmtNotFound terror.ErrCode = 3 - CodeSchemaChanged terror.ErrCode = 4 - CodeWrongParamCount terror.ErrCode = 5 -) - -// Row represents a record row. -type Row struct { - // Data is the output record data for current Plan. - Data []types.Datum - - RowKeys []*RowKeyEntry -} - -// RowKeyEntry is designed for Delete statement in multi-table mode, -// we should know which table this row comes from. -type RowKeyEntry struct { - // The table which this row come from. - Tbl table.Table - // Row key. - Handle int64 -} - -// Executor executes a query. -type Executor interface { - Fields() []*ast.ResultField - Next() (*Row, error) - Close() error -} - -// ShowDDLExec represents a show DDL executor. -type ShowDDLExec struct { - fields []*ast.ResultField - ctx context.Context - done bool -} - -// Fields implements Executor Fields interface. -func (e *ShowDDLExec) Fields() []*ast.ResultField { - return e.fields -} - -// Next implements Execution Next interface. -func (e *ShowDDLExec) Next() (*Row, error) { - if e.done { - return nil, nil - } - - txn, err := e.ctx.GetTxn(false) - if err != nil { - return nil, errors.Trace(err) - } - - ddlInfo, err := inspectkv.GetDDLInfo(txn) - if err != nil { - return nil, errors.Trace(err) - } - bgInfo, err := inspectkv.GetBgDDLInfo(txn) - if err != nil { - return nil, errors.Trace(err) - } - - var ddlOwner, ddlJob string - if ddlInfo.Owner != nil { - ddlOwner = ddlInfo.Owner.String() - } - if ddlInfo.Job != nil { - ddlJob = ddlInfo.Job.String() - } - - var bgOwner, bgJob string - if bgInfo.Owner != nil { - bgOwner = bgInfo.Owner.String() - } - if bgInfo.Job != nil { - bgJob = bgInfo.Job.String() - } - - row := &Row{} - row.Data = types.MakeDatums( - ddlInfo.SchemaVer, - ddlOwner, - ddlJob, - bgInfo.SchemaVer, - bgOwner, - bgJob, - ) - for i, f := range e.fields { - f.Expr.SetValue(row.Data[i].GetValue()) - } - e.done = true - - return row, nil -} - -// Close implements Executor Close interface. -func (e *ShowDDLExec) Close() error { - return nil -} - -// CheckTableExec represents a check table executor. -type CheckTableExec struct { - tables []*ast.TableName - ctx context.Context - done bool -} - -// Fields implements Executor Fields interface. -func (e *CheckTableExec) Fields() []*ast.ResultField { - return nil -} - -// Next implements Execution Next interface. -func (e *CheckTableExec) Next() (*Row, error) { - if e.done { - return nil, nil - } - - dbName := model.NewCIStr(db.GetCurrentSchema(e.ctx)) - is := sessionctx.GetDomain(e.ctx).InfoSchema() - - for _, t := range e.tables { - tb, err := is.TableByName(dbName, t.Name) - if err != nil { - return nil, errors.Trace(err) - } - for _, idx := range tb.Indices() { - txn, err := e.ctx.GetTxn(false) - if err != nil { - return nil, errors.Trace(err) - } - err = inspectkv.CompareIndexData(txn, tb, idx) - if err != nil { - return nil, errors.Errorf("%v err:%v", t.Name, err) - } - } - } - e.done = true - - return nil, nil -} - -// Close implements plan.Plan Close interface. -func (e *CheckTableExec) Close() error { - return nil -} - -// TableScanExec represents a table scan executor. -type TableScanExec struct { - t table.Table - fields []*ast.ResultField - iter kv.Iterator - ctx context.Context - ranges []plan.TableRange // Disjoint close handle ranges. - seekHandle int64 // The handle to seek, should be initialized to math.MinInt64. - cursor int // The range cursor, used to locate to current range. -} - -// Fields implements Executor Fields interface. -func (e *TableScanExec) Fields() []*ast.ResultField { - return e.fields -} - -// Next implements Execution Next interface. -func (e *TableScanExec) Next() (*Row, error) { - for { - if e.cursor >= len(e.ranges) { - return nil, nil - } - ran := e.ranges[e.cursor] - if e.seekHandle < ran.LowVal { - e.seekHandle = ran.LowVal - } - if e.seekHandle > ran.HighVal { - e.cursor++ - continue - } - handle, found, err := e.t.Seek(e.ctx, e.seekHandle) - if err != nil { - return nil, errors.Trace(err) - } - if !found { - return nil, nil - } - if handle > ran.HighVal { - // The handle is out of the current range, but may be in following ranges. - // We seek to the range that may contains the handle, so we - // don't need to seek key again. - inRange := e.seekRange(handle) - if !inRange { - // The handle may be less than the current range low value, can not - // return directly. - continue - } - } - row, err := e.getRow(handle) - if err != nil { - return nil, errors.Trace(err) - } - e.seekHandle = handle + 1 - return row, nil - } -} - -// seekRange increments the range cursor to the range -// with high value greater or equal to handle. -func (e *TableScanExec) seekRange(handle int64) (inRange bool) { - for { - e.cursor++ - if e.cursor >= len(e.ranges) { - return false - } - ran := e.ranges[e.cursor] - if handle < ran.LowVal { - return false - } - if handle > ran.HighVal { - continue - } - return true - } -} - -func (e *TableScanExec) getRow(handle int64) (*Row, error) { - row := &Row{} - var err error - row.Data, err = e.t.Row(e.ctx, handle) - if err != nil { - return nil, errors.Trace(err) - } - // Set result fields value. - for i, v := range e.fields { - v.Expr.SetValue(row.Data[i].GetValue()) - } - - // Put rowKey to the tail of record row - rke := &RowKeyEntry{ - Tbl: e.t, - Handle: handle, - } - row.RowKeys = append(row.RowKeys, rke) - return row, nil -} - -// Close implements Executor Close interface. -func (e *TableScanExec) Close() error { - if e.iter != nil { - e.iter.Close() - e.iter = nil - } - return nil -} - -// IndexRangeExec represents an index range scan executor. -type IndexRangeExec struct { - scan *IndexScanExec - - // seekVal is different from lowVal, it is casted from lowVal and - // must be less than or equal to lowVal, used to seek the index. - lowVals []types.Datum - lowExclude bool - highVals []types.Datum - highExclude bool - - iter kv.IndexIterator - skipLowCmp bool - finished bool -} - -// Fields implements Executor Fields interface. -func (e *IndexRangeExec) Fields() []*ast.ResultField { - return e.scan.fields -} - -// Next implements Executor Next interface. -func (e *IndexRangeExec) Next() (*Row, error) { - if e.iter == nil { - seekVals := make([]types.Datum, len(e.scan.idx.Columns)) - for i := 0; i < len(e.lowVals); i++ { - if e.lowVals[i].Kind() == types.KindMinNotNull { - seekVals[i].SetBytes([]byte{}) - } else { - val, err := e.lowVals[i].ConvertTo(e.scan.valueTypes[i]) - seekVals[i] = val - if err != nil { - return nil, errors.Trace(err) - } - } - } - txn, err := e.scan.ctx.GetTxn(false) - if err != nil { - return nil, errors.Trace(err) - } - e.iter, _, err = e.scan.idx.X.Seek(txn, seekVals) - if err != nil { - return nil, types.EOFAsNil(err) - } - } - - for { - if e.finished { - return nil, nil - } - idxKey, h, err := e.iter.Next() - if err != nil { - return nil, types.EOFAsNil(err) - } - if !e.skipLowCmp { - var cmp int - cmp, err = indexCompare(idxKey, e.lowVals) - if err != nil { - return nil, errors.Trace(err) - } - if cmp < 0 || (cmp == 0 && e.lowExclude) { - continue - } - e.skipLowCmp = true - } - cmp, err := indexCompare(idxKey, e.highVals) - if err != nil { - return nil, errors.Trace(err) - } - if cmp > 0 || (cmp == 0 && e.highExclude) { - // This span has finished iteration. - e.finished = true - continue - } - var row *Row - row, err = e.lookupRow(h) - if err != nil { - return nil, errors.Trace(err) - } - return row, nil - } -} - -// indexCompare compares multi column index. -// The length of boundVals may be less than idxKey. -func indexCompare(idxKey []types.Datum, boundVals []types.Datum) (int, error) { - for i := 0; i < len(boundVals); i++ { - cmp, err := idxKey[i].CompareDatum(boundVals[i]) - if err != nil { - return -1, errors.Trace(err) - } - if cmp != 0 { - return cmp, nil - } - } - return 0, nil -} - -func (e *IndexRangeExec) lookupRow(h int64) (*Row, error) { - row := &Row{} - var err error - row.Data, err = e.scan.tbl.Row(e.scan.ctx, h) - if err != nil { - return nil, errors.Trace(err) - } - rowKey := &RowKeyEntry{ - Tbl: e.scan.tbl, - Handle: h, - } - row.RowKeys = append(row.RowKeys, rowKey) - return row, nil -} - -// Close implements Executor Close interface. -func (e *IndexRangeExec) Close() error { - if e.iter != nil { - e.iter.Close() - e.iter = nil - } - e.finished = false - e.skipLowCmp = false - return nil -} - -// IndexScanExec represents an index scan executor. -type IndexScanExec struct { - tbl table.Table - idx *column.IndexedCol - fields []*ast.ResultField - Ranges []*IndexRangeExec - Desc bool - rangeIdx int - ctx context.Context - valueTypes []*types.FieldType -} - -// Fields implements Executor Fields interface. -func (e *IndexScanExec) Fields() []*ast.ResultField { - return e.fields -} - -// Next implements Executor Next interface. -func (e *IndexScanExec) Next() (*Row, error) { - for e.rangeIdx < len(e.Ranges) { - ran := e.Ranges[e.rangeIdx] - row, err := ran.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row != nil { - for i, val := range row.Data { - e.fields[i].Expr.SetValue(val.GetValue()) - } - return row, nil - } - ran.Close() - e.rangeIdx++ - } - return nil, nil -} - -// Close implements Executor Close interface. -func (e *IndexScanExec) Close() error { - for e.rangeIdx < len(e.Ranges) { - e.Ranges[e.rangeIdx].Close() - e.rangeIdx++ - } - return nil -} - -// JoinOuterExec represents an outer join executor. -type JoinOuterExec struct { - OuterExec Executor - InnerPlan plan.Plan - innerExec Executor - fields []*ast.ResultField - builder *executorBuilder - gotRow bool -} - -// Fields implements Executor Fields interface. -func (e *JoinOuterExec) Fields() []*ast.ResultField { - return e.fields -} - -// Next implements Executor Next interface. -// The data in the returned row is not used by caller. -// If inner executor didn't get any row for an outer executor row, -// a row with 0 len Data indicates there is no inner row matched for -// an outer row. -func (e *JoinOuterExec) Next() (*Row, error) { - var rowKeys []*RowKeyEntry - for { - if e.innerExec == nil { - e.gotRow = false - outerRow, err := e.OuterExec.Next() - if err != nil { - return nil, errors.Trace(err) - } - if outerRow == nil { - return nil, nil - } - rowKeys = outerRow.RowKeys - plan.Refine(e.InnerPlan) - e.innerExec = e.builder.build(e.InnerPlan) - if e.builder.err != nil { - return nil, errors.Trace(e.builder.err) - } - } - row, err := e.innerExec.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - e.innerExec.Close() - e.innerExec = nil - if e.gotRow { - continue - } - e.setInnerNull() - return &Row{RowKeys: rowKeys}, nil - } - if len(row.Data) != 0 { - e.gotRow = true - row.RowKeys = append(rowKeys, row.RowKeys...) - return row, nil - } - } -} - -func (e *JoinOuterExec) setInnerNull() { - for _, rf := range e.InnerPlan.Fields() { - rf.Expr.SetValue(nil) - } -} - -// Close implements Executor Close interface. -func (e *JoinOuterExec) Close() error { - err := e.OuterExec.Close() - if e.innerExec != nil { - return errors.Trace(e.innerExec.Close()) - } - return errors.Trace(err) -} - -// JoinInnerExec represents an inner join executor. -type JoinInnerExec struct { - InnerPlans []plan.Plan - innerExecs []Executor - Condition ast.ExprNode - ctx context.Context - fields []*ast.ResultField - builder *executorBuilder - done bool - cursor int -} - -// Fields implements Executor Fields interface. -func (e *JoinInnerExec) Fields() []*ast.ResultField { - return e.fields -} - -// Next implements Executor Next interface. -// The data in the returned row is not used by caller. -func (e *JoinInnerExec) Next() (*Row, error) { - if e.done { - return nil, nil - } - rowKeysSlice := make([][]*RowKeyEntry, len(e.InnerPlans)) - for { - exec := e.innerExecs[e.cursor] - if exec == nil { - innerPlan := e.InnerPlans[e.cursor] - plan.Refine(innerPlan) - exec = e.builder.build(innerPlan) - if e.builder.err != nil { - return nil, errors.Trace(e.builder.err) - } - e.innerExecs[e.cursor] = exec - } - row, err := exec.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - exec.Close() - e.innerExecs[e.cursor] = nil - if e.cursor == 0 { - e.done = true - return nil, nil - } - e.cursor-- - continue - } - rowKeysSlice[e.cursor] = row.RowKeys - if e.cursor < len(e.innerExecs)-1 { - e.cursor++ - continue - } - var match = true - if e.Condition != nil { - match, err = evaluator.EvalBool(e.ctx, e.Condition) - if err != nil { - return nil, errors.Trace(err) - } - } - if match { - row.RowKeys = joinRowKeys(rowKeysSlice) - return row, nil - } - } -} - -func joinRowKeys(rowKeysSlice [][]*RowKeyEntry) []*RowKeyEntry { - count := 0 - for _, rowKeys := range rowKeysSlice { - count += len(rowKeys) - } - joined := make([]*RowKeyEntry, count) - offset := 0 - for _, rowKeys := range rowKeysSlice { - copy(joined[offset:], rowKeys) - offset += len(rowKeys) - } - return joined -} - -// Close implements Executor Close interface. -func (e *JoinInnerExec) Close() error { - var err error - for _, inExec := range e.innerExecs { - if inExec != nil { - e := inExec.Close() - if e != nil { - err = errors.Trace(e) - } - } - } - return err -} - -// SelectFieldsExec represents a select fields executor. -type SelectFieldsExec struct { - Src Executor - ResultFields []*ast.ResultField - executed bool - ctx context.Context -} - -// Fields implements Executor Fields interface. -func (e *SelectFieldsExec) Fields() []*ast.ResultField { - return e.ResultFields -} - -// Next implements Executor Next interface. -func (e *SelectFieldsExec) Next() (*Row, error) { - var rowKeys []*RowKeyEntry - if e.Src != nil { - srcRow, err := e.Src.Next() - if err != nil { - return nil, errors.Trace(err) - } - if srcRow == nil { - return nil, nil - } - rowKeys = srcRow.RowKeys - } else { - // If Src is nil, only one row should be returned. - if e.executed { - return nil, nil - } - } - e.executed = true - row := &Row{ - RowKeys: rowKeys, - Data: make([]types.Datum, len(e.ResultFields)), - } - for i, field := range e.ResultFields { - val, err := evaluator.Eval(e.ctx, field.Expr) - if err != nil { - return nil, errors.Trace(err) - } - row.Data[i] = types.NewDatum(val) - } - return row, nil -} - -// Close implements Executor Close interface. -func (e *SelectFieldsExec) Close() error { - if e.Src != nil { - return e.Src.Close() - } - return nil -} - -// FilterExec represents a filter executor. -type FilterExec struct { - Src Executor - Condition ast.ExprNode - ctx context.Context -} - -// Fields implements Executor Fields interface. -func (e *FilterExec) Fields() []*ast.ResultField { - return e.Src.Fields() -} - -// Next implements Executor Next interface. -func (e *FilterExec) Next() (*Row, error) { - for { - srcRow, err := e.Src.Next() - if err != nil { - return nil, errors.Trace(err) - } - if srcRow == nil { - return nil, nil - } - match, err := evaluator.EvalBool(e.ctx, e.Condition) - if err != nil { - return nil, errors.Trace(err) - } - if match { - return srcRow, nil - } - } -} - -// Close implements Executor Close interface. -func (e *FilterExec) Close() error { - return e.Src.Close() -} - -// SelectLockExec represents a select lock executor. -type SelectLockExec struct { - Src Executor - Lock ast.SelectLockType - ctx context.Context -} - -// Fields implements Executor Fields interface. -func (e *SelectLockExec) Fields() []*ast.ResultField { - return e.Src.Fields() -} - -// Next implements Executor Next interface. -func (e *SelectLockExec) Next() (*Row, error) { - row, err := e.Src.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - return nil, nil - } - if len(row.RowKeys) != 0 && e.Lock == ast.SelectLockForUpdate { - forupdate.SetForUpdate(e.ctx) - for _, k := range row.RowKeys { - err = k.Tbl.LockRow(e.ctx, k.Handle, true) - if err != nil { - return nil, errors.Trace(err) - } - } - } - return row, nil -} - -// Close implements Executor Close interface. -func (e *SelectLockExec) Close() error { - return e.Src.Close() -} - -// LimitExec represents limit executor -type LimitExec struct { - Src Executor - Offset uint64 - Count uint64 - Idx uint64 -} - -// Fields implements Executor Fields interface. -func (e *LimitExec) Fields() []*ast.ResultField { - return e.Src.Fields() -} - -// Next implements Executor Next interface. -func (e *LimitExec) Next() (*Row, error) { - for e.Idx < e.Offset { - srcRow, err := e.Src.Next() - if err != nil { - return nil, errors.Trace(err) - } - if srcRow == nil { - return nil, nil - } - e.Idx++ - } - // Negative Limit means no limit. - if e.Count >= 0 && e.Idx >= e.Offset+e.Count { - return nil, nil - } - srcRow, err := e.Src.Next() - if err != nil { - return nil, errors.Trace(err) - } - if srcRow == nil { - return nil, nil - } - e.Idx++ - return srcRow, nil -} - -// Close implements Executor Close interface. -func (e *LimitExec) Close() error { - return e.Src.Close() -} - -// orderByRow binds a row to its order values, so it can be sorted. -type orderByRow struct { - key []interface{} - row *Row -} - -// SortExec represents sorting executor. -type SortExec struct { - Src Executor - ByItems []*ast.ByItem - Rows []*orderByRow - ctx context.Context - Idx int - fetched bool - err error -} - -// Fields implements Executor Fields interface. -func (e *SortExec) Fields() []*ast.ResultField { - return e.Src.Fields() -} - -// Len returns the number of rows. -func (e *SortExec) Len() int { - return len(e.Rows) -} - -// Swap implements sort.Interface Swap interface. -func (e *SortExec) Swap(i, j int) { - e.Rows[i], e.Rows[j] = e.Rows[j], e.Rows[i] -} - -// Less implements sort.Interface Less interface. -func (e *SortExec) Less(i, j int) bool { - for index, by := range e.ByItems { - v1 := e.Rows[i].key[index] - v2 := e.Rows[j].key[index] - - ret, err := types.Compare(v1, v2) - if err != nil { - e.err = err - return true - } - - if by.Desc { - ret = -ret - } - - if ret < 0 { - return true - } else if ret > 0 { - return false - } - } - - return false -} - -// Next implements Executor Next interface. -func (e *SortExec) Next() (*Row, error) { - if !e.fetched { - for { - srcRow, err := e.Src.Next() - if err != nil { - return nil, errors.Trace(err) - } - if srcRow == nil { - break - } - orderRow := &orderByRow{ - row: srcRow, - key: make([]interface{}, len(e.ByItems)), - } - for i, byItem := range e.ByItems { - orderRow.key[i], err = evaluator.Eval(e.ctx, byItem.Expr) - if err != nil { - return nil, errors.Trace(err) - } - } - e.Rows = append(e.Rows, orderRow) - } - sort.Sort(e) - e.fetched = true - } - if e.err != nil { - return nil, errors.Trace(e.err) - } - if e.Idx >= len(e.Rows) { - return nil, nil - } - row := e.Rows[e.Idx].row - e.Idx++ - return row, nil -} - -// Close implements Executor Close interface. -func (e *SortExec) Close() error { - return e.Src.Close() -} - -// For select stmt with aggregate function but without groupby clasue, -// We consider there is a single group with key singleGroup. -const singleGroup = "SingleGroup" - -// AggregateExec deals with all the aggregate functions. -// It is built from Aggregate Plan. When Next() is called, it reads all the data from Src and updates all the items in AggFuncs. -// TODO: Support having. -type AggregateExec struct { - Src Executor - ResultFields []*ast.ResultField - executed bool - ctx context.Context - finish bool - AggFuncs []*ast.AggregateFuncExpr - groupMap map[string]bool - groups []string - currentGroupIndex int - GroupByItems []*ast.ByItem -} - -// Fields implements Executor Fields interface. -func (e *AggregateExec) Fields() []*ast.ResultField { - return e.ResultFields -} - -// Next implements Executor Next interface. -func (e *AggregateExec) Next() (*Row, error) { - // In this stage we consider all data from src as a single group. - if !e.executed { - e.groupMap = make(map[string]bool) - e.groups = []string{} - for { - hasMore, err := e.innerNext() - if err != nil { - return nil, errors.Trace(err) - } - if !hasMore { - break - } - } - e.executed = true - if (len(e.groups) == 0) && (len(e.GroupByItems) == 0) { - // If no groupby and no data, we should add an empty group. - // For example: - // "select count(c) from t;" should return one row [0] - // "select count(c) from t group by c1;" should return empty result set. - e.groups = append(e.groups, singleGroup) - } - } - if e.currentGroupIndex >= len(e.groups) { - return nil, nil - } - groupKey := e.groups[e.currentGroupIndex] - for _, af := range e.AggFuncs { - af.CurrentGroup = groupKey - } - e.currentGroupIndex++ - return &Row{}, nil -} - -func (e *AggregateExec) getGroupKey() (string, error) { - if len(e.GroupByItems) == 0 { - return singleGroup, nil - } - vals := make([]types.Datum, 0, len(e.GroupByItems)) - for _, item := range e.GroupByItems { - v, err := evaluator.Eval(e.ctx, item.Expr) - if err != nil { - return "", errors.Trace(err) - } - vals = append(vals, types.NewDatum(v)) - } - bs, err := codec.EncodeValue([]byte{}, vals...) - if err != nil { - return "", errors.Trace(err) - } - return string(bs), nil -} - -// Fetch a single row from src and update each aggregate function. -// If the first return value is false, it means there is no more data from src. -func (e *AggregateExec) innerNext() (bool, error) { - if e.Src != nil { - srcRow, err := e.Src.Next() - if err != nil { - return false, errors.Trace(err) - } - if srcRow == nil { - return false, nil - } - } else { - // If Src is nil, only one row should be returned. - if e.executed { - return false, nil - } - } - e.executed = true - groupKey, err := e.getGroupKey() - if err != nil { - return false, errors.Trace(err) - } - if _, ok := e.groupMap[groupKey]; !ok { - e.groupMap[groupKey] = true - e.groups = append(e.groups, groupKey) - } - for _, af := range e.AggFuncs { - for _, arg := range af.Args { - _, err := evaluator.Eval(e.ctx, arg) - if err != nil { - return false, errors.Trace(err) - } - } - af.CurrentGroup = groupKey - af.Update() - } - return true, nil -} - -// Close implements Executor Close interface. -func (e *AggregateExec) Close() error { - for _, af := range e.AggFuncs { - af.Clear() - } - if e.Src != nil { - return e.Src.Close() - } - return nil -} - -// UnionExec represents union executor. -type UnionExec struct { - fields []*ast.ResultField - Sels []Executor - cursor int -} - -// Fields implements Executor Fields interface. -func (e *UnionExec) Fields() []*ast.ResultField { - return e.fields -} - -// Next implements Executor Next interface. -func (e *UnionExec) Next() (*Row, error) { - for { - if e.cursor >= len(e.Sels) { - return nil, nil - } - sel := e.Sels[e.cursor] - row, err := sel.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - e.cursor++ - continue - } - if e.cursor != 0 { - for i := range row.Data { - // The column value should be casted as the same type of the first select statement in corresponding position - rf := e.fields[i] - var val types.Datum - val, err = row.Data[i].ConvertTo(&rf.Column.FieldType) - if err != nil { - return nil, errors.Trace(err) - } - row.Data[i] = val - } - } - for i, v := range row.Data { - e.fields[i].Expr.SetValue(v.GetValue()) - } - return row, nil - } -} - -// Close implements Executor Close interface. -func (e *UnionExec) Close() error { - var err error - for _, sel := range e.Sels { - er := sel.Close() - if er != nil { - err = errors.Trace(er) - } - } - return err -} - -// DistinctExec represents Distinct executor. -type DistinctExec struct { - Src Executor - checker *distinct.Checker -} - -// Fields implements Executor Fields interface. -func (e *DistinctExec) Fields() []*ast.ResultField { - return e.Src.Fields() -} - -// Next implements Executor Next interface. -func (e *DistinctExec) Next() (*Row, error) { - if e.checker == nil { - e.checker = distinct.CreateDistinctChecker() - } - for { - row, err := e.Src.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - return nil, nil - } - ok, err := e.checker.Check(types.DatumsToInterfaces(row.Data)) - if err != nil { - return nil, errors.Trace(err) - } - if !ok { - continue - } - return row, nil - } -} - -// Close implements Executor Close interface. -func (e *DistinctExec) Close() error { - return e.Src.Close() -} diff --git a/vendor/github.com/pingcap/tidb/executor/executor_ddl.go b/vendor/github.com/pingcap/tidb/executor/executor_ddl.go deleted file mode 100644 index 710193f93..000000000 --- a/vendor/github.com/pingcap/tidb/executor/executor_ddl.go +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/privilege" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" -) - -// DDLExec represents a DDL executor. -type DDLExec struct { - Statement ast.StmtNode - ctx context.Context - is infoschema.InfoSchema - done bool -} - -// Fields implements Executor Fields interface. -func (e *DDLExec) Fields() []*ast.ResultField { - return nil -} - -// Next implements Execution Next interface. -func (e *DDLExec) Next() (*Row, error) { - if e.done { - return nil, nil - } - var err error - switch x := e.Statement.(type) { - case *ast.TruncateTableStmt: - err = e.executeTruncateTable(x) - case *ast.CreateDatabaseStmt: - err = e.executeCreateDatabase(x) - case *ast.CreateTableStmt: - err = e.executeCreateTable(x) - case *ast.CreateIndexStmt: - err = e.executeCreateIndex(x) - case *ast.DropDatabaseStmt: - err = e.executeDropDatabase(x) - case *ast.DropTableStmt: - err = e.executeDropTable(x) - case *ast.DropIndexStmt: - err = e.executeDropIndex(x) - case *ast.AlterTableStmt: - err = e.executeAlterTable(x) - } - if err != nil { - return nil, errors.Trace(err) - } - e.done = true - return nil, nil -} - -// Close implements Executor Close interface. -func (e *DDLExec) Close() error { - return nil -} - -func (e *DDLExec) executeTruncateTable(s *ast.TruncateTableStmt) error { - table, ok := e.is.TableByID(s.Table.TableInfo.ID) - if !ok { - return errors.New("table not found, should never happen") - } - return table.Truncate(e.ctx) -} - -func (e *DDLExec) executeCreateDatabase(s *ast.CreateDatabaseStmt) error { - var opt *ast.CharsetOpt - if len(s.Options) != 0 { - opt = &ast.CharsetOpt{} - for _, val := range s.Options { - switch val.Tp { - case ast.DatabaseOptionCharset: - opt.Chs = val.Value - case ast.DatabaseOptionCollate: - opt.Col = val.Value - } - } - } - err := sessionctx.GetDomain(e.ctx).DDL().CreateSchema(e.ctx, model.NewCIStr(s.Name), opt) - if err != nil { - if terror.ErrorEqual(err, infoschema.DatabaseExists) && s.IfNotExists { - err = nil - } - } - return errors.Trace(err) -} - -func (e *DDLExec) executeCreateTable(s *ast.CreateTableStmt) error { - ident := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} - err := sessionctx.GetDomain(e.ctx).DDL().CreateTable(e.ctx, ident, s.Cols, s.Constraints, s.Options) - if terror.ErrorEqual(err, infoschema.TableExists) { - if s.IfNotExists { - return nil - } - return infoschema.TableExists.Gen("CREATE TABLE: table exists %s", ident) - } - return errors.Trace(err) -} - -func (e *DDLExec) executeCreateIndex(s *ast.CreateIndexStmt) error { - ident := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} - err := sessionctx.GetDomain(e.ctx).DDL().CreateIndex(e.ctx, ident, s.Unique, model.NewCIStr(s.IndexName), s.IndexColNames) - return errors.Trace(err) -} - -func (e *DDLExec) executeDropDatabase(s *ast.DropDatabaseStmt) error { - err := sessionctx.GetDomain(e.ctx).DDL().DropSchema(e.ctx, model.NewCIStr(s.Name)) - if terror.ErrorEqual(err, infoschema.DatabaseNotExists) { - if s.IfExists { - err = nil - } else { - err = infoschema.DatabaseDropExists.Gen("Can't drop database '%s'; database doesn't exist", s.Name) - } - } - return errors.Trace(err) -} - -func (e *DDLExec) executeDropTable(s *ast.DropTableStmt) error { - var notExistTables []string - for _, tn := range s.Tables { - fullti := ast.Ident{Schema: tn.Schema, Name: tn.Name} - schema, ok := e.is.SchemaByName(tn.Schema) - if !ok { - // TODO: we should return special error for table not exist, checking "not exist" is not enough, - // because some other errors may contain this error string too. - notExistTables = append(notExistTables, fullti.String()) - continue - } - tb, err := e.is.TableByName(tn.Schema, tn.Name) - if err != nil && strings.HasSuffix(err.Error(), "not exist") { - notExistTables = append(notExistTables, fullti.String()) - continue - } else if err != nil { - return errors.Trace(err) - } - // Check Privilege - privChecker := privilege.GetPrivilegeChecker(e.ctx) - hasPriv, err := privChecker.Check(e.ctx, schema, tb.Meta(), mysql.DropPriv) - if err != nil { - return errors.Trace(err) - } - if !hasPriv { - return errors.Errorf("You do not have the privilege to drop table %s.%s.", tn.Schema, tn.Name) - } - - err = sessionctx.GetDomain(e.ctx).DDL().DropTable(e.ctx, fullti) - if infoschema.DatabaseNotExists.Equal(err) || infoschema.TableNotExists.Equal(err) { - notExistTables = append(notExistTables, fullti.String()) - } else if err != nil { - return errors.Trace(err) - } - } - if len(notExistTables) > 0 && !s.IfExists { - return infoschema.TableDropExists.Gen("DROP TABLE: table %s does not exist", strings.Join(notExistTables, ",")) - } - return nil -} - -func (e *DDLExec) executeDropIndex(s *ast.DropIndexStmt) error { - ti := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} - err := sessionctx.GetDomain(e.ctx).DDL().DropIndex(e.ctx, ti, model.NewCIStr(s.IndexName)) - if (infoschema.DatabaseNotExists.Equal(err) || infoschema.TableNotExists.Equal(err)) && s.IfExists { - err = nil - } - return errors.Trace(err) -} - -func (e *DDLExec) executeAlterTable(s *ast.AlterTableStmt) error { - ti := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} - err := sessionctx.GetDomain(e.ctx).DDL().AlterTable(e.ctx, ti, s.Specs) - return errors.Trace(err) -} - -func joinColumnName(columnName *ast.ColumnName) string { - var originStrs []string - if columnName.Schema.O != "" { - originStrs = append(originStrs, columnName.Schema.O) - } - if columnName.Table.O != "" { - originStrs = append(originStrs, columnName.Table.O) - } - originStrs = append(originStrs, columnName.Name.O) - return strings.Join(originStrs, ".") -} diff --git a/vendor/github.com/pingcap/tidb/executor/executor_simple.go b/vendor/github.com/pingcap/tidb/executor/executor_simple.go deleted file mode 100644 index b5d35e37a..000000000 --- a/vendor/github.com/pingcap/tidb/executor/executor_simple.go +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "fmt" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/evaluator" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/sessionctx/db" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/sqlexec" - "github.com/pingcap/tidb/util/types" -) - -// SimpleExec represents simple statement executor. -// For statements do simple execution. -// includes `UseStmt`, 'SetStmt`, `SetCharsetStmt`. -// `DoStmt`, `BeginStmt`, `CommitStmt`, `RollbackStmt`. -// TODO: list all simple statements. -type SimpleExec struct { - Statement ast.StmtNode - ctx context.Context - done bool -} - -// Fields implements Executor Fields interface. -func (e *SimpleExec) Fields() []*ast.ResultField { - return nil -} - -// Next implements Execution Next interface. -func (e *SimpleExec) Next() (*Row, error) { - if e.done { - return nil, nil - } - var err error - switch x := e.Statement.(type) { - case *ast.UseStmt: - err = e.executeUse(x) - case *ast.SetStmt: - err = e.executeSet(x) - case *ast.SetCharsetStmt: - err = e.executeSetCharset(x) - case *ast.DoStmt: - err = e.executeDo(x) - case *ast.BeginStmt: - err = e.executeBegin(x) - case *ast.CommitStmt: - err = e.executeCommit(x) - case *ast.RollbackStmt: - err = e.executeRollback(x) - case *ast.CreateUserStmt: - err = e.executeCreateUser(x) - case *ast.SetPwdStmt: - err = e.executeSetPwd(x) - } - if err != nil { - return nil, errors.Trace(err) - } - e.done = true - return nil, nil -} - -// Close implements Executor Close interface. -func (e *SimpleExec) Close() error { - return nil -} - -func (e *SimpleExec) executeUse(s *ast.UseStmt) error { - dbname := model.NewCIStr(s.DBName) - dbinfo, exists := sessionctx.GetDomain(e.ctx).InfoSchema().SchemaByName(dbname) - if !exists { - return infoschema.DatabaseNotExists.Gen("database %s not exists", dbname) - } - db.BindCurrentSchema(e.ctx, dbname.O) - // character_set_database is the character set used by the default database. - // The server sets this variable whenever the default database changes. - // See: http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_character_set_database - sessionVars := variable.GetSessionVars(e.ctx) - sessionVars.Systems[variable.CharsetDatabase] = dbinfo.Charset - sessionVars.Systems[variable.CollationDatabase] = dbinfo.Collate - return nil -} - -func (e *SimpleExec) executeSet(s *ast.SetStmt) error { - sessionVars := variable.GetSessionVars(e.ctx) - globalVars := variable.GetGlobalVarAccessor(e.ctx) - for _, v := range s.Variables { - // Variable is case insensitive, we use lower case. - name := strings.ToLower(v.Name) - if !v.IsSystem { - // User variable. - value, err := evaluator.Eval(e.ctx, v.Value) - if err != nil { - return errors.Trace(err) - } - - if value == nil { - delete(sessionVars.Users, name) - } else { - sessionVars.Users[name] = fmt.Sprintf("%v", value) - } - return nil - } - sysVar := variable.GetSysVar(name) - if sysVar == nil { - return variable.UnknownSystemVar.Gen("Unknown system variable '%s'", name) - } - if sysVar.Scope == variable.ScopeNone { - return errors.Errorf("Variable '%s' is a read only variable", name) - } - if v.IsGlobal { - if sysVar.Scope&variable.ScopeGlobal > 0 { - value, err := evaluator.Eval(e.ctx, v.Value) - if err != nil { - return errors.Trace(err) - } - if value == nil { - value = "" - } - svalue, err := types.ToString(value) - if err != nil { - return errors.Trace(err) - } - err = globalVars.SetGlobalSysVar(e.ctx, name, svalue) - return errors.Trace(err) - } - return errors.Errorf("Variable '%s' is a SESSION variable and can't be used with SET GLOBAL", name) - } - if sysVar.Scope&variable.ScopeSession > 0 { - if value, err := evaluator.Eval(e.ctx, v.Value); err != nil { - return errors.Trace(err) - } else if value == nil { - sessionVars.Systems[name] = "" - } else { - sessionVars.Systems[name] = fmt.Sprintf("%v", value) - } - return nil - } - return errors.Errorf("Variable '%s' is a GLOBAL variable and should be set with SET GLOBAL", name) - } - return nil -} - -func (e *SimpleExec) executeSetCharset(s *ast.SetCharsetStmt) error { - collation := s.Collate - if len(collation) == 0 { - var err error - collation, err = charset.GetDefaultCollation(s.Charset) - if err != nil { - return errors.Trace(err) - } - } - sessionVars := variable.GetSessionVars(e.ctx) - for _, v := range variable.SetNamesVariables { - sessionVars.Systems[v] = s.Charset - } - sessionVars.Systems[variable.CollationConnection] = collation - return nil -} - -func (e *SimpleExec) executeDo(s *ast.DoStmt) error { - for _, expr := range s.Exprs { - _, err := evaluator.Eval(e.ctx, expr) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -func (e *SimpleExec) executeBegin(s *ast.BeginStmt) error { - _, err := e.ctx.GetTxn(true) - if err != nil { - return errors.Trace(err) - } - // With START TRANSACTION, autocommit remains disabled until you end - // the transaction with COMMIT or ROLLBACK. The autocommit mode then - // reverts to its previous state. - variable.GetSessionVars(e.ctx).SetStatusFlag(mysql.ServerStatusInTrans, true) - return nil -} - -func (e *SimpleExec) executeCommit(s *ast.CommitStmt) error { - err := e.ctx.FinishTxn(false) - variable.GetSessionVars(e.ctx).SetStatusFlag(mysql.ServerStatusInTrans, false) - return errors.Trace(err) -} - -func (e *SimpleExec) executeRollback(s *ast.RollbackStmt) error { - err := e.ctx.FinishTxn(true) - variable.GetSessionVars(e.ctx).SetStatusFlag(mysql.ServerStatusInTrans, false) - return errors.Trace(err) -} - -func (e *SimpleExec) executeCreateUser(s *ast.CreateUserStmt) error { - users := make([]string, 0, len(s.Specs)) - for _, spec := range s.Specs { - userName, host := parseUser(spec.User) - exists, err1 := userExists(e.ctx, userName, host) - if err1 != nil { - return errors.Trace(err1) - } - if exists { - if !s.IfNotExists { - return errors.New("Duplicate user") - } - continue - } - pwd := "" - if spec.AuthOpt.ByAuthString { - pwd = util.EncodePassword(spec.AuthOpt.AuthString) - } else { - pwd = util.EncodePassword(spec.AuthOpt.HashString) - } - user := fmt.Sprintf(`("%s", "%s", "%s")`, host, userName, pwd) - users = append(users, user) - } - if len(users) == 0 { - return nil - } - sql := fmt.Sprintf(`INSERT INTO %s.%s (Host, User, Password) VALUES %s;`, mysql.SystemDB, mysql.UserTable, strings.Join(users, ", ")) - _, err := e.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(e.ctx, sql) - if err != nil { - return errors.Trace(err) - } - return nil -} - -// parse user string into username and host -// root@localhost -> roor, localhost -func parseUser(user string) (string, string) { - strs := strings.Split(user, "@") - return strs[0], strs[1] -} - -func userExists(ctx context.Context, name string, host string) (bool, error) { - sql := fmt.Sprintf(`SELECT * FROM %s.%s WHERE User="%s" AND Host="%s";`, mysql.SystemDB, mysql.UserTable, name, host) - rs, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - if err != nil { - return false, errors.Trace(err) - } - defer rs.Close() - row, err := rs.Next() - if err != nil { - return false, errors.Trace(err) - } - return row != nil, nil -} - -func (e *SimpleExec) executeSetPwd(s *ast.SetPwdStmt) error { - // TODO: If len(s.User) == 0, use CURRENT_USER() - userName, host := parseUser(s.User) - // Update mysql.user - sql := fmt.Sprintf(`UPDATE %s.%s SET password="%s" WHERE User="%s" AND Host="%s";`, mysql.SystemDB, mysql.UserTable, util.EncodePassword(s.Password), userName, host) - _, err := e.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(e.ctx, sql) - return errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/executor/executor_write.go b/vendor/github.com/pingcap/tidb/executor/executor_write.go deleted file mode 100644 index 1c3ac3d47..000000000 --- a/vendor/github.com/pingcap/tidb/executor/executor_write.go +++ /dev/null @@ -1,932 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "fmt" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/evaluator" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/types" -) - -var ( - _ Executor = &UpdateExec{} - _ Executor = &DeleteExec{} - _ Executor = &InsertExec{} -) - -// UpdateExec represents an update executor. -type UpdateExec struct { - SelectExec Executor - OrderedList []*ast.Assignment - - // Map for unique (Table, handle) pair. - updatedRowKeys map[table.Table]map[int64]struct{} - ctx context.Context - - rows []*Row // The rows fetched from TableExec. - newRowsData [][]types.Datum // The new values to be set. - fetched bool - cursor int -} - -// Next implements Executor Next interface. -func (e *UpdateExec) Next() (*Row, error) { - if !e.fetched { - err := e.fetchRows() - if err != nil { - return nil, errors.Trace(err) - } - e.fetched = true - } - - columns, err := getUpdateColumns(e.OrderedList) - if err != nil { - return nil, errors.Trace(err) - } - if e.cursor >= len(e.rows) { - return nil, nil - } - if e.updatedRowKeys == nil { - e.updatedRowKeys = make(map[table.Table]map[int64]struct{}) - } - row := e.rows[e.cursor] - newData := e.newRowsData[e.cursor] - for _, entry := range row.RowKeys { - tbl := entry.Tbl - if e.updatedRowKeys[tbl] == nil { - e.updatedRowKeys[tbl] = make(map[int64]struct{}) - } - offset := e.getTableOffset(tbl) - handle := entry.Handle - oldData := row.Data[offset : offset+len(tbl.Cols())] - newTableData := newData[offset : offset+len(tbl.Cols())] - - _, ok := e.updatedRowKeys[tbl][handle] - if ok { - // Each matching row is updated once, even if it matches the conditions multiple times. - continue - } - // Update row - err1 := updateRecord(e.ctx, handle, oldData, newTableData, columns, tbl, offset, false) - if err1 != nil { - return nil, errors.Trace(err1) - } - e.updatedRowKeys[tbl][handle] = struct{}{} - } - e.cursor++ - return &Row{}, nil -} - -func getUpdateColumns(assignList []*ast.Assignment) (map[int]*ast.Assignment, error) { - m := make(map[int]*ast.Assignment, len(assignList)) - for i, v := range assignList { - m[i] = v - } - return m, nil -} - -func (e *UpdateExec) fetchRows() error { - for { - row, err := e.SelectExec.Next() - if err != nil { - return errors.Trace(err) - } - if row == nil { - return nil - } - data := make([]types.Datum, len(e.SelectExec.Fields())) - newData := make([]types.Datum, len(e.SelectExec.Fields())) - for i, f := range e.SelectExec.Fields() { - data[i] = types.NewDatum(f.Expr.GetValue()) - newData[i] = data[i] - if e.OrderedList[i] != nil { - val, err := evaluator.Eval(e.ctx, e.OrderedList[i].Expr) - if err != nil { - return errors.Trace(err) - } - newData[i] = types.NewDatum(val) - } - } - row.Data = data - e.rows = append(e.rows, row) - e.newRowsData = append(e.newRowsData, newData) - } -} - -func (e *UpdateExec) getTableOffset(t table.Table) int { - fields := e.SelectExec.Fields() - i := 0 - for i < len(fields) { - field := fields[i] - if field.Table.Name.L == t.Meta().Name.L { - return i - } - i += len(field.Table.Columns) - } - return 0 -} - -func updateRecord(ctx context.Context, h int64, oldData, newData []types.Datum, updateColumns map[int]*ast.Assignment, t table.Table, offset int, onDuplicateUpdate bool) error { - if err := t.LockRow(ctx, h, false); err != nil { - return errors.Trace(err) - } - - cols := t.Cols() - touched := make(map[int]bool, len(cols)) - - assignExists := false - var newHandle types.Datum - for i, asgn := range updateColumns { - if asgn == nil { - continue - } - if i < offset || i >= offset+len(cols) { - // The assign expression is for another table, not this. - continue - } - - colIndex := i - offset - col := cols[colIndex] - if col.IsPKHandleColumn(t.Meta()) { - newHandle = newData[i] - } - if mysql.HasAutoIncrementFlag(col.Flag) { - if newData[i].Kind() == types.KindNull { - return errors.Errorf("Column '%v' cannot be null", col.Name.O) - } - val, err := newData[i].ToInt64() - if err != nil { - return errors.Trace(err) - } - t.RebaseAutoID(val, true) - } - - touched[colIndex] = true - assignExists = true - } - - // If no assign list for this table, no need to update. - if !assignExists { - return nil - } - - // Check whether new value is valid. - if err := column.CastValues(ctx, newData, cols); err != nil { - return errors.Trace(err) - } - - if err := column.CheckNotNull(cols, newData); err != nil { - return errors.Trace(err) - } - - // If row is not changed, we should do nothing. - rowChanged := false - for i := range oldData { - if !touched[i] { - continue - } - - n, err := newData[i].CompareDatum(oldData[i]) - if err != nil { - return errors.Trace(err) - } - if n != 0 { - rowChanged = true - break - } - } - if !rowChanged { - // See: https://dev.mysql.com/doc/refman/5.7/en/mysql-real-connect.html CLIENT_FOUND_ROWS - if variable.GetSessionVars(ctx).ClientCapability&mysql.ClientFoundRows > 0 { - variable.GetSessionVars(ctx).AddAffectedRows(1) - } - return nil - } - - var err error - if newHandle.Kind() != types.KindNull { - err = t.RemoveRecord(ctx, h, oldData) - if err != nil { - return errors.Trace(err) - } - _, err = t.AddRecord(ctx, newData) - } else { - // Update record to new value and update index. - err = t.UpdateRecord(ctx, h, oldData, newData, touched) - } - if err != nil { - return errors.Trace(err) - } - - // Record affected rows. - if !onDuplicateUpdate { - variable.GetSessionVars(ctx).AddAffectedRows(1) - } else { - variable.GetSessionVars(ctx).AddAffectedRows(2) - } - return nil -} - -// Fields implements Executor Fields interface. -// Returns nil to indicate there is no output. -func (e *UpdateExec) Fields() []*ast.ResultField { - return nil -} - -// Close implements Executor Close interface. -func (e *UpdateExec) Close() error { - return e.SelectExec.Close() -} - -// DeleteExec represents a delete executor. -// See: https://dev.mysql.com/doc/refman/5.7/en/delete.html -type DeleteExec struct { - SelectExec Executor - - ctx context.Context - Tables []*ast.TableName - IsMultiTable bool - - finished bool -} - -// Next implements Executor Next interface. -func (e *DeleteExec) Next() (*Row, error) { - if e.finished { - return nil, nil - } - defer func() { - e.finished = true - }() - if e.IsMultiTable && len(e.Tables) == 0 { - return &Row{}, nil - } - tblIDMap := make(map[int64]bool, len(e.Tables)) - // Get table alias map. - tblNames := make(map[string]string) - - // Map for unique (Table, handle) pair. - rowKeyMap := make(map[table.Table]map[int64]struct{}) - if e.IsMultiTable { - // Delete from multiple tables should consider table ident list. - fs := e.SelectExec.Fields() - for _, f := range fs { - if len(f.TableAsName.L) > 0 { - tblNames[f.TableAsName.L] = f.TableName.Name.L - } else { - tblNames[f.TableName.Name.L] = f.TableName.Name.L - } - } - for _, t := range e.Tables { - // Consider DBName. - _, ok := tblNames[t.Name.L] - if !ok { - return nil, errors.Errorf("Unknown table '%s' in MULTI DELETE", t.Name.O) - } - tblIDMap[t.TableInfo.ID] = true - } - } - for { - row, err := e.SelectExec.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - break - } - - for _, entry := range row.RowKeys { - if e.IsMultiTable { - tid := entry.Tbl.Meta().ID - if _, ok := tblIDMap[tid]; !ok { - continue - } - } - if rowKeyMap[entry.Tbl] == nil { - rowKeyMap[entry.Tbl] = make(map[int64]struct{}) - } - rowKeyMap[entry.Tbl][entry.Handle] = struct{}{} - } - } - for t, handleMap := range rowKeyMap { - for handle := range handleMap { - data, err := t.Row(e.ctx, handle) - if err != nil { - return nil, errors.Trace(err) - } - err = e.removeRow(e.ctx, t, handle, data) - if err != nil { - return nil, errors.Trace(err) - } - } - } - return nil, nil -} - -func (e *DeleteExec) getTable(ctx context.Context, tableName *ast.TableName) (table.Table, error) { - return sessionctx.GetDomain(ctx).InfoSchema().TableByName(tableName.Schema, tableName.Name) -} - -func (e *DeleteExec) removeRow(ctx context.Context, t table.Table, h int64, data []types.Datum) error { - err := t.RemoveRecord(ctx, h, data) - if err != nil { - return errors.Trace(err) - } - variable.GetSessionVars(ctx).AddAffectedRows(1) - return nil -} - -// Fields implements Executor Fields interface. -// Returns nil to indicate there is no output. -func (e *DeleteExec) Fields() []*ast.ResultField { - return nil -} - -// Close implements Executor Close interface. -func (e *DeleteExec) Close() error { - return e.SelectExec.Close() -} - -// InsertValues is the data to insert. -type InsertValues struct { - currRow int - ctx context.Context - SelectExec Executor - - Table table.Table - Columns []*ast.ColumnName - Lists [][]ast.ExprNode - Setlist []*ast.Assignment -} - -// InsertExec represents an insert executor. -type InsertExec struct { - *InsertValues - - OnDuplicate []*ast.Assignment - fields []*ast.ResultField - - Priority int - - finished bool -} - -// Next implements Executor Next interface. -func (e *InsertExec) Next() (*Row, error) { - if e.finished { - return nil, nil - } - cols, err := e.getColumns(e.Table.Cols()) - if err != nil { - return nil, errors.Trace(err) - } - txn, err := e.ctx.GetTxn(false) - if err != nil { - return nil, errors.Trace(err) - } - toUpdateColumns, err := getOnDuplicateUpdateColumns(e.OnDuplicate, e.Table) - if err != nil { - return nil, errors.Trace(err) - } - - var rows [][]types.Datum - if e.SelectExec != nil { - rows, err = e.getRowsSelect(cols) - } else { - rows, err = e.getRows(cols) - } - if err != nil { - return nil, errors.Trace(err) - } - - for _, row := range rows { - if len(e.OnDuplicate) == 0 { - txn.SetOption(kv.PresumeKeyNotExists, nil) - } - h, err := e.Table.AddRecord(e.ctx, row) - txn.DelOption(kv.PresumeKeyNotExists) - if err == nil { - continue - } - - if len(e.OnDuplicate) == 0 || !terror.ErrorEqual(err, kv.ErrKeyExists) { - return nil, errors.Trace(err) - } - if err = e.onDuplicateUpdate(row, h, toUpdateColumns); err != nil { - return nil, errors.Trace(err) - } - } - e.finished = true - return nil, nil -} - -// Fields implements Executor Fields interface. -// Returns nil to indicate there is no output. -func (e *InsertExec) Fields() []*ast.ResultField { - return nil -} - -// Close implements Executor Close interface. -func (e *InsertExec) Close() error { - if e.SelectExec != nil { - return e.SelectExec.Close() - } - return nil -} - -// There are three types of insert statements: -// 1 insert ... values(...) --> name type column -// 2 insert ... set x=y... --> set type column -// 3 insert ... (select ..) --> name type column -// See: https://dev.mysql.com/doc/refman/5.7/en/insert.html -func (e *InsertValues) getColumns(tableCols []*column.Col) ([]*column.Col, error) { - var cols []*column.Col - var err error - - if len(e.Setlist) > 0 { - // Process `set` type column. - columns := make([]string, 0, len(e.Setlist)) - for _, v := range e.Setlist { - columns = append(columns, v.Column.Name.O) - } - - cols, err = column.FindCols(tableCols, columns) - if err != nil { - return nil, errors.Errorf("INSERT INTO %s: %s", e.Table.Meta().Name.O, err) - } - - if len(cols) == 0 { - return nil, errors.Errorf("INSERT INTO %s: empty column", e.Table.Meta().Name.O) - } - } else { - // Process `name` type column. - columns := make([]string, 0, len(e.Columns)) - for _, v := range e.Columns { - columns = append(columns, v.Name.O) - } - cols, err = column.FindCols(tableCols, columns) - if err != nil { - return nil, errors.Errorf("INSERT INTO %s: %s", e.Table.Meta().Name.O, err) - } - - // If cols are empty, use all columns instead. - if len(cols) == 0 { - cols = tableCols - } - } - - // Check column whether is specified only once. - err = column.CheckOnce(cols) - if err != nil { - return nil, errors.Trace(err) - } - - return cols, nil -} - -func (e *InsertValues) fillValueList() error { - if len(e.Setlist) > 0 { - if len(e.Lists) > 0 { - return errors.Errorf("INSERT INTO %s: set type should not use values", e.Table) - } - var l []ast.ExprNode - for _, v := range e.Setlist { - l = append(l, v.Expr) - } - e.Lists = append(e.Lists, l) - } - return nil -} - -func (e *InsertValues) checkValueCount(insertValueCount, valueCount, num int, cols []*column.Col) error { - if insertValueCount != valueCount { - // "insert into t values (), ()" is valid. - // "insert into t values (), (1)" is not valid. - // "insert into t values (1), ()" is not valid. - // "insert into t values (1,2), (1)" is not valid. - // So the value count must be same for all insert list. - return errors.Errorf("Column count doesn't match value count at row %d", num+1) - } - if valueCount == 0 && len(e.Columns) > 0 { - // "insert into t (c1) values ()" is not valid. - return errors.Errorf("INSERT INTO %s: expected %d value(s), have %d", e.Table.Meta().Name.O, len(e.Columns), 0) - } else if valueCount > 0 && valueCount != len(cols) { - return errors.Errorf("INSERT INTO %s: expected %d value(s), have %d", e.Table.Meta().Name.O, len(cols), valueCount) - } - return nil -} - -func (e *InsertValues) getColumnDefaultValues(cols []*column.Col) (map[string]types.Datum, error) { - defaultValMap := map[string]types.Datum{} - for _, col := range cols { - if value, ok, err := table.GetColDefaultValue(e.ctx, &col.ColumnInfo); ok { - if err != nil { - return nil, errors.Trace(err) - } - defaultValMap[col.Name.L] = value - } - } - return defaultValMap, nil -} - -func (e *InsertValues) getRows(cols []*column.Col) (rows [][]types.Datum, err error) { - // process `insert|replace ... set x=y...` - if err = e.fillValueList(); err != nil { - return nil, errors.Trace(err) - } - - defaultVals, err := e.getColumnDefaultValues(e.Table.Cols()) - if err != nil { - return nil, errors.Trace(err) - } - - rows = make([][]types.Datum, len(e.Lists)) - length := len(e.Lists[0]) - for i, list := range e.Lists { - if err = e.checkValueCount(length, len(list), i, cols); err != nil { - return nil, errors.Trace(err) - } - e.currRow = i - rows[i], err = e.getRow(cols, list, defaultVals) - if err != nil { - return nil, errors.Trace(err) - } - } - return -} - -func (e *InsertValues) getRow(cols []*column.Col, list []ast.ExprNode, defaultVals map[string]types.Datum) ([]types.Datum, error) { - vals := make([]types.Datum, len(list)) - var err error - for i, expr := range list { - if d, ok := expr.(*ast.DefaultExpr); ok { - cn := d.Name - if cn != nil { - var found bool - vals[i], found = defaultVals[cn.Name.L] - if !found { - return nil, errors.Errorf("default column not found - %s", cn.Name.O) - } - } else { - vals[i] = defaultVals[cols[i].Name.L] - } - } else { - var val interface{} - val, err = evaluator.Eval(e.ctx, expr) - vals[i].SetValue(val) - if err != nil { - return nil, errors.Trace(err) - } - } - } - return e.fillRowData(cols, vals) -} - -func (e *InsertValues) getRowsSelect(cols []*column.Col) ([][]types.Datum, error) { - // process `insert|replace into ... select ... from ...` - if len(e.SelectExec.Fields()) != len(cols) { - return nil, errors.Errorf("Column count %d doesn't match value count %d", len(cols), len(e.SelectExec.Fields())) - } - var rows [][]types.Datum - for { - innerRow, err := e.SelectExec.Next() - if err != nil { - return nil, errors.Trace(err) - } - if innerRow == nil { - break - } - e.currRow = len(rows) - row, err := e.fillRowData(cols, innerRow.Data) - if err != nil { - return nil, errors.Trace(err) - } - rows = append(rows, row) - } - return rows, nil -} - -func (e *InsertValues) fillRowData(cols []*column.Col, vals []types.Datum) ([]types.Datum, error) { - row := make([]types.Datum, len(e.Table.Cols())) - marked := make(map[int]struct{}, len(vals)) - for i, v := range vals { - offset := cols[i].Offset - row[offset] = v - marked[offset] = struct{}{} - } - err := e.initDefaultValues(row, marked) - if err != nil { - return nil, errors.Trace(err) - } - if err = column.CastValues(e.ctx, row, cols); err != nil { - return nil, errors.Trace(err) - } - if err = column.CheckNotNull(e.Table.Cols(), row); err != nil { - return nil, errors.Trace(err) - } - return row, nil -} - -func (e *InsertValues) initDefaultValues(row []types.Datum, marked map[int]struct{}) error { - var rewriteValueCol *column.Col - var defaultValueCols []*column.Col - for i, c := range e.Table.Cols() { - if row[i].Kind() != types.KindNull { - // Column value isn't nil and column isn't auto-increment, continue. - if !mysql.HasAutoIncrementFlag(c.Flag) { - continue - } - val, err := row[i].ToInt64() - if err != nil { - return errors.Trace(err) - } - if val != 0 { - e.Table.RebaseAutoID(val, true) - continue - } - } - - // If the nil value is evaluated in insert list, we will use nil except auto increment column. - if _, ok := marked[i]; ok && !mysql.HasAutoIncrementFlag(c.Flag) && !mysql.HasTimestampFlag(c.Flag) { - continue - } - - if mysql.HasAutoIncrementFlag(c.Flag) { - recordID, err := e.Table.AllocAutoID() - if err != nil { - return errors.Trace(err) - } - row[i].SetInt64(recordID) - // Notes: incompatible with mysql - // MySQL will set last insert id to the first row, as follows: - // `t(id int AUTO_INCREMENT, c1 int, PRIMARY KEY (id))` - // `insert t (c1) values(1),(2),(3);` - // Last insert id will be 1, not 3. - variable.GetSessionVars(e.ctx).SetLastInsertID(uint64(recordID)) - // It's used for retry. - rewriteValueCol = c - } else { - var err error - row[i], _, err = table.GetColDefaultValue(e.ctx, &c.ColumnInfo) - if err != nil { - return errors.Trace(err) - } - } - - defaultValueCols = append(defaultValueCols, c) - } - if err := column.CastValues(e.ctx, row, defaultValueCols); err != nil { - return errors.Trace(err) - } - - // It's used for retry. - if rewriteValueCol == nil { - return nil - } - if len(e.Setlist) > 0 { - val := &ast.Assignment{ - Column: &ast.ColumnName{Name: rewriteValueCol.Name}, - Expr: ast.NewValueExpr(row[rewriteValueCol.Offset].GetValue())} - if len(e.Setlist) < rewriteValueCol.Offset+1 { - e.Setlist = append(e.Setlist, val) - return nil - } - setlist := make([]*ast.Assignment, 0, len(e.Setlist)+1) - setlist = append(setlist, e.Setlist[:rewriteValueCol.Offset]...) - setlist = append(setlist, val) - e.Setlist = append(setlist, e.Setlist[rewriteValueCol.Offset:]...) - return nil - } - - // records the values of each row. - vals := make([]ast.ExprNode, len(row)) - for i, col := range row { - vals[i] = ast.NewValueExpr(col.GetValue()) - } - if len(e.Lists) <= e.currRow { - e.Lists = append(e.Lists, vals) - } else { - e.Lists[e.currRow] = vals - } - - // records the column name only once. - if e.currRow != len(e.Lists)-1 { - return nil - } - if len(e.Columns) < rewriteValueCol.Offset+1 { - e.Columns = append(e.Columns, &ast.ColumnName{Name: rewriteValueCol.Name}) - return nil - } - cols := make([]*ast.ColumnName, 0, len(e.Columns)+1) - cols = append(cols, e.Columns[:rewriteValueCol.Offset]...) - cols = append(cols, &ast.ColumnName{Name: rewriteValueCol.Name}) - e.Columns = append(cols, e.Columns[rewriteValueCol.Offset:]...) - - return nil -} - -func (e *InsertExec) onDuplicateUpdate(row []types.Datum, h int64, cols map[int]*ast.Assignment) error { - // On duplicate key update the duplicate row. - // Evaluate the updated value. - // TODO: report rows affected and last insert id. - data, err := e.Table.Row(e.ctx, h) - if err != nil { - return errors.Trace(err) - } - // For evaluate ValuesExpr - // http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values - for i, rf := range e.fields { - rf.Expr.SetValue(row[i].GetValue()) - } - // Evaluate assignment - newData := make([]types.Datum, len(data)) - for i, c := range row { - asgn, ok := cols[i] - if !ok { - newData[i] = c - continue - } - var val interface{} - val, err = evaluator.Eval(e.ctx, asgn.Expr) - if err != nil { - return errors.Trace(err) - } - newData[i].SetValue(val) - } - if err = updateRecord(e.ctx, h, data, newData, cols, e.Table, 0, true); err != nil { - return errors.Trace(err) - } - return nil -} - -func findColumnByName(t table.Table, name string) (*column.Col, error) { - _, tableName, colName := splitQualifiedName(name) - if len(tableName) > 0 && tableName != t.Meta().Name.O { - return nil, errors.Errorf("unknown field %s.%s", tableName, colName) - } - - c := column.FindCol(t.Cols(), colName) - if c == nil { - return nil, errors.Errorf("unknown field %s", colName) - } - return c, nil -} - -func getOnDuplicateUpdateColumns(assignList []*ast.Assignment, t table.Table) (map[int]*ast.Assignment, error) { - m := make(map[int]*ast.Assignment, len(assignList)) - - for _, v := range assignList { - col := v.Column - c, err := findColumnByName(t, joinQualifiedName("", col.Table.L, col.Name.L)) - if err != nil { - return nil, errors.Trace(err) - } - m[c.Offset] = v - } - return m, nil -} - -// ReplaceExec represents a replace executor. -type ReplaceExec struct { - *InsertValues - Priority int - finished bool -} - -// Fields implements Executor Fields interface. -// Returns nil to indicate there is no output. -func (e *ReplaceExec) Fields() []*ast.ResultField { - return nil -} - -// Close implements Executor Close interface. -func (e *ReplaceExec) Close() error { - if e.SelectExec != nil { - return e.SelectExec.Close() - } - return nil -} - -// Next implements Executor Next interface. -func (e *ReplaceExec) Next() (*Row, error) { - if e.finished { - return nil, nil - } - cols, err := e.getColumns(e.Table.Cols()) - if err != nil { - return nil, errors.Trace(err) - } - - var rows [][]types.Datum - if e.SelectExec != nil { - rows, err = e.getRowsSelect(cols) - } else { - rows, err = e.getRows(cols) - } - if err != nil { - return nil, errors.Trace(err) - } - - for _, row := range rows { - h, err := e.Table.AddRecord(e.ctx, row) - if err == nil { - continue - } - if err != nil && !terror.ErrorEqual(err, kv.ErrKeyExists) { - return nil, errors.Trace(err) - } - - // While the insertion fails because a duplicate-key error occurs for a primary key or unique index, - // a storage engine may perform the REPLACE as an update rather than a delete plus insert. - // See: http://dev.mysql.com/doc/refman/5.7/en/replace.html. - if err = e.replaceRow(h, row); err != nil { - return nil, errors.Trace(err) - } - variable.GetSessionVars(e.ctx).AddAffectedRows(1) - } - e.finished = true - return nil, nil -} - -func (e *ReplaceExec) replaceRow(handle int64, replaceRow []types.Datum) error { - row, err := e.Table.Row(e.ctx, handle) - if err != nil { - return errors.Trace(err) - } - isReplace := false - touched := make(map[int]bool, len(row)) - for i, val := range row { - v, err1 := val.CompareDatum(replaceRow[i]) - if err1 != nil { - return errors.Trace(err1) - } - if v != 0 { - touched[i] = true - isReplace = true - } - } - if isReplace { - variable.GetSessionVars(e.ctx).AddAffectedRows(1) - if err = e.Table.UpdateRecord(e.ctx, handle, row, replaceRow, touched); err != nil { - return errors.Trace(err) - } - } - return nil -} - -// SplitQualifiedName splits an identifier name to db, table and field name. -func splitQualifiedName(name string) (db string, table string, field string) { - seps := strings.Split(name, ".") - - l := len(seps) - switch l { - case 1: - // `name` is field. - field = seps[0] - case 2: - // `name` is `table.field`. - table, field = seps[0], seps[1] - case 3: - // `name` is `db.table.field`. - db, table, field = seps[0], seps[1], seps[2] - default: - // `name` is `db.table.field`. - db, table, field = seps[l-3], seps[l-2], seps[l-1] - } - - return -} - -// JoinQualifiedName converts db, table, field to a qualified name. -func joinQualifiedName(db string, table string, field string) string { - if len(db) > 0 { - return fmt.Sprintf("%s.%s.%s", db, table, field) - } else if len(table) > 0 { - return fmt.Sprintf("%s.%s", table, field) - } else { - return field - } -} diff --git a/vendor/github.com/pingcap/tidb/executor/explain.go b/vendor/github.com/pingcap/tidb/executor/explain.go deleted file mode 100644 index 1d135e074..000000000 --- a/vendor/github.com/pingcap/tidb/executor/explain.go +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "strconv" - "strings" - - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/optimizer/plan" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/util/types" -) - -type explainEntry struct { - ID int64 - selectType string - table string - joinType string - possibleKeys string - key string - keyLen string - ref string - rows int64 - extra []string -} - -func (e *explainEntry) setJoinTypeForTableScan(p *plan.TableScan) { - if len(p.AccessConditions) == 0 { - e.joinType = "ALL" - return - } - if p.RefAccess { - e.joinType = "eq_ref" - return - } - for _, con := range p.AccessConditions { - if x, ok := con.(*ast.BinaryOperationExpr); ok { - if x.Op == opcode.EQ { - e.joinType = "const" - return - } - } - } - e.joinType = "range" -} - -func (e *explainEntry) setJoinTypeForIndexScan(p *plan.IndexScan) { - if len(p.AccessConditions) == 0 { - e.joinType = "index" - return - } - if len(p.AccessConditions) == p.AccessEqualCount { - if p.RefAccess { - if p.Index.Unique { - e.joinType = "eq_ref" - } else { - e.joinType = "ref" - } - } else { - if p.Index.Unique { - e.joinType = "const" - } else { - e.joinType = "range" - } - } - return - } - e.joinType = "range" -} - -// ExplainExec represents an explain executor. -// See: https://dev.mysql.com/doc/refman/5.7/en/explain-output.html -type ExplainExec struct { - StmtPlan plan.Plan - fields []*ast.ResultField - rows []*Row - cursor int -} - -// Fields implements Executor Fields interface. -func (e *ExplainExec) Fields() []*ast.ResultField { - return e.fields -} - -// Next implements Execution Next interface. -func (e *ExplainExec) Next() (*Row, error) { - if e.rows == nil { - e.fetchRows() - } - if e.cursor >= len(e.rows) { - return nil, nil - } - row := e.rows[e.cursor] - e.cursor++ - return row, nil -} - -func (e *ExplainExec) fetchRows() { - visitor := &explainVisitor{id: 1} - e.StmtPlan.Accept(visitor) - for _, entry := range visitor.entries { - row := &Row{} - row.Data = types.MakeDatums( - entry.ID, - entry.selectType, - entry.table, - entry.joinType, - entry.key, - entry.key, - entry.keyLen, - entry.ref, - entry.rows, - strings.Join(entry.extra, "; "), - ) - for i := range row.Data { - if row.Data[i].Kind() == types.KindString && row.Data[i].GetString() == "" { - row.Data[i].SetNull() - } - } - e.rows = append(e.rows, row) - } -} - -// Close implements Executor Close interface. -func (e *ExplainExec) Close() error { - return nil -} - -type explainVisitor struct { - id int64 - - // Sort extra should be appended in the first table in a join. - sort bool - entries []*explainEntry -} - -func (v *explainVisitor) Enter(p plan.Plan) (plan.Plan, bool) { - switch x := p.(type) { - case *plan.TableScan: - v.entries = append(v.entries, v.newEntryForTableScan(x)) - case *plan.IndexScan: - v.entries = append(v.entries, v.newEntryForIndexScan(x)) - case *plan.Sort: - v.sort = true - } - return p, false -} - -func (v *explainVisitor) Leave(p plan.Plan) (plan.Plan, bool) { - return p, true -} - -func (v *explainVisitor) newEntryForTableScan(p *plan.TableScan) *explainEntry { - entry := &explainEntry{ - ID: v.id, - selectType: "SIMPLE", - table: p.Table.Name.O, - } - entry.setJoinTypeForTableScan(p) - if entry.joinType != "ALL" { - entry.key = "PRIMARY" - entry.keyLen = "8" - } - if len(p.AccessConditions)+len(p.FilterConditions) > 0 { - entry.extra = append(entry.extra, "Using where") - } - - v.setSortExtra(entry) - return entry -} - -func (v *explainVisitor) newEntryForIndexScan(p *plan.IndexScan) *explainEntry { - entry := &explainEntry{ - ID: v.id, - selectType: "SIMPLE", - table: p.Table.Name.O, - key: p.Index.Name.O, - } - if len(p.AccessConditions) != 0 { - keyLen := 0 - for i := 0; i < len(p.Index.Columns); i++ { - if i < p.AccessEqualCount { - keyLen += p.Index.Columns[i].Length - } else if i < len(p.AccessConditions) { - keyLen += p.Index.Columns[i].Length - break - } - } - entry.keyLen = strconv.Itoa(keyLen) - } - entry.setJoinTypeForIndexScan(p) - if len(p.AccessConditions)+len(p.FilterConditions) > 0 { - entry.extra = append(entry.extra, "Using where") - } - - v.setSortExtra(entry) - return entry -} - -func (v *explainVisitor) setSortExtra(entry *explainEntry) { - if v.sort { - entry.extra = append(entry.extra, "Using filesort") - v.sort = false - } -} diff --git a/vendor/github.com/pingcap/tidb/executor/grant.go b/vendor/github.com/pingcap/tidb/executor/grant.go deleted file mode 100644 index 45ebdc161..000000000 --- a/vendor/github.com/pingcap/tidb/executor/grant.go +++ /dev/null @@ -1,520 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "fmt" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/sessionctx/db" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/util/sqlexec" - "github.com/pingcap/tidb/util/types" -) - -/*** - * Grant Statement - * See: https://dev.mysql.com/doc/refman/5.7/en/grant.html - ************************************************************************************/ -var ( - _ Executor = (*GrantExec)(nil) -) - -// GrantExec executes GrantStmt. -type GrantExec struct { - Privs []*ast.PrivElem - ObjectType ast.ObjectTypeType - Level *ast.GrantLevel - Users []*ast.UserSpec - - ctx context.Context - done bool -} - -// Fields implements Executor Fields interface. -func (e *GrantExec) Fields() []*ast.ResultField { - return nil -} - -// Next implements Execution Next interface. -func (e *GrantExec) Next() (*Row, error) { - if e.done { - return nil, nil - } - // Grant for each user - for _, user := range e.Users { - // Check if user exists. - userName, host := parseUser(user.User) - exists, err := userExists(e.ctx, userName, host) - if err != nil { - return nil, errors.Trace(err) - } - if !exists { - return nil, errors.Errorf("Unknown user: %s", user.User) - } - - // If there is no privilege entry in corresponding table, insert a new one. - // DB scope: mysql.DB - // Table scope: mysql.Tables_priv - // Column scope: mysql.Columns_priv - switch e.Level.Level { - case ast.GrantLevelDB: - err := e.checkAndInitDBPriv(userName, host) - if err != nil { - return nil, errors.Trace(err) - } - case ast.GrantLevelTable: - err := e.checkAndInitTablePriv(userName, host) - if err != nil { - return nil, errors.Trace(err) - } - } - // Grant each priv to the user. - for _, priv := range e.Privs { - if len(priv.Cols) > 0 { - // Check column scope privilege entry. - // TODO: Check validity before insert new entry. - err1 := e.checkAndInitColumnPriv(userName, host, priv.Cols) - if err1 != nil { - return nil, errors.Trace(err1) - } - } - err2 := e.grantPriv(priv, user) - if err2 != nil { - return nil, errors.Trace(err2) - } - } - } - e.done = true - return nil, nil -} - -// Close implements Executor Close interface. -func (e *GrantExec) Close() error { - return nil -} - -// Check if DB scope privilege entry exists in mysql.DB. -// If unexists, insert a new one. -func (e *GrantExec) checkAndInitDBPriv(user string, host string) error { - db, err := e.getTargetSchema() - if err != nil { - return errors.Trace(err) - } - ok, err := dbUserExists(e.ctx, user, host, db.Name.O) - if err != nil { - return errors.Trace(err) - } - if ok { - return nil - } - // Entry does not exist for user-host-db. Insert a new entry. - return initDBPrivEntry(e.ctx, user, host, db.Name.O) -} - -// Check if table scope privilege entry exists in mysql.Tables_priv. -// If unexists, insert a new one. -func (e *GrantExec) checkAndInitTablePriv(user string, host string) error { - db, tbl, err := e.getTargetSchemaAndTable() - if err != nil { - return errors.Trace(err) - } - ok, err := tableUserExists(e.ctx, user, host, db.Name.O, tbl.Meta().Name.O) - if err != nil { - return errors.Trace(err) - } - if ok { - return nil - } - // Entry does not exist for user-host-db-tbl. Insert a new entry. - return initTablePrivEntry(e.ctx, user, host, db.Name.O, tbl.Meta().Name.O) -} - -// Check if column scope privilege entry exists in mysql.Columns_priv. -// If unexists, insert a new one. -func (e *GrantExec) checkAndInitColumnPriv(user string, host string, cols []*ast.ColumnName) error { - db, tbl, err := e.getTargetSchemaAndTable() - if err != nil { - return errors.Trace(err) - } - for _, c := range cols { - col := column.FindCol(tbl.Cols(), c.Name.L) - if col == nil { - return errors.Errorf("Unknown column: %s", c.Name.O) - } - ok, err := columnPrivEntryExists(e.ctx, user, host, db.Name.O, tbl.Meta().Name.O, col.Name.O) - if err != nil { - return errors.Trace(err) - } - if ok { - continue - } - // Entry does not exist for user-host-db-tbl-col. Insert a new entry. - err = initColumnPrivEntry(e.ctx, user, host, db.Name.O, tbl.Meta().Name.O, col.Name.O) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -// Insert a new row into mysql.DB with empty privilege. -func initDBPrivEntry(ctx context.Context, user string, host string, db string) error { - sql := fmt.Sprintf(`INSERT INTO %s.%s (Host, User, DB) VALUES ("%s", "%s", "%s")`, mysql.SystemDB, mysql.DBTable, host, user, db) - _, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - return errors.Trace(err) -} - -// Insert a new row into mysql.Tables_priv with empty privilege. -func initTablePrivEntry(ctx context.Context, user string, host string, db string, tbl string) error { - sql := fmt.Sprintf(`INSERT INTO %s.%s (Host, User, DB, Table_name, Table_priv, Column_priv) VALUES ("%s", "%s", "%s", "%s", "", "")`, mysql.SystemDB, mysql.TablePrivTable, host, user, db, tbl) - _, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - return errors.Trace(err) -} - -// Insert a new row into mysql.Columns_priv with empty privilege. -func initColumnPrivEntry(ctx context.Context, user string, host string, db string, tbl string, col string) error { - sql := fmt.Sprintf(`INSERT INTO %s.%s (Host, User, DB, Table_name, Column_name, Column_priv) VALUES ("%s", "%s", "%s", "%s", "%s", "")`, mysql.SystemDB, mysql.ColumnPrivTable, host, user, db, tbl, col) - _, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - return errors.Trace(err) -} - -// Grant priv to user in s.Level scope. -func (e *GrantExec) grantPriv(priv *ast.PrivElem, user *ast.UserSpec) error { - switch e.Level.Level { - case ast.GrantLevelGlobal: - return e.grantGlobalPriv(priv, user) - case ast.GrantLevelDB: - return e.grantDBPriv(priv, user) - case ast.GrantLevelTable: - if len(priv.Cols) == 0 { - return e.grantTablePriv(priv, user) - } - return e.grantColumnPriv(priv, user) - default: - return errors.Errorf("Unknown grant level: %#v", e.Level) - } -} - -// Manipulate mysql.user table. -func (e *GrantExec) grantGlobalPriv(priv *ast.PrivElem, user *ast.UserSpec) error { - asgns, err := composeGlobalPrivUpdate(priv.Priv) - if err != nil { - return errors.Trace(err) - } - userName, host := parseUser(user.User) - sql := fmt.Sprintf(`UPDATE %s.%s SET %s WHERE User="%s" AND Host="%s"`, mysql.SystemDB, mysql.UserTable, asgns, userName, host) - _, err = e.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(e.ctx, sql) - return errors.Trace(err) -} - -// Manipulate mysql.db table. -func (e *GrantExec) grantDBPriv(priv *ast.PrivElem, user *ast.UserSpec) error { - db, err := e.getTargetSchema() - if err != nil { - return errors.Trace(err) - } - asgns, err := composeDBPrivUpdate(priv.Priv) - if err != nil { - return errors.Trace(err) - } - userName, host := parseUser(user.User) - sql := fmt.Sprintf(`UPDATE %s.%s SET %s WHERE User="%s" AND Host="%s" AND DB="%s";`, mysql.SystemDB, mysql.DBTable, asgns, userName, host, db.Name.O) - _, err = e.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(e.ctx, sql) - return errors.Trace(err) -} - -// Manipulate mysql.tables_priv table. -func (e *GrantExec) grantTablePriv(priv *ast.PrivElem, user *ast.UserSpec) error { - db, tbl, err := e.getTargetSchemaAndTable() - if err != nil { - return errors.Trace(err) - } - userName, host := parseUser(user.User) - asgns, err := composeTablePrivUpdate(e.ctx, priv.Priv, userName, host, db.Name.O, tbl.Meta().Name.O) - if err != nil { - return errors.Trace(err) - } - sql := fmt.Sprintf(`UPDATE %s.%s SET %s WHERE User="%s" AND Host="%s" AND DB="%s" AND Table_name="%s";`, mysql.SystemDB, mysql.TablePrivTable, asgns, userName, host, db.Name.O, tbl.Meta().Name.O) - _, err = e.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(e.ctx, sql) - return errors.Trace(err) -} - -// Manipulate mysql.tables_priv table. -func (e *GrantExec) grantColumnPriv(priv *ast.PrivElem, user *ast.UserSpec) error { - db, tbl, err := e.getTargetSchemaAndTable() - if err != nil { - return errors.Trace(err) - } - userName, host := parseUser(user.User) - for _, c := range priv.Cols { - col := column.FindCol(tbl.Cols(), c.Name.L) - if col == nil { - return errors.Errorf("Unknown column: %s", c) - } - asgns, err := composeColumnPrivUpdate(e.ctx, priv.Priv, userName, host, db.Name.O, tbl.Meta().Name.O, col.Name.O) - if err != nil { - return errors.Trace(err) - } - sql := fmt.Sprintf(`UPDATE %s.%s SET %s WHERE User="%s" AND Host="%s" AND DB="%s" AND Table_name="%s" AND Column_name="%s";`, mysql.SystemDB, mysql.ColumnPrivTable, asgns, userName, host, db.Name.O, tbl.Meta().Name.O, col.Name.O) - _, err = e.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(e.ctx, sql) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -// Compose update stmt assignment list string for global scope privilege update. -func composeGlobalPrivUpdate(priv mysql.PrivilegeType) (string, error) { - if priv == mysql.AllPriv { - strs := make([]string, 0, len(mysql.Priv2UserCol)) - for _, v := range mysql.Priv2UserCol { - strs = append(strs, fmt.Sprintf(`%s="Y"`, v)) - } - return strings.Join(strs, ", "), nil - } - col, ok := mysql.Priv2UserCol[priv] - if !ok { - return "", errors.Errorf("Unknown priv: %v", priv) - } - return fmt.Sprintf(`%s="Y"`, col), nil -} - -// Compose update stmt assignment list for db scope privilege update. -func composeDBPrivUpdate(priv mysql.PrivilegeType) (string, error) { - if priv == mysql.AllPriv { - strs := make([]string, 0, len(mysql.AllDBPrivs)) - for _, p := range mysql.AllDBPrivs { - v, ok := mysql.Priv2UserCol[p] - if !ok { - return "", errors.Errorf("Unknown db privilege %v", priv) - } - strs = append(strs, fmt.Sprintf(`%s="Y"`, v)) - } - return strings.Join(strs, ", "), nil - } - col, ok := mysql.Priv2UserCol[priv] - if !ok { - return "", errors.Errorf("Unknown priv: %v", priv) - } - return fmt.Sprintf(`%s="Y"`, col), nil -} - -// Compose update stmt assignment list for table scope privilege update. -func composeTablePrivUpdate(ctx context.Context, priv mysql.PrivilegeType, name string, host string, db string, tbl string) (string, error) { - var newTablePriv, newColumnPriv string - if priv == mysql.AllPriv { - for _, p := range mysql.AllTablePrivs { - v, ok := mysql.Priv2SetStr[p] - if !ok { - return "", errors.Errorf("Unknown table privilege %v", p) - } - if len(newTablePriv) == 0 { - newTablePriv = v - } else { - newTablePriv = fmt.Sprintf("%s,%s", newTablePriv, v) - } - } - for _, p := range mysql.AllColumnPrivs { - v, ok := mysql.Priv2SetStr[p] - if !ok { - return "", errors.Errorf("Unknown column privilege %v", p) - } - if len(newColumnPriv) == 0 { - newColumnPriv = v - } else { - newColumnPriv = fmt.Sprintf("%s,%s", newColumnPriv, v) - } - } - } else { - currTablePriv, currColumnPriv, err := getTablePriv(ctx, name, host, db, tbl) - if err != nil { - return "", errors.Trace(err) - } - p, ok := mysql.Priv2SetStr[priv] - if !ok { - return "", errors.Errorf("Unknown priv: %v", priv) - } - if len(currTablePriv) == 0 { - newTablePriv = p - } else { - newTablePriv = fmt.Sprintf("%s,%s", currTablePriv, p) - } - for _, cp := range mysql.AllColumnPrivs { - if priv == cp { - if len(currColumnPriv) == 0 { - newColumnPriv = p - } else { - newColumnPriv = fmt.Sprintf("%s,%s", currColumnPriv, p) - } - break - } - } - } - return fmt.Sprintf(`Table_priv="%s", Column_priv="%s", Grantor="%s"`, newTablePriv, newColumnPriv, variable.GetSessionVars(ctx).User), nil -} - -// Compose update stmt assignment list for column scope privilege update. -func composeColumnPrivUpdate(ctx context.Context, priv mysql.PrivilegeType, name string, host string, db string, tbl string, col string) (string, error) { - newColumnPriv := "" - if priv == mysql.AllPriv { - for _, p := range mysql.AllColumnPrivs { - v, ok := mysql.Priv2SetStr[p] - if !ok { - return "", errors.Errorf("Unknown column privilege %v", p) - } - if len(newColumnPriv) == 0 { - newColumnPriv = v - } else { - newColumnPriv = fmt.Sprintf("%s,%s", newColumnPriv, v) - } - } - } else { - currColumnPriv, err := getColumnPriv(ctx, name, host, db, tbl, col) - if err != nil { - return "", errors.Trace(err) - } - p, ok := mysql.Priv2SetStr[priv] - if !ok { - return "", errors.Errorf("Unknown priv: %v", priv) - } - if len(currColumnPriv) == 0 { - newColumnPriv = p - } else { - newColumnPriv = fmt.Sprintf("%s,%s", currColumnPriv, p) - } - } - return fmt.Sprintf(`Column_priv="%s"`, newColumnPriv), nil -} - -// Helper function to check if the sql returns any row. -func recordExists(ctx context.Context, sql string) (bool, error) { - rs, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - if err != nil { - return false, errors.Trace(err) - } - defer rs.Close() - row, err := rs.Next() - if err != nil { - return false, errors.Trace(err) - } - return row != nil, nil -} - -// Check if there is an entry with key user-host-db in mysql.DB. -func dbUserExists(ctx context.Context, name string, host string, db string) (bool, error) { - sql := fmt.Sprintf(`SELECT * FROM %s.%s WHERE User="%s" AND Host="%s" AND DB="%s";`, mysql.SystemDB, mysql.DBTable, name, host, db) - return recordExists(ctx, sql) -} - -// Check if there is an entry with key user-host-db-tbl in mysql.Tables_priv. -func tableUserExists(ctx context.Context, name string, host string, db string, tbl string) (bool, error) { - sql := fmt.Sprintf(`SELECT * FROM %s.%s WHERE User="%s" AND Host="%s" AND DB="%s" AND Table_name="%s";`, mysql.SystemDB, mysql.TablePrivTable, name, host, db, tbl) - return recordExists(ctx, sql) -} - -// Check if there is an entry with key user-host-db-tbl-col in mysql.Columns_priv. -func columnPrivEntryExists(ctx context.Context, name string, host string, db string, tbl string, col string) (bool, error) { - sql := fmt.Sprintf(`SELECT * FROM %s.%s WHERE User="%s" AND Host="%s" AND DB="%s" AND Table_name="%s" AND Column_name="%s";`, mysql.SystemDB, mysql.ColumnPrivTable, name, host, db, tbl, col) - return recordExists(ctx, sql) -} - -// Get current table scope privilege set from mysql.Tables_priv. -// Return Table_priv and Column_priv. -func getTablePriv(ctx context.Context, name string, host string, db string, tbl string) (string, string, error) { - sql := fmt.Sprintf(`SELECT Table_priv, Column_priv FROM %s.%s WHERE User="%s" AND Host="%s" AND DB="%s" AND Table_name="%s";`, mysql.SystemDB, mysql.TablePrivTable, name, host, db, tbl) - rs, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - if err != nil { - return "", "", errors.Trace(err) - } - defer rs.Close() - row, err := rs.Next() - if err != nil { - return "", "", errors.Trace(err) - } - var tPriv, cPriv string - if row.Data[0].Kind() == types.KindMysqlSet { - tablePriv := row.Data[0].GetMysqlSet() - tPriv = tablePriv.Name - } - if row.Data[1].Kind() == types.KindMysqlSet { - columnPriv := row.Data[1].GetMysqlSet() - cPriv = columnPriv.Name - } - return tPriv, cPriv, nil -} - -// Get current column scope privilege set from mysql.Columns_priv. -// Return Column_priv. -func getColumnPriv(ctx context.Context, name string, host string, db string, tbl string, col string) (string, error) { - sql := fmt.Sprintf(`SELECT Column_priv FROM %s.%s WHERE User="%s" AND Host="%s" AND DB="%s" AND Table_name="%s" AND Column_name="%s";`, mysql.SystemDB, mysql.ColumnPrivTable, name, host, db, tbl, col) - rs, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - if err != nil { - return "", errors.Trace(err) - } - defer rs.Close() - row, err := rs.Next() - if err != nil { - return "", errors.Trace(err) - } - cPriv := "" - if row.Data[0].Kind() == types.KindMysqlSet { - cPriv = row.Data[0].GetMysqlSet().Name - } - return cPriv, nil -} - -// Find the schema by dbName. -func (e *GrantExec) getTargetSchema() (*model.DBInfo, error) { - dbName := e.Level.DBName - if len(dbName) == 0 { - // Grant *, use current schema - dbName = db.GetCurrentSchema(e.ctx) - if len(dbName) == 0 { - return nil, errors.New("Miss DB name for grant privilege.") - } - } - //check if db exists - schema := model.NewCIStr(dbName) - is := sessionctx.GetDomain(e.ctx).InfoSchema() - db, ok := is.SchemaByName(schema) - if !ok { - return nil, errors.Errorf("Unknown schema name: %s", dbName) - } - return db, nil -} - -// Find the schema and table by dbName and tableName. -func (e *GrantExec) getTargetSchemaAndTable() (*model.DBInfo, table.Table, error) { - db, err := e.getTargetSchema() - if err != nil { - return nil, nil, errors.Trace(err) - } - name := model.NewCIStr(e.Level.TableName) - is := sessionctx.GetDomain(e.ctx).InfoSchema() - tbl, err := is.TableByName(db.Name, name) - if err != nil { - return nil, nil, errors.Trace(err) - } - return db, tbl, nil -} diff --git a/vendor/github.com/pingcap/tidb/executor/prepared.go b/vendor/github.com/pingcap/tidb/executor/prepared.go deleted file mode 100644 index 01371246e..000000000 --- a/vendor/github.com/pingcap/tidb/executor/prepared.go +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "sort" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/evaluator" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/optimizer" - "github.com/pingcap/tidb/optimizer/plan" - "github.com/pingcap/tidb/parser" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/sessionctx/variable" -) - -var ( - _ Executor = &DeallocateExec{} - _ Executor = &ExecuteExec{} - _ Executor = &PrepareExec{} -) - -type paramMarkerSorter struct { - markers []*ast.ParamMarkerExpr -} - -func (p *paramMarkerSorter) Len() int { - return len(p.markers) -} - -func (p *paramMarkerSorter) Less(i, j int) bool { - return p.markers[i].Offset < p.markers[j].Offset -} - -func (p *paramMarkerSorter) Swap(i, j int) { - p.markers[i], p.markers[j] = p.markers[j], p.markers[i] -} - -type paramMarkerExtractor struct { - markers []*ast.ParamMarkerExpr -} - -func (e *paramMarkerExtractor) Enter(in ast.Node) (ast.Node, bool) { - return in, false -} - -func (e *paramMarkerExtractor) Leave(in ast.Node) (ast.Node, bool) { - if x, ok := in.(*ast.ParamMarkerExpr); ok { - e.markers = append(e.markers, x) - } - return in, true -} - -// Prepared represents a prepared statement. -type Prepared struct { - Stmt ast.StmtNode - Params []*ast.ParamMarkerExpr - SchemaVersion int64 -} - -// PrepareExec represents a PREPARE executor. -type PrepareExec struct { - IS infoschema.InfoSchema - Ctx context.Context - Name string - SQLText string - - ID uint32 - ResultFields []*ast.ResultField - ParamCount int - Err error -} - -// Fields implements Executor Fields interface. -func (e *PrepareExec) Fields() []*ast.ResultField { - // returns nil to indicate prepare will not return Recordset. - return nil -} - -// Next implements Executor Next interface. -func (e *PrepareExec) Next() (*Row, error) { - e.DoPrepare() - return nil, e.Err -} - -// Close implements plan.Plan Close interface. -func (e *PrepareExec) Close() error { - return nil -} - -// DoPrepare prepares the statement, it can be called multiple times without -// side effect. -func (e *PrepareExec) DoPrepare() { - vars := variable.GetSessionVars(e.Ctx) - if e.ID != 0 { - // Must be the case when we retry a prepare. - // Make sure it is idempotent. - _, ok := vars.PreparedStmts[e.ID] - if ok { - return - } - } - charset, collation := variable.GetCharsetInfo(e.Ctx) - stmts, err := parser.Parse(e.SQLText, charset, collation) - if err != nil { - e.Err = errors.Trace(err) - return - } - if len(stmts) != 1 { - e.Err = ErrPrepareMulti - return - } - stmt := stmts[0] - var extractor paramMarkerExtractor - stmt.Accept(&extractor) - - // The parameter markers are appended in visiting order, which may not - // be the same as the position order in the query string. We need to - // sort it by position. - sorter := ¶mMarkerSorter{markers: extractor.markers} - sort.Sort(sorter) - e.ParamCount = len(sorter.markers) - prepared := &Prepared{ - Stmt: stmt, - Params: sorter.markers, - SchemaVersion: e.IS.SchemaMetaVersion(), - } - - err = optimizer.Prepare(e.IS, e.Ctx, stmt) - if err != nil { - e.Err = errors.Trace(err) - return - } - if resultSetNode, ok := stmt.(ast.ResultSetNode); ok { - e.ResultFields = resultSetNode.GetResultFields() - } - - if e.ID == 0 { - e.ID = vars.GetNextPreparedStmtID() - } - if e.Name != "" { - vars.PreparedStmtNameToID[e.Name] = e.ID - } - vars.PreparedStmts[e.ID] = prepared -} - -// ExecuteExec represents an EXECUTE executor. -// It executes a prepared statement. -type ExecuteExec struct { - IS infoschema.InfoSchema - Ctx context.Context - Name string - UsingVars []ast.ExprNode - ID uint32 - StmtExec Executor -} - -// Fields implements Executor Fields interface. -func (e *ExecuteExec) Fields() []*ast.ResultField { - // Will never be called. - return nil -} - -// Next implements Executor Next interface. -func (e *ExecuteExec) Next() (*Row, error) { - // Will never be called. - return nil, nil -} - -// Close implements plan.Plan Close interface. -func (e *ExecuteExec) Close() error { - // Will never be called. - return nil -} - -// Build builds a prepared statement into an executor. -func (e *ExecuteExec) Build() error { - vars := variable.GetSessionVars(e.Ctx) - if e.Name != "" { - e.ID = vars.PreparedStmtNameToID[e.Name] - } - v := vars.PreparedStmts[e.ID] - if v == nil { - return ErrStmtNotFound - } - prepared := v.(*Prepared) - - if len(prepared.Params) != len(e.UsingVars) { - return ErrWrongParamCount - } - - for i, usingVar := range e.UsingVars { - val, err := evaluator.Eval(e.Ctx, usingVar) - if err != nil { - return errors.Trace(err) - } - prepared.Params[i].SetValue(val) - } - - if prepared.SchemaVersion != e.IS.SchemaMetaVersion() { - // If the schema version has changed we need to prepare it again, - // if this time it failed, the real reason for the error is schema changed. - err := optimizer.Prepare(e.IS, e.Ctx, prepared.Stmt) - if err != nil { - return ErrSchemaChanged.Gen("Schema change casued error: %s", err.Error()) - } - prepared.SchemaVersion = e.IS.SchemaMetaVersion() - } - sb := &subqueryBuilder{is: e.IS} - plan, err := optimizer.Optimize(e.Ctx, prepared.Stmt, sb) - if err != nil { - return errors.Trace(err) - } - b := newExecutorBuilder(e.Ctx, e.IS) - stmtExec := b.build(plan) - if b.err != nil { - return errors.Trace(b.err) - } - e.StmtExec = stmtExec - return nil -} - -// DeallocateExec represent a DEALLOCATE executor. -type DeallocateExec struct { - Name string - ctx context.Context -} - -// Fields implements Executor Fields interface. -func (e *DeallocateExec) Fields() []*ast.ResultField { - return nil -} - -// Next implements Executor Next interface. -func (e *DeallocateExec) Next() (*Row, error) { - vars := variable.GetSessionVars(e.ctx) - id, ok := vars.PreparedStmtNameToID[e.Name] - if !ok { - return nil, ErrStmtNotFound - } - delete(vars.PreparedStmtNameToID, e.Name) - delete(vars.PreparedStmts, id) - return nil, nil -} - -// Close implements plan.Plan Close interface. -func (e *DeallocateExec) Close() error { - return nil -} - -// CompileExecutePreparedStmt compiles a session Execute command to a stmt.Statement. -func CompileExecutePreparedStmt(ctx context.Context, ID uint32, args ...interface{}) ast.Statement { - execPlan := &plan.Execute{ID: ID} - execPlan.UsingVars = make([]ast.ExprNode, len(args)) - for i, val := range args { - execPlan.UsingVars[i] = ast.NewValueExpr(val) - } - sa := &statement{ - is: sessionctx.GetDomain(ctx).InfoSchema(), - plan: execPlan, - } - return sa -} diff --git a/vendor/github.com/pingcap/tidb/executor/show.go b/vendor/github.com/pingcap/tidb/executor/show.go deleted file mode 100644 index 7a4a2bdc3..000000000 --- a/vendor/github.com/pingcap/tidb/executor/show.go +++ /dev/null @@ -1,461 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "bytes" - "fmt" - "sort" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/privilege" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/types" -) - -// ShowExec represents a show executor. -type ShowExec struct { - Tp ast.ShowStmtType // Databases/Tables/Columns/.... - DBName model.CIStr - Table *ast.TableName // Used for showing columns. - Column *ast.ColumnName // Used for `desc table column`. - Flag int // Some flag parsed from sql, such as FULL. - Full bool - User string // Used for show grants. - - // Used by show variables - GlobalScope bool - - fields []*ast.ResultField - ctx context.Context - is infoschema.InfoSchema - - fetched bool - rows []*Row - cursor int -} - -// Fields implements Executor Fields interface. -func (e *ShowExec) Fields() []*ast.ResultField { - return e.fields -} - -// Next implements Execution Next interface. -func (e *ShowExec) Next() (*Row, error) { - if e.rows == nil { - err := e.fetchAll() - if err != nil { - return nil, errors.Trace(err) - } - } - if e.cursor >= len(e.rows) { - return nil, nil - } - row := e.rows[e.cursor] - for i, field := range e.fields { - field.Expr.SetValue(row.Data[i].GetValue()) - } - e.cursor++ - return row, nil -} - -func (e *ShowExec) fetchAll() error { - switch e.Tp { - case ast.ShowCharset: - return e.fetchShowCharset() - case ast.ShowCollation: - return e.fetchShowCollation() - case ast.ShowColumns: - return e.fetchShowColumns() - case ast.ShowCreateTable: - return e.fetchShowCreateTable() - case ast.ShowDatabases: - return e.fetchShowDatabases() - case ast.ShowEngines: - return e.fetchShowEngines() - case ast.ShowGrants: - return e.fetchShowGrants() - case ast.ShowIndex: - return e.fetchShowIndex() - case ast.ShowProcedureStatus: - return e.fetchShowProcedureStatus() - case ast.ShowStatus: - return e.fetchShowStatus() - case ast.ShowTables: - return e.fetchShowTables() - case ast.ShowTableStatus: - return e.fetchShowTableStatus() - case ast.ShowTriggers: - return e.fetchShowTriggers() - case ast.ShowVariables: - return e.fetchShowVariables() - case ast.ShowWarnings: - // empty result - } - return nil -} - -func (e *ShowExec) fetchShowEngines() error { - row := &Row{ - Data: types.MakeDatums( - "InnoDB", - "DEFAULT", - "Supports transactions, row-level locking, and foreign keys", - "YES", - "YES", - "YES", - ), - } - e.rows = append(e.rows, row) - return nil -} - -func (e *ShowExec) fetchShowDatabases() error { - dbs := e.is.AllSchemaNames() - // TODO: let information_schema be the first database - sort.Strings(dbs) - for _, d := range dbs { - e.rows = append(e.rows, &Row{Data: types.MakeDatums(d)}) - } - return nil -} - -func (e *ShowExec) fetchShowTables() error { - if !e.is.SchemaExists(e.DBName) { - return errors.Errorf("Can not find DB: %s", e.DBName) - } - // sort for tables - var tableNames []string - for _, v := range e.is.SchemaTables(e.DBName) { - tableNames = append(tableNames, v.Meta().Name.L) - } - sort.Strings(tableNames) - for _, v := range tableNames { - data := types.MakeDatums(v) - if e.Full { - // TODO: support "VIEW" later if we have supported view feature. - // now, just use "BASE TABLE". - data = append(data, types.NewDatum("BASE TABLE")) - } - e.rows = append(e.rows, &Row{Data: data}) - } - return nil -} - -func (e *ShowExec) fetchShowTableStatus() error { - if !e.is.SchemaExists(e.DBName) { - return errors.Errorf("Can not find DB: %s", e.DBName) - } - - // sort for tables - var tableNames []string - for _, v := range e.is.SchemaTables(e.DBName) { - tableNames = append(tableNames, v.Meta().Name.L) - } - sort.Strings(tableNames) - - for _, v := range tableNames { - now := mysql.CurrentTime(mysql.TypeDatetime) - data := types.MakeDatums(v, "InnoDB", "10", "Compact", 100, 100, 100, 100, 100, 100, 100, - now, now, now, "utf8_general_ci", "", "", "") - e.rows = append(e.rows, &Row{Data: data}) - } - return nil -} - -func (e *ShowExec) fetchShowColumns() error { - tb, err := e.getTable() - if err != nil { - return errors.Trace(err) - } - cols := tb.Cols() - for _, col := range cols { - if e.Column != nil && e.Column.Name.L != col.Name.L { - continue - } - - desc := column.NewColDesc(col) - - // The FULL keyword causes the output to include the column collation and comments, - // as well as the privileges you have for each column. - row := &Row{} - if e.Full { - row.Data = types.MakeDatums( - desc.Field, - desc.Type, - desc.Collation, - desc.Null, - desc.Key, - desc.DefaultValue, - desc.Extra, - desc.Privileges, - desc.Comment, - ) - } else { - row.Data = types.MakeDatums( - desc.Field, - desc.Type, - desc.Null, - desc.Key, - desc.DefaultValue, - desc.Extra, - ) - } - e.rows = append(e.rows, row) - } - return nil -} - -func (e *ShowExec) fetchShowIndex() error { - tb, err := e.getTable() - if err != nil { - return errors.Trace(err) - } - for _, idx := range tb.Indices() { - for i, col := range idx.Columns { - nonUniq := 1 - if idx.Unique { - nonUniq = 0 - } - var subPart interface{} - if col.Length != types.UnspecifiedLength { - subPart = col.Length - } - data := types.MakeDatums( - tb.Meta().Name.O, // Table - nonUniq, // Non_unique - idx.Name.O, // Key_name - i+1, // Seq_in_index - col.Name.O, // Column_name - "utf8_bin", // Colation - 0, // Cardinality - subPart, // Sub_part - nil, // Packed - "YES", // Null - idx.Tp.String(), // Index_type - "", // Comment - idx.Comment, // Index_comment - ) - e.rows = append(e.rows, &Row{Data: data}) - } - } - return nil -} - -func (e *ShowExec) fetchShowCharset() error { - // See: http://dev.mysql.com/doc/refman/5.7/en/show-character-set.html - descs := charset.GetAllCharsets() - for _, desc := range descs { - row := &Row{ - Data: types.MakeDatums( - desc.Name, - desc.Desc, - desc.DefaultCollation, - desc.Maxlen, - ), - } - e.rows = append(e.rows, row) - } - return nil -} - -func (e *ShowExec) fetchShowVariables() error { - sessionVars := variable.GetSessionVars(e.ctx) - globalVars := variable.GetGlobalVarAccessor(e.ctx) - for _, v := range variable.SysVars { - var err error - var value string - if !e.GlobalScope { - // Try to get Session Scope variable value first. - sv, ok := sessionVars.Systems[v.Name] - if ok { - value = sv - } else { - // If session scope variable is not set, get the global scope value. - value, err = globalVars.GetGlobalSysVar(e.ctx, v.Name) - if err != nil { - return errors.Trace(err) - } - } - } else { - value, err = globalVars.GetGlobalSysVar(e.ctx, v.Name) - if err != nil { - return errors.Trace(err) - } - } - row := &Row{Data: types.MakeDatums(v.Name, value)} - e.rows = append(e.rows, row) - } - return nil -} - -func (e *ShowExec) fetchShowStatus() error { - statusVars, err := variable.GetStatusVars() - if err != nil { - return errors.Trace(err) - } - for status, v := range statusVars { - if e.GlobalScope && v.Scope == variable.ScopeSession { - continue - } - value, err := types.ToString(v.Value) - if err != nil { - return errors.Trace(err) - } - row := &Row{Data: types.MakeDatums(status, value)} - e.rows = append(e.rows, row) - } - return nil -} - -func (e *ShowExec) fetchShowCreateTable() error { - tb, err := e.getTable() - if err != nil { - return errors.Trace(err) - } - - // TODO: let the result more like MySQL. - var buf bytes.Buffer - buf.WriteString(fmt.Sprintf("CREATE TABLE `%s` (\n", tb.Meta().Name.O)) - for i, col := range tb.Cols() { - buf.WriteString(fmt.Sprintf(" `%s` %s", col.Name.O, col.GetTypeDesc())) - if mysql.HasAutoIncrementFlag(col.Flag) { - buf.WriteString(" NOT NULL AUTO_INCREMENT") - } else { - if mysql.HasNotNullFlag(col.Flag) { - buf.WriteString(" NOT NULL") - } - switch col.DefaultValue { - case nil: - buf.WriteString(" DEFAULT NULL") - case "CURRENT_TIMESTAMP": - buf.WriteString(" DEFAULT CURRENT_TIMESTAMP") - default: - buf.WriteString(fmt.Sprintf(" DEFAULT '%v'", col.DefaultValue)) - } - - if mysql.HasOnUpdateNowFlag(col.Flag) { - buf.WriteString(" ON UPDATE CURRENT_TIMESTAMP") - } - } - if i != len(tb.Cols())-1 { - buf.WriteString(",\n") - } - } - - if len(tb.Indices()) > 0 { - buf.WriteString(",\n") - } - - for i, idx := range tb.Indices() { - if idx.Primary { - buf.WriteString(" PRIMARY KEY ") - } else if idx.Unique { - buf.WriteString(fmt.Sprintf(" UNIQUE KEY `%s` ", idx.Name.O)) - } else { - buf.WriteString(fmt.Sprintf(" KEY `%s` ", idx.Name.O)) - } - - cols := make([]string, 0, len(idx.Columns)) - for _, c := range idx.Columns { - cols = append(cols, c.Name.O) - } - buf.WriteString(fmt.Sprintf("(`%s`)", strings.Join(cols, "`,`"))) - if i != len(tb.Indices())-1 { - buf.WriteString(",\n") - } - } - buf.WriteString("\n") - - buf.WriteString(") ENGINE=InnoDB") - if s := tb.Meta().Charset; len(s) > 0 { - buf.WriteString(fmt.Sprintf(" DEFAULT CHARSET=%s", s)) - } else { - buf.WriteString(" DEFAULT CHARSET=latin1") - } - - data := types.MakeDatums(tb.Meta().Name.O, buf.String()) - e.rows = append(e.rows, &Row{Data: data}) - return nil -} - -func (e *ShowExec) fetchShowCollation() error { - collations := charset.GetCollations() - for _, v := range collations { - isDefault := "" - if v.IsDefault { - isDefault = "Yes" - } - row := &Row{Data: types.MakeDatums( - v.Name, - v.CharsetName, - v.ID, - isDefault, - "Yes", - 1, - )} - e.rows = append(e.rows, row) - } - return nil -} - -func (e *ShowExec) fetchShowGrants() error { - // Get checker - checker := privilege.GetPrivilegeChecker(e.ctx) - if checker == nil { - return errors.New("Miss privilege checker!") - } - gs, err := checker.ShowGrants(e.ctx, e.User) - if err != nil { - return errors.Trace(err) - } - for _, g := range gs { - data := types.MakeDatums(g) - e.rows = append(e.rows, &Row{Data: data}) - } - return nil -} - -func (e *ShowExec) fetchShowTriggers() error { - return nil -} - -func (e *ShowExec) fetchShowProcedureStatus() error { - return nil -} - -func (e *ShowExec) getTable() (table.Table, error) { - if e.Table == nil { - return nil, errors.New("table not found") - } - tb, ok := e.is.TableByID(e.Table.TableInfo.ID) - if !ok { - return nil, errors.Errorf("table %s not found", e.Table.Name) - } - return tb, nil -} - -// Close implements Executor Close interface. -func (e *ShowExec) Close() error { - return nil -} diff --git a/vendor/github.com/pingcap/tidb/executor/subquery.go b/vendor/github.com/pingcap/tidb/executor/subquery.go deleted file mode 100644 index d12001112..000000000 --- a/vendor/github.com/pingcap/tidb/executor/subquery.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/optimizer/plan" - "github.com/pingcap/tidb/util/types" -) - -var _ ast.SubqueryExec = &subquery{} - -// subquery is an exprNode with a plan. -type subquery struct { - types.Datum - Type *types.FieldType - flag uint64 - text string - plan plan.Plan - is infoschema.InfoSchema -} - -// SetDatum implements Expression interface. -func (sq *subquery) SetDatum(datum types.Datum) { - sq.Datum = datum -} - -// GetDatum implements Expression interface. -func (sq *subquery) GetDatum() *types.Datum { - return &sq.Datum -} - -// SetFlag implements Expression interface. -func (sq *subquery) SetFlag(flag uint64) { - sq.flag = flag -} - -// GetFlag implements Expression interface. -func (sq *subquery) GetFlag() uint64 { - return sq.flag -} - -// SetText implements Node interface. -func (sq *subquery) SetText(text string) { - sq.text = text -} - -// Text implements Node interface. -func (sq *subquery) Text() string { - return sq.text -} - -// SetType implements Expression interface. -func (sq *subquery) SetType(tp *types.FieldType) { - sq.Type = tp -} - -// GetType implements Expression interface. -func (sq *subquery) GetType() *types.FieldType { - return sq.Type -} - -func (sq *subquery) Accept(v ast.Visitor) (ast.Node, bool) { - // SubQuery is not a normal ExprNode. - newNode, skipChildren := v.Enter(sq) - if skipChildren { - return v.Leave(newNode) - } - sq = newNode.(*subquery) - return v.Leave(sq) -} - -func (sq *subquery) EvalRows(ctx context.Context, rowCount int) ([]interface{}, error) { - b := newExecutorBuilder(ctx, sq.is) - plan.Refine(sq.plan) - e := b.build(sq.plan) - if b.err != nil { - return nil, errors.Trace(b.err) - } - defer e.Close() - if len(e.Fields()) == 0 { - // No result fields means no Recordset. - for { - row, err := e.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - return nil, nil - } - } - } - var ( - err error - row *Row - rows = []interface{}{} - ) - for rowCount != 0 { - row, err = e.Next() - if err != nil { - return rows, errors.Trace(err) - } - if row == nil { - break - } - if len(row.Data) == 1 { - rows = append(rows, row.Data[0].GetValue()) - } else { - rows = append(rows, types.DatumsToInterfaces(row.Data)) - } - if rowCount > 0 { - rowCount-- - } - } - return rows, nil -} - -func (sq *subquery) ColumnCount() (int, error) { - return len(sq.plan.Fields()), nil -} - -type subqueryBuilder struct { - is infoschema.InfoSchema -} - -func (sb *subqueryBuilder) Build(p plan.Plan) ast.SubqueryExec { - return &subquery{ - is: sb.is, - plan: p, - } -} diff --git a/vendor/github.com/pingcap/tidb/infoschema/infoschema.go b/vendor/github.com/pingcap/tidb/infoschema/infoschema.go deleted file mode 100644 index d2b12cdb0..000000000 --- a/vendor/github.com/pingcap/tidb/infoschema/infoschema.go +++ /dev/null @@ -1,499 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package infoschema - -import ( - "strings" - "sync/atomic" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/perfschema" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" - // import table implementation to init table.TableFromMeta - _ "github.com/pingcap/tidb/table/tables" - "github.com/pingcap/tidb/util/types" -) - -// InfoSchema is the interface used to retrieve the schema information. -// It works as a in memory cache and doesn't handle any schema change. -// InfoSchema is read-only, and the returned value is a copy. -// TODO: add more methods to retrieve tables and columns. -type InfoSchema interface { - SchemaByName(schema model.CIStr) (*model.DBInfo, bool) - SchemaExists(schema model.CIStr) bool - TableByName(schema, table model.CIStr) (table.Table, error) - TableExists(schema, table model.CIStr) bool - ColumnByName(schema, table, column model.CIStr) (*model.ColumnInfo, bool) - ColumnExists(schema, table, column model.CIStr) bool - IndexByName(schema, table, index model.CIStr) (*model.IndexInfo, bool) - SchemaByID(id int64) (*model.DBInfo, bool) - TableByID(id int64) (table.Table, bool) - AllocByID(id int64) (autoid.Allocator, bool) - ColumnByID(id int64) (*model.ColumnInfo, bool) - ColumnIndicesByID(id int64) ([]*model.IndexInfo, bool) - AllSchemaNames() []string - AllSchemas() []*model.DBInfo - Clone() (result []*model.DBInfo) - SchemaTables(schema model.CIStr) []table.Table - SchemaMetaVersion() int64 -} - -// Infomation Schema Name. -const ( - Name = "INFORMATION_SCHEMA" -) - -type infoSchema struct { - schemaNameToID map[string]int64 - tableNameToID map[tableName]int64 - columnNameToID map[columnName]int64 - schemas map[int64]*model.DBInfo - tables map[int64]table.Table - tableAllocators map[int64]autoid.Allocator - columns map[int64]*model.ColumnInfo - indices map[indexName]*model.IndexInfo - columnIndices map[int64][]*model.IndexInfo - - // We should check version when change schema. - schemaMetaVersion int64 -} - -var _ InfoSchema = (*infoSchema)(nil) - -type tableName struct { - schema string - table string -} - -type columnName struct { - tableName - name string -} - -type indexName struct { - tableName - name string -} - -func (is *infoSchema) SchemaByName(schema model.CIStr) (val *model.DBInfo, ok bool) { - id, ok := is.schemaNameToID[schema.L] - if !ok { - return - } - val, ok = is.schemas[id] - return -} - -func (is *infoSchema) SchemaMetaVersion() int64 { - return is.schemaMetaVersion -} - -func (is *infoSchema) SchemaExists(schema model.CIStr) bool { - _, ok := is.schemaNameToID[schema.L] - return ok -} - -func (is *infoSchema) TableByName(schema, table model.CIStr) (t table.Table, err error) { - id, ok := is.tableNameToID[tableName{schema: schema.L, table: table.L}] - if !ok { - return nil, TableNotExists.Gen("table %s.%s does not exist", schema, table) - } - t = is.tables[id] - return -} - -func (is *infoSchema) TableExists(schema, table model.CIStr) bool { - _, ok := is.tableNameToID[tableName{schema: schema.L, table: table.L}] - return ok -} - -func (is *infoSchema) ColumnByName(schema, table, column model.CIStr) (val *model.ColumnInfo, ok bool) { - id, ok := is.columnNameToID[columnName{tableName: tableName{schema: schema.L, table: table.L}, name: column.L}] - if !ok { - return - } - val, ok = is.columns[id] - return -} - -func (is *infoSchema) ColumnExists(schema, table, column model.CIStr) bool { - _, ok := is.columnNameToID[columnName{tableName: tableName{schema: schema.L, table: table.L}, name: column.L}] - return ok -} - -func (is *infoSchema) IndexByName(schema, table, index model.CIStr) (val *model.IndexInfo, ok bool) { - val, ok = is.indices[indexName{tableName: tableName{schema: schema.L, table: table.L}, name: index.L}] - return -} - -func (is *infoSchema) SchemaByID(id int64) (val *model.DBInfo, ok bool) { - val, ok = is.schemas[id] - return -} - -func (is *infoSchema) TableByID(id int64) (val table.Table, ok bool) { - val, ok = is.tables[id] - return -} - -func (is *infoSchema) AllocByID(id int64) (val autoid.Allocator, ok bool) { - val, ok = is.tableAllocators[id] - return -} - -func (is *infoSchema) ColumnByID(id int64) (val *model.ColumnInfo, ok bool) { - val, ok = is.columns[id] - return -} - -func (is *infoSchema) ColumnIndicesByID(id int64) (indices []*model.IndexInfo, ok bool) { - indices, ok = is.columnIndices[id] - return -} - -func (is *infoSchema) AllSchemaNames() (names []string) { - for _, v := range is.schemas { - names = append(names, v.Name.O) - } - return -} - -func (is *infoSchema) AllSchemas() (schemas []*model.DBInfo) { - for _, v := range is.schemas { - schemas = append(schemas, v) - } - return -} - -func (is *infoSchema) SchemaTables(schema model.CIStr) (tables []table.Table) { - di, ok := is.SchemaByName(schema) - if !ok { - return - } - for _, ti := range di.Tables { - tables = append(tables, is.tables[ti.ID]) - } - return -} - -func (is *infoSchema) Clone() (result []*model.DBInfo) { - for _, v := range is.schemas { - result = append(result, v.Clone()) - } - return -} - -// Handle handles information schema, including getting and setting. -type Handle struct { - value atomic.Value - store kv.Storage -} - -// NewHandle creates a new Handle. -func NewHandle(store kv.Storage) *Handle { - h := &Handle{ - store: store, - } - // init memory tables - initMemoryTables(store) - initPerfSchema(store) - return h -} - -func initPerfSchema(store kv.Storage) { - perfHandle = perfschema.NewPerfHandle(store) -} - -func genGlobalID(store kv.Storage) (int64, error) { - var globalID int64 - err := kv.RunInNewTxn(store, true, func(txn kv.Transaction) error { - var err error - globalID, err = meta.NewMeta(txn).GenGlobalID() - return errors.Trace(err) - }) - return globalID, errors.Trace(err) -} - -var ( - // Information_Schema - isDB *model.DBInfo - schemataTbl table.Table - tablesTbl table.Table - columnsTbl table.Table - statisticsTbl table.Table - charsetTbl table.Table - collationsTbl table.Table - filesTbl table.Table - defTbl table.Table - profilingTbl table.Table - nameToTable map[string]table.Table - - perfHandle perfschema.PerfSchema -) - -func setColumnID(meta *model.TableInfo, store kv.Storage) error { - var err error - for _, c := range meta.Columns { - c.ID, err = genGlobalID(store) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -func initMemoryTables(store kv.Storage) error { - // Init Information_Schema - var ( - err error - tbl table.Table - ) - dbID, err := genGlobalID(store) - if err != nil { - return errors.Trace(err) - } - nameToTable = make(map[string]table.Table) - isTables := make([]*model.TableInfo, 0, len(tableNameToColumns)) - for name, cols := range tableNameToColumns { - meta := buildTableMeta(name, cols) - isTables = append(isTables, meta) - meta.ID, err = genGlobalID(store) - if err != nil { - return errors.Trace(err) - } - err = setColumnID(meta, store) - if err != nil { - return errors.Trace(err) - } - alloc := autoid.NewMemoryAllocator(dbID) - tbl, err = createMemoryTable(meta, alloc) - if err != nil { - return errors.Trace(err) - } - nameToTable[meta.Name.L] = tbl - } - schemataTbl = nameToTable[strings.ToLower(tableSchemata)] - tablesTbl = nameToTable[strings.ToLower(tableTables)] - columnsTbl = nameToTable[strings.ToLower(tableColumns)] - statisticsTbl = nameToTable[strings.ToLower(tableStatistics)] - charsetTbl = nameToTable[strings.ToLower(tableCharacterSets)] - collationsTbl = nameToTable[strings.ToLower(tableCollations)] - - // CharacterSets/Collations contain static data. Init them now. - err = insertData(charsetTbl, dataForCharacterSets()) - if err != nil { - return errors.Trace(err) - } - err = insertData(collationsTbl, dataForColltions()) - if err != nil { - return errors.Trace(err) - } - // create db - isDB = &model.DBInfo{ - ID: dbID, - Name: model.NewCIStr(Name), - Charset: mysql.DefaultCharset, - Collate: mysql.DefaultCollationName, - Tables: isTables, - } - return nil -} - -func insertData(tbl table.Table, rows [][]types.Datum) error { - for _, r := range rows { - _, err := tbl.AddRecord(nil, r) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -func refillTable(tbl table.Table, rows [][]types.Datum) error { - err := tbl.Truncate(nil) - if err != nil { - return errors.Trace(err) - } - return insertData(tbl, rows) -} - -// Set sets DBInfo to information schema. -func (h *Handle) Set(newInfo []*model.DBInfo, schemaMetaVersion int64) error { - info := &infoSchema{ - schemaNameToID: map[string]int64{}, - tableNameToID: map[tableName]int64{}, - columnNameToID: map[columnName]int64{}, - schemas: map[int64]*model.DBInfo{}, - tables: map[int64]table.Table{}, - tableAllocators: map[int64]autoid.Allocator{}, - columns: map[int64]*model.ColumnInfo{}, - indices: map[indexName]*model.IndexInfo{}, - columnIndices: map[int64][]*model.IndexInfo{}, - schemaMetaVersion: schemaMetaVersion, - } - var err error - var hasOldInfo bool - infoschema := h.Get() - if infoschema != nil { - hasOldInfo = true - } - for _, di := range newInfo { - info.schemas[di.ID] = di - info.schemaNameToID[di.Name.L] = di.ID - for _, t := range di.Tables { - alloc := autoid.NewAllocator(h.store, di.ID) - if hasOldInfo { - val, ok := infoschema.AllocByID(t.ID) - if ok { - alloc = val - } - } - info.tableAllocators[t.ID] = alloc - info.tables[t.ID], err = table.TableFromMeta(alloc, t) - if err != nil { - return errors.Trace(err) - } - tname := tableName{di.Name.L, t.Name.L} - info.tableNameToID[tname] = t.ID - for _, c := range t.Columns { - info.columns[c.ID] = c - info.columnNameToID[columnName{tname, c.Name.L}] = c.ID - } - for _, idx := range t.Indices { - info.indices[indexName{tname, idx.Name.L}] = idx - for _, idxCol := range idx.Columns { - columnID := t.Columns[idxCol.Offset].ID - columnIndices := info.columnIndices[columnID] - info.columnIndices[columnID] = append(columnIndices, idx) - } - } - } - } - // Build Information_Schema - info.schemaNameToID[isDB.Name.L] = isDB.ID - info.schemas[isDB.ID] = isDB - for _, t := range isDB.Tables { - tbl, ok := nameToTable[t.Name.L] - if !ok { - return errors.Errorf("table `%s` is missing.", t.Name) - } - info.tables[t.ID] = tbl - tname := tableName{isDB.Name.L, t.Name.L} - info.tableNameToID[tname] = t.ID - for _, c := range t.Columns { - info.columns[c.ID] = c - info.columnNameToID[columnName{tname, c.Name.L}] = c.ID - } - } - - // Add Performance_Schema - psDB := perfHandle.GetDBMeta() - info.schemaNameToID[psDB.Name.L] = psDB.ID - info.schemas[psDB.ID] = psDB - for _, t := range psDB.Tables { - tbl, ok := perfHandle.GetTable(t.Name.O) - if !ok { - return errors.Errorf("table `%s` is missing.", t.Name) - } - info.tables[t.ID] = tbl - tname := tableName{psDB.Name.L, t.Name.L} - info.tableNameToID[tname] = t.ID - for _, c := range t.Columns { - info.columns[c.ID] = c - info.columnNameToID[columnName{tname, c.Name.L}] = c.ID - } - } - // Should refill some tables in Information_Schema. - // schemata/tables/columns/statistics - dbNames := make([]string, 0, len(info.schemas)) - dbInfos := make([]*model.DBInfo, 0, len(info.schemas)) - for _, v := range info.schemas { - dbNames = append(dbNames, v.Name.L) - dbInfos = append(dbInfos, v) - } - err = refillTable(schemataTbl, dataForSchemata(dbNames)) - if err != nil { - return errors.Trace(err) - } - err = refillTable(tablesTbl, dataForTables(dbInfos)) - if err != nil { - return errors.Trace(err) - } - err = refillTable(columnsTbl, dataForColumns(dbInfos)) - if err != nil { - return errors.Trace(err) - } - err = refillTable(statisticsTbl, dataForStatistics(dbInfos)) - if err != nil { - return errors.Trace(err) - } - h.value.Store(info) - return nil -} - -// Get gets information schema from Handle. -func (h *Handle) Get() InfoSchema { - v := h.value.Load() - schema, _ := v.(InfoSchema) - return schema -} - -// Schema error codes. -const ( - CodeDbDropExists terror.ErrCode = 1008 - CodeDatabaseNotExists = 1049 - CodeTableNotExists = 1146 - CodeColumnNotExists = 1054 - - CodeDatabaseExists = 1007 - CodeTableExists = 1050 - CodeBadTable = 1051 -) - -var ( - // DatabaseDropExists returns for drop an unexist database. - DatabaseDropExists = terror.ClassSchema.New(CodeDbDropExists, "database doesn't exist") - // DatabaseNotExists returns for database not exists. - DatabaseNotExists = terror.ClassSchema.New(CodeDatabaseNotExists, "database not exists") - // TableNotExists returns for table not exists. - TableNotExists = terror.ClassSchema.New(CodeTableNotExists, "table not exists") - // ColumnNotExists returns for column not exists. - ColumnNotExists = terror.ClassSchema.New(CodeColumnNotExists, "field not exists") - - // DatabaseExists returns for database already exists. - DatabaseExists = terror.ClassSchema.New(CodeDatabaseExists, "database already exists") - // TableExists returns for table already exists. - TableExists = terror.ClassSchema.New(CodeTableExists, "table already exists") - // TableDropExists returns for drop an unexist table. - TableDropExists = terror.ClassSchema.New(CodeBadTable, "unknown table") -) - -func init() { - schemaMySQLErrCodes := map[terror.ErrCode]uint16{ - CodeDbDropExists: mysql.ErrDbDropExists, - CodeDatabaseNotExists: mysql.ErrBadDb, - CodeTableNotExists: mysql.ErrNoSuchTable, - CodeColumnNotExists: mysql.ErrBadField, - CodeDatabaseExists: mysql.ErrDbCreateExists, - CodeTableExists: mysql.ErrTableExists, - CodeBadTable: mysql.ErrBadTable, - } - terror.ErrClassToMySQLCodes[terror.ClassSchema] = schemaMySQLErrCodes -} diff --git a/vendor/github.com/pingcap/tidb/infoschema/tables.go b/vendor/github.com/pingcap/tidb/infoschema/tables.go deleted file mode 100644 index 3069eb3cb..000000000 --- a/vendor/github.com/pingcap/tidb/infoschema/tables.go +++ /dev/null @@ -1,458 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package infoschema - -import ( - "fmt" - "sort" - - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/table/tables" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/types" -) - -const ( - tableSchemata = "SCHEMATA" - tableTables = "TABLES" - tableColumns = "COLUMNS" - tableStatistics = "STATISTICS" - tableCharacterSets = "CHARACTER_SETS" - tableCollations = "COLLATIONS" - tableFiles = "FILES" - catalogVal = "def" - tableProfiling = "PROFILING" -) - -type columnInfo struct { - name string - tp byte - size int - flag uint - deflt interface{} - elems []string -} - -func buildColumnInfo(tableName string, col columnInfo) *model.ColumnInfo { - mCharset := charset.CharsetBin - mCollation := charset.CharsetBin - mFlag := mysql.UnsignedFlag - if col.tp == mysql.TypeVarchar || col.tp == mysql.TypeBlob { - mCharset = mysql.DefaultCharset - mCollation = mysql.DefaultCollationName - mFlag = 0 - } - fieldType := types.FieldType{ - Charset: mCharset, - Collate: mCollation, - Tp: col.tp, - Flen: col.size, - Flag: uint(mFlag), - } - return &model.ColumnInfo{ - Name: model.NewCIStr(col.name), - FieldType: fieldType, - State: model.StatePublic, - } -} - -func buildTableMeta(tableName string, cs []columnInfo) *model.TableInfo { - cols := make([]*model.ColumnInfo, 0, len(cs)) - for _, c := range cs { - cols = append(cols, buildColumnInfo(tableName, c)) - } - for i, col := range cols { - col.Offset = i - } - return &model.TableInfo{ - Name: model.NewCIStr(tableName), - Columns: cols, - State: model.StatePublic, - } -} - -var schemataCols = []columnInfo{ - {"CATALOG_NAME", mysql.TypeVarchar, 512, 0, nil, nil}, - {"SCHEMA_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"DEFAULT_CHARACTER_SET_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"DEFAULT_COLLATION_NAME", mysql.TypeVarchar, 32, 0, nil, nil}, - {"SQL_PATH", mysql.TypeVarchar, 512, 0, nil, nil}, -} - -var tablesCols = []columnInfo{ - {"TABLE_CATALOG", mysql.TypeVarchar, 512, 0, nil, nil}, - {"TABLE_SCHEMA", mysql.TypeVarchar, 64, 0, nil, nil}, - {"TABLE_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"TABLE_TYPE", mysql.TypeVarchar, 64, 0, nil, nil}, - {"ENGINE", mysql.TypeVarchar, 64, 0, nil, nil}, - {"VERSION", mysql.TypeLonglong, 21, 0, nil, nil}, - {"ROW_FORMAT", mysql.TypeVarchar, 10, 0, nil, nil}, - {"TABLE_ROWS", mysql.TypeLonglong, 21, 0, nil, nil}, - {"AVG_ROW_LENGTH", mysql.TypeLonglong, 21, 0, nil, nil}, - {"DATA_LENGTH", mysql.TypeLonglong, 21, 0, nil, nil}, - {"MAX_DATA_LENGTH", mysql.TypeLonglong, 21, 0, nil, nil}, - {"INDEX_LENGTH", mysql.TypeLonglong, 21, 0, nil, nil}, - {"DATA_FREE", mysql.TypeLonglong, 21, 0, nil, nil}, - {"AUTO_INCREMENT", mysql.TypeLonglong, 21, 0, nil, nil}, - {"CREATE_TIME", mysql.TypeDatetime, 19, 0, nil, nil}, - {"UPDATE_TIME", mysql.TypeDatetime, 19, 0, nil, nil}, - {"CHECK_TIME", mysql.TypeDatetime, 19, 0, nil, nil}, - {"TABLE_COLLATION", mysql.TypeVarchar, 32, 0, nil, nil}, - {"CHECK_SUM", mysql.TypeLonglong, 21, 0, nil, nil}, - {"CREATE_OPTIONS", mysql.TypeVarchar, 255, 0, nil, nil}, - {"TABLE_COMMENT", mysql.TypeVarchar, 2048, 0, nil, nil}, -} - -var columnsCols = []columnInfo{ - {"TABLE_CATALOG", mysql.TypeVarchar, 512, 0, nil, nil}, - {"TABLE_SCHEMA", mysql.TypeVarchar, 64, 0, nil, nil}, - {"TABLE_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"COLUMN_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"ORIGINAL_POSITION", mysql.TypeLonglong, 64, 0, nil, nil}, - {"COLUMN_DEFAULT", mysql.TypeBlob, 196606, 0, nil, nil}, - {"IS_NULLABLE", mysql.TypeVarchar, 3, 0, nil, nil}, - {"DATA_TYPE", mysql.TypeVarchar, 64, 0, nil, nil}, - {"CHARACTER_MAXIMUM_LENGTH", mysql.TypeLonglong, 21, 0, nil, nil}, - {"CHARACTOR_OCTET_LENGTH", mysql.TypeLonglong, 21, 0, nil, nil}, - {"NUMERIC_PRECISION", mysql.TypeLonglong, 21, 0, nil, nil}, - {"NUMERIC_SCALE", mysql.TypeLonglong, 21, 0, nil, nil}, - {"DATETIME_PRECISION", mysql.TypeLonglong, 21, 0, nil, nil}, - {"CHARACTER_SET_NAME", mysql.TypeVarchar, 32, 0, nil, nil}, - {"COLLATION_NAME", mysql.TypeVarchar, 32, 0, nil, nil}, - {"COLUMN_TYPE", mysql.TypeBlob, 196606, 0, nil, nil}, - {"COLUMN_KEY", mysql.TypeVarchar, 3, 0, nil, nil}, - {"EXTRA", mysql.TypeVarchar, 30, 0, nil, nil}, - {"PRIVILEGES", mysql.TypeVarchar, 80, 0, nil, nil}, - {"COLUMN_COMMENT", mysql.TypeVarchar, 1024, 0, nil, nil}, -} - -var statisticsCols = []columnInfo{ - {"TABLE_CATALOG", mysql.TypeVarchar, 512, 0, nil, nil}, - {"TABLE_SCHEMA", mysql.TypeVarchar, 64, 0, nil, nil}, - {"TABLE_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"NON_UNIQUE", mysql.TypeVarchar, 1, 0, nil, nil}, - {"INDEX_SCHEMA", mysql.TypeVarchar, 64, 0, nil, nil}, - {"INDEX_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"SEQ_IN_INDEX", mysql.TypeLonglong, 2, 0, nil, nil}, - {"COLUMN_NAME", mysql.TypeVarchar, 21, 0, nil, nil}, - {"COLLATION", mysql.TypeVarchar, 1, 0, nil, nil}, - {"CARDINALITY", mysql.TypeLonglong, 21, 0, nil, nil}, - {"SUB_PART", mysql.TypeLonglong, 3, 0, nil, nil}, - {"PACKED", mysql.TypeVarchar, 10, 0, nil, nil}, - {"NULLABLE", mysql.TypeVarchar, 3, 0, nil, nil}, - {"INDEX_TYPE", mysql.TypeVarchar, 16, 0, nil, nil}, - {"COMMENT", mysql.TypeVarchar, 16, 0, nil, nil}, - {"INDEX_COMMENT", mysql.TypeVarchar, 1024, 0, nil, nil}, -} - -var profilingCols = []columnInfo{ - {"QUERY_ID", mysql.TypeLong, 20, 0, nil, nil}, - {"SEQ", mysql.TypeLong, 20, 0, nil, nil}, - {"STATE", mysql.TypeVarchar, 30, 0, nil, nil}, - {"DURATION", mysql.TypeNewDecimal, 9, 0, nil, nil}, - {"CPU_USER", mysql.TypeNewDecimal, 9, 0, nil, nil}, - {"CPU_SYSTEM", mysql.TypeNewDecimal, 9, 0, nil, nil}, - {"CONTEXT_VOLUNTARY", mysql.TypeLong, 20, 0, nil, nil}, - {"CONTEXT_INVOLUNTARY", mysql.TypeLong, 20, 0, nil, nil}, - {"BLOCK_OPS_IN", mysql.TypeLong, 20, 0, nil, nil}, - {"BLOCK_OPS_OUT", mysql.TypeLong, 20, 0, nil, nil}, - {"MESSAGES_SENT", mysql.TypeLong, 20, 0, nil, nil}, - {"MESSAGES_RECEIVED", mysql.TypeLong, 20, 0, nil, nil}, - {"PAGE_FAULTS_MAJOR", mysql.TypeLong, 20, 0, nil, nil}, - {"PAGE_FAULTS_MINOR", mysql.TypeLong, 20, 0, nil, nil}, - {"SWAPS", mysql.TypeLong, 20, 0, nil, nil}, - {"SOURCE_FUNCTION", mysql.TypeVarchar, 30, 0, nil, nil}, - {"SOURCE_FILE", mysql.TypeVarchar, 20, 0, nil, nil}, - {"SOURCE_LINE", mysql.TypeLong, 20, 0, nil, nil}, -} - -var charsetCols = []columnInfo{ - {"CHARACTER_SET_NAME", mysql.TypeVarchar, 32, 0, nil, nil}, - {"DEFAULT_COLLATE_NAME", mysql.TypeVarchar, 32, 0, nil, nil}, - {"DESCRIPTION", mysql.TypeVarchar, 60, 0, nil, nil}, - {"MAXLEN", mysql.TypeLonglong, 3, 0, nil, nil}, -} - -var collationsCols = []columnInfo{ - {"COLLATION_NAME", mysql.TypeVarchar, 32, 0, nil, nil}, - {"CHARACTER_SET_NAME", mysql.TypeVarchar, 32, 0, nil, nil}, - {"ID", mysql.TypeLonglong, 11, 0, nil, nil}, - {"IS_DEFAULT", mysql.TypeVarchar, 3, 0, nil, nil}, - {"IS_COMPILED", mysql.TypeVarchar, 3, 0, nil, nil}, - {"SORTLEN", mysql.TypeLonglong, 3, 0, nil, nil}, -} - -func dataForCharacterSets() (records [][]types.Datum) { - records = append(records, - types.MakeDatums("ascii", "ascii_general_ci", "US ASCII", 1), - types.MakeDatums("binary", "binary", "Binary pseudo charset", 1), - types.MakeDatums("latin1", "latin1_swedish_ci", "cp1252 West European", 1), - types.MakeDatums("utf8", "utf8_general_ci", "UTF-8 Unicode", 3), - types.MakeDatums("utf8mb4", "utf8mb4_general_ci", "UTF-8 Unicode", 4), - ) - return records -} - -func dataForColltions() (records [][]types.Datum) { - records = append(records, - types.MakeDatums("ascii_general_ci", "ascii", 1, "Yes", "Yes", 1), - types.MakeDatums("binary", "binary", 2, "Yes", "Yes", 1), - types.MakeDatums("latin1_swedish_ci", "latin1", 3, "Yes", "Yes", 1), - types.MakeDatums("utf8_general_ci", "utf8", 4, "Yes", "Yes", 1), - types.MakeDatums("utf8mb4_general_ci", "utf8mb4", 5, "Yes", "Yes", 1), - ) - return records -} - -var filesCols = []columnInfo{ - {"FILE_ID", mysql.TypeLonglong, 4, 0, nil, nil}, - {"FILE_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"TABLESPACE_NAME", mysql.TypeVarchar, 20, 0, nil, nil}, - {"TABLE_CATALOG", mysql.TypeVarchar, 64, 0, nil, nil}, - {"TABLE_SCHEMA", mysql.TypeVarchar, 64, 0, nil, nil}, - {"TABLE_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"LOGFILE_GROUP_NAME", mysql.TypeVarchar, 64, 0, nil, nil}, - {"LOGFILE_GROUP_NUMBER", mysql.TypeLonglong, 32, 0, nil, nil}, - {"ENGINE", mysql.TypeVarchar, 64, 0, nil, nil}, - {"FULLTEXT_KEYS", mysql.TypeVarchar, 64, 0, nil, nil}, - {"DELETED_ROWS", mysql.TypeLonglong, 4, 0, nil, nil}, - {"UPDATE_COUNT", mysql.TypeLonglong, 4, 0, nil, nil}, - {"FREE_EXTENTS", mysql.TypeLonglong, 4, 0, nil, nil}, - {"TOTAL_EXTENTS", mysql.TypeLonglong, 4, 0, nil, nil}, - {"EXTENT_SIZE", mysql.TypeLonglong, 4, 0, nil, nil}, - {"INITIAL_SIZE", mysql.TypeLonglong, 21, 0, nil, nil}, - {"MAXIMUM_SIZE", mysql.TypeLonglong, 21, 0, nil, nil}, - {"AUTOEXTEND_SIZE", mysql.TypeLonglong, 21, 0, nil, nil}, - {"CREATION_TIME", mysql.TypeDatetime, -1, 0, nil, nil}, - {"LAST_UPDATE_TIME", mysql.TypeDatetime, -1, 0, nil, nil}, - {"LAST_ACCESS_TIME", mysql.TypeDatetime, -1, 0, nil, nil}, - {"RECOVER_TIME", mysql.TypeLonglong, 4, 0, nil, nil}, - {"TRANSACTION_COUNTER", mysql.TypeLonglong, 4, 0, nil, nil}, - {"VERSION", mysql.TypeLonglong, 21, 0, nil, nil}, - {"ROW_FORMAT", mysql.TypeVarchar, 21, 0, nil, nil}, - {"TABLE_ROWS", mysql.TypeLonglong, 21, 0, nil, nil}, - {"AVG_ROW_LENGTH", mysql.TypeLonglong, 21, 0, nil, nil}, - {"DATA_FREE", mysql.TypeLonglong, 21, 0, nil, nil}, - {"CREATE_TIME", mysql.TypeDatetime, -1, 0, nil, nil}, - {"UPDATE_TIME", mysql.TypeDatetime, -1, 0, nil, nil}, - {"CHECK_TIME", mysql.TypeDatetime, -1, 0, nil, nil}, - {"CHECKSUM", mysql.TypeLonglong, 21, 0, nil, nil}, - {"STATUS", mysql.TypeVarchar, 20, 0, nil, nil}, - {"EXTRA", mysql.TypeVarchar, 255, 0, nil, nil}, -} - -func dataForSchemata(schemas []string) [][]types.Datum { - sort.Strings(schemas) - rows := [][]types.Datum{} - for _, schema := range schemas { - record := types.MakeDatums( - catalogVal, // CATALOG_NAME - schema, // SCHEMA_NAME - mysql.DefaultCharset, // DEFAULT_CHARACTER_SET_NAME - mysql.DefaultCollationName, // DEFAULT_COLLATION_NAME - nil, - ) - rows = append(rows, record) - } - return rows -} - -func dataForTables(schemas []*model.DBInfo) [][]types.Datum { - rows := [][]types.Datum{} - for _, schema := range schemas { - for _, table := range schema.Tables { - record := types.MakeDatums( - catalogVal, // TABLE_CATALOG - schema.Name.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - "BASE_TABLE", // TABLE_TYPE - "InnoDB", // ENGINE - uint64(10), // VERSION - "Compact", // ROW_FORMAT - uint64(0), // TABLE_ROWS - uint64(0), // AVG_ROW_LENGTH - uint64(16384), // DATA_LENGTH - uint64(0), // MAX_DATA_LENGTH - uint64(0), // INDEX_LENGTH - uint64(0), // DATA_FREE - nil, // AUTO_INCREMENT - nil, // CREATE_TIME - nil, // UPDATE_TIME - nil, // CHECK_TIME - "latin1_swedish_ci", // TABLE_COLLATION - nil, // CHECKSUM - "", // CREATE_OPTIONS - "", // TABLE_COMMENT - ) - rows = append(rows, record) - } - } - return rows -} - -func dataForColumns(schemas []*model.DBInfo) [][]types.Datum { - rows := [][]types.Datum{} - for _, schema := range schemas { - for _, table := range schema.Tables { - rs := dataForColumnsInTable(schema, table) - for _, r := range rs { - rows = append(rows, r) - } - } - } - return rows -} - -func dataForColumnsInTable(schema *model.DBInfo, table *model.TableInfo) [][]types.Datum { - rows := [][]types.Datum{} - for i, col := range table.Columns { - colLen := col.Flen - if colLen == types.UnspecifiedLength { - colLen = mysql.GetDefaultFieldLength(col.Tp) - } - decimal := col.Decimal - if decimal == types.UnspecifiedLength { - decimal = 0 - } - columnType := col.FieldType.CompactStr() - columnDesc := column.NewColDesc(&column.Col{ColumnInfo: *col}) - var columnDefault interface{} - if columnDesc.DefaultValue != nil { - columnDefault = fmt.Sprintf("%v", columnDesc.DefaultValue) - } - record := types.MakeDatums( - catalogVal, // TABLE_CATALOG - schema.Name.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - col.Name.O, // COLUMN_NAME - i+1, // ORIGINAL_POSITION - columnDefault, // COLUMN_DEFAULT - columnDesc.Null, // IS_NULLABLE - types.TypeToStr(col.Tp, col.Charset), // DATA_TYPE - colLen, // CHARACTER_MAXIMUM_LENGTH - colLen, // CHARACTOR_OCTET_LENGTH - decimal, // NUMERIC_PRECISION - 0, // NUMERIC_SCALE - 0, // DATETIME_PRECISION - col.Charset, // CHARACTER_SET_NAME - col.Collate, // COLLATION_NAME - columnType, // COLUMN_TYPE - columnDesc.Key, // COLUMN_KEY - columnDesc.Extra, // EXTRA - "select,insert,update,references", // PRIVILEGES - "", // COLUMN_COMMENT - ) - rows = append(rows, record) - } - return rows -} - -func dataForStatistics(schemas []*model.DBInfo) [][]types.Datum { - rows := [][]types.Datum{} - for _, schema := range schemas { - for _, table := range schema.Tables { - rs := dataForStatisticsInTable(schema, table) - for _, r := range rs { - rows = append(rows, r) - } - } - } - return rows -} - -func dataForStatisticsInTable(schema *model.DBInfo, table *model.TableInfo) [][]types.Datum { - rows := [][]types.Datum{} - if table.PKIsHandle { - for _, col := range table.Columns { - if mysql.HasPriKeyFlag(col.Flag) { - record := types.MakeDatums( - catalogVal, // TABLE_CATALOG - schema.Name.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - "0", // NON_UNIQUE - schema.Name.O, // INDEX_SCHEMA - "PRIMARY", // INDEX_NAME - 1, // SEQ_IN_INDEX - col.Name.O, // COLUMN_NAME - "A", // COLLATION - 0, // CARDINALITY - nil, // SUB_PART - nil, // PACKED - "", // NULLABLE - "BTREE", // INDEX_TYPE - "", // COMMENT - "", // INDEX_COMMENT - ) - rows = append(rows, record) - } - } - } - nameToCol := make(map[string]*model.ColumnInfo, len(table.Columns)) - for _, c := range table.Columns { - nameToCol[c.Name.L] = c - } - for _, index := range table.Indices { - nonUnique := "1" - if index.Unique { - nonUnique = "0" - } - for i, key := range index.Columns { - col := nameToCol[key.Name.L] - nullable := "YES" - if mysql.HasNotNullFlag(col.Flag) { - nullable = "" - } - record := types.MakeDatums( - catalogVal, // TABLE_CATALOG - schema.Name.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - nonUnique, // NON_UNIQUE - schema.Name.O, // INDEX_SCHEMA - index.Name.O, // INDEX_NAME - i+1, // SEQ_IN_INDEX - key.Name.O, // COLUMN_NAME - "A", // COLLATION - 0, // CARDINALITY - nil, // SUB_PART - nil, // PACKED - nullable, // NULLABLE - "BTREE", // INDEX_TYPE - "", // COMMENT - "", // INDEX_COMMENT - ) - rows = append(rows, record) - } - } - return rows -} - -var tableNameToColumns = map[string]([]columnInfo){ - tableSchemata: schemataCols, - tableTables: tablesCols, - tableColumns: columnsCols, - tableStatistics: statisticsCols, - tableCharacterSets: charsetCols, - tableCollations: collationsCols, - tableFiles: filesCols, - tableProfiling: profilingCols, -} - -func createMemoryTable(meta *model.TableInfo, alloc autoid.Allocator) (table.Table, error) { - tbl, _ := tables.MemoryTableFromMeta(alloc, meta) - return tbl, nil -} diff --git a/vendor/github.com/pingcap/tidb/inspectkv/inspectkv.go b/vendor/github.com/pingcap/tidb/inspectkv/inspectkv.go deleted file mode 100644 index 1a0efd2b1..000000000 --- a/vendor/github.com/pingcap/tidb/inspectkv/inspectkv.go +++ /dev/null @@ -1,452 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package inspectkv - -import ( - "io" - "reflect" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/table/tables" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/types" -) - -// DDLInfo is for DDL information. -type DDLInfo struct { - SchemaVer int64 - ReorgHandle int64 // it's only used for DDL information. - Owner *model.Owner - Job *model.Job -} - -// GetDDLInfo returns DDL information. -func GetDDLInfo(txn kv.Transaction) (*DDLInfo, error) { - var err error - info := &DDLInfo{} - t := meta.NewMeta(txn) - - info.Owner, err = t.GetDDLJobOwner() - if err != nil { - return nil, errors.Trace(err) - } - info.Job, err = t.GetDDLJob(0) - if err != nil { - return nil, errors.Trace(err) - } - info.SchemaVer, err = t.GetSchemaVersion() - if err != nil { - return nil, errors.Trace(err) - } - if info.Job == nil { - return info, nil - } - - info.ReorgHandle, err = t.GetDDLReorgHandle(info.Job) - if err != nil { - return nil, errors.Trace(err) - } - - return info, nil -} - -// GetBgDDLInfo returns background DDL information. -func GetBgDDLInfo(txn kv.Transaction) (*DDLInfo, error) { - var err error - info := &DDLInfo{} - t := meta.NewMeta(txn) - - info.Owner, err = t.GetBgJobOwner() - if err != nil { - return nil, errors.Trace(err) - } - info.Job, err = t.GetBgJob(0) - if err != nil { - return nil, errors.Trace(err) - } - info.SchemaVer, err = t.GetSchemaVersion() - if err != nil { - return nil, errors.Trace(err) - } - - return info, nil -} - -func nextIndexVals(data []types.Datum) []types.Datum { - // Add 0x0 to the end of data. - return append(data, types.Datum{}) -} - -// RecordData is the record data composed of a handle and values. -type RecordData struct { - Handle int64 - Values []types.Datum -} - -// GetIndexRecordsCount returns the total number of the index records from startVals. -// If startVals = nil, returns the total number of the index records. -func GetIndexRecordsCount(txn kv.Transaction, kvIndex kv.Index, startVals []types.Datum) (int64, error) { - it, _, err := kvIndex.Seek(txn, startVals) - if err != nil { - return 0, errors.Trace(err) - } - defer it.Close() - - var cnt int64 - for { - _, _, err := it.Next() - if terror.ErrorEqual(err, io.EOF) { - break - } else if err != nil { - return 0, errors.Trace(err) - } - cnt++ - } - - return cnt, nil -} - -// ScanIndexData scans the index handles and values in a limited number, according to the index information. -// It returns data and the next startVals until it doesn't have data, then returns data is nil and -// the next startVals is the values which can't get data. If startVals = nil and limit = -1, -// it returns the index data of the whole. -func ScanIndexData(txn kv.Transaction, kvIndex kv.Index, startVals []types.Datum, limit int64) ( - []*RecordData, []types.Datum, error) { - it, _, err := kvIndex.Seek(txn, startVals) - if err != nil { - return nil, nil, errors.Trace(err) - } - defer it.Close() - - var idxRows []*RecordData - var curVals []types.Datum - for limit != 0 { - val, h, err1 := it.Next() - if terror.ErrorEqual(err1, io.EOF) { - return idxRows, nextIndexVals(curVals), nil - } else if err1 != nil { - return nil, nil, errors.Trace(err1) - } - idxRows = append(idxRows, &RecordData{Handle: h, Values: val}) - limit-- - curVals = val - } - - nextVals, _, err := it.Next() - if terror.ErrorEqual(err, io.EOF) { - return idxRows, nextIndexVals(curVals), nil - } else if err != nil { - return nil, nil, errors.Trace(err) - } - - return idxRows, nextVals, nil -} - -// CompareIndexData compares index data one by one. -// It returns nil if the data from the index is equal to the data from the table columns, -// otherwise it returns an error with a different set of records. -func CompareIndexData(txn kv.Transaction, t table.Table, idx *column.IndexedCol) error { - err := checkIndexAndRecord(txn, t, idx) - if err != nil { - return errors.Trace(err) - } - - return checkRecordAndIndex(txn, t, idx) -} - -func checkIndexAndRecord(txn kv.Transaction, t table.Table, idx *column.IndexedCol) error { - kvIndex := kv.NewKVIndex(t.IndexPrefix(), idx.Name.L, idx.ID, idx.Unique) - it, err := kvIndex.SeekFirst(txn) - if err != nil { - return errors.Trace(err) - } - defer it.Close() - - cols := make([]*column.Col, len(idx.Columns)) - for i, col := range idx.Columns { - cols[i] = t.Cols()[col.Offset] - } - - for { - vals1, h, err := it.Next() - if terror.ErrorEqual(err, io.EOF) { - break - } else if err != nil { - return errors.Trace(err) - } - - vals2, err := rowWithCols(txn, t, h, cols) - if terror.ErrorEqual(err, kv.ErrNotExist) { - record := &RecordData{Handle: h, Values: vals1} - err = errors.Errorf("index:%v != record:%v", record, nil) - } - if err != nil { - return errors.Trace(err) - } - if !reflect.DeepEqual(vals1, vals2) { - record1 := &RecordData{Handle: h, Values: vals1} - record2 := &RecordData{Handle: h, Values: vals2} - return errors.Errorf("index:%v != record:%v", record1, record2) - } - } - - return nil -} - -func checkRecordAndIndex(txn kv.Transaction, t table.Table, idx *column.IndexedCol) error { - cols := make([]*column.Col, len(idx.Columns)) - for i, col := range idx.Columns { - cols[i] = t.Cols()[col.Offset] - } - - startKey := t.RecordKey(0, nil) - kvIndex := kv.NewKVIndex(t.IndexPrefix(), idx.Name.L, idx.ID, idx.Unique) - filterFunc := func(h1 int64, vals1 []types.Datum, cols []*column.Col) (bool, error) { - isExist, h2, err := kvIndex.Exist(txn, vals1, h1) - if terror.ErrorEqual(err, kv.ErrKeyExists) { - record1 := &RecordData{Handle: h1, Values: vals1} - record2 := &RecordData{Handle: h2, Values: vals1} - return false, errors.Errorf("index:%v != record:%v", record2, record1) - } - if err != nil { - return false, errors.Trace(err) - } - if !isExist { - record := &RecordData{Handle: h1, Values: vals1} - return false, errors.Errorf("index:%v != record:%v", nil, record) - } - - return true, nil - } - err := iterRecords(txn, t, startKey, cols, filterFunc) - - if err != nil { - return errors.Trace(err) - } - - return nil -} - -func scanTableData(retriever kv.Retriever, t table.Table, cols []*column.Col, startHandle, limit int64) ( - []*RecordData, int64, error) { - var records []*RecordData - - startKey := t.RecordKey(startHandle, nil) - filterFunc := func(h int64, d []types.Datum, cols []*column.Col) (bool, error) { - if limit != 0 { - r := &RecordData{ - Handle: h, - Values: d, - } - records = append(records, r) - limit-- - return true, nil - } - - return false, nil - } - err := iterRecords(retriever, t, startKey, cols, filterFunc) - if err != nil { - return nil, 0, errors.Trace(err) - } - - if len(records) == 0 { - return records, startHandle, nil - } - - nextHandle := records[len(records)-1].Handle + 1 - - return records, nextHandle, nil -} - -// ScanTableRecord scans table row handles and column values in a limited number. -// It returns data and the next startHandle until it doesn't have data, then returns data is nil and -// the next startHandle is the handle which can't get data. If startHandle = 0 and limit = -1, -// it returns the table data of the whole. -func ScanTableRecord(retriever kv.Retriever, t table.Table, startHandle, limit int64) ( - []*RecordData, int64, error) { - return scanTableData(retriever, t, t.Cols(), startHandle, limit) -} - -// ScanSnapshotTableRecord scans the ver version of the table data in a limited number. -// It returns data and the next startHandle until it doesn't have data, then returns data is nil and -// the next startHandle is the handle which can't get data. If startHandle = 0 and limit = -1, -// it returns the table data of the whole. -func ScanSnapshotTableRecord(store kv.Storage, ver kv.Version, t table.Table, startHandle, limit int64) ( - []*RecordData, int64, error) { - snap, err := store.GetSnapshot(ver) - if err != nil { - return nil, 0, errors.Trace(err) - } - defer snap.Release() - - records, nextHandle, err := ScanTableRecord(snap, t, startHandle, limit) - - return records, nextHandle, errors.Trace(err) -} - -// CompareTableRecord compares data and the corresponding table data one by one. -// It returns nil if data is equal to the data that scans from table, otherwise -// it returns an error with a different set of records. If exact is false, only compares handle. -func CompareTableRecord(txn kv.Transaction, t table.Table, data []*RecordData, exact bool) error { - m := make(map[int64][]types.Datum, len(data)) - for _, r := range data { - if _, ok := m[r.Handle]; ok { - return errors.Errorf("handle:%d is repeated in data", r.Handle) - } - m[r.Handle] = r.Values - } - - startKey := t.RecordKey(0, nil) - filterFunc := func(h int64, vals []types.Datum, cols []*column.Col) (bool, error) { - vals2, ok := m[h] - if !ok { - record := &RecordData{Handle: h, Values: vals} - return false, errors.Errorf("data:%v != record:%v", nil, record) - } - if !exact { - delete(m, h) - return true, nil - } - - if !reflect.DeepEqual(vals, vals2) { - record1 := &RecordData{Handle: h, Values: vals2} - record2 := &RecordData{Handle: h, Values: vals} - return false, errors.Errorf("data:%v != record:%v", record1, record2) - } - - delete(m, h) - - return true, nil - } - err := iterRecords(txn, t, startKey, t.Cols(), filterFunc) - if err != nil { - return errors.Trace(err) - } - - for h, vals := range m { - record := &RecordData{Handle: h, Values: vals} - return errors.Errorf("data:%v != record:%v", record, nil) - } - - return nil -} - -// GetTableRecordsCount returns the total number of table records from startHandle. -// If startHandle = 0, returns the total number of table records. -func GetTableRecordsCount(txn kv.Transaction, t table.Table, startHandle int64) (int64, error) { - startKey := t.RecordKey(startHandle, nil) - it, err := txn.Seek(startKey) - if err != nil { - return 0, errors.Trace(err) - } - - var cnt int64 - prefix := t.RecordPrefix() - for it.Valid() && it.Key().HasPrefix(prefix) { - handle, err := tables.DecodeRecordKeyHandle(it.Key()) - if err != nil { - return 0, errors.Trace(err) - } - - it.Close() - rk := t.RecordKey(handle+1, nil) - it, err = txn.Seek(rk) - if err != nil { - return 0, errors.Trace(err) - } - - cnt++ - } - - it.Close() - - return cnt, nil -} - -func rowWithCols(txn kv.Retriever, t table.Table, h int64, cols []*column.Col) ([]types.Datum, error) { - v := make([]types.Datum, len(cols)) - for i, col := range cols { - if col.State != model.StatePublic { - return nil, errors.Errorf("Cannot use none public column - %v", cols) - } - if col.IsPKHandleColumn(t.Meta()) { - v[i].SetInt64(h) - continue - } - - k := t.RecordKey(h, col) - data, err := txn.Get(k) - if err != nil { - return nil, errors.Trace(err) - } - - val, err := tables.DecodeValue(data, &col.FieldType) - if err != nil { - return nil, errors.Trace(err) - } - v[i] = val - } - return v, nil -} - -func iterRecords(retriever kv.Retriever, t table.Table, startKey kv.Key, cols []*column.Col, - fn table.RecordIterFunc) error { - it, err := retriever.Seek(startKey) - if err != nil { - return errors.Trace(err) - } - defer it.Close() - - if !it.Valid() { - return nil - } - - log.Debugf("startKey:%q, key:%q, value:%q", startKey, it.Key(), it.Value()) - - prefix := t.RecordPrefix() - for it.Valid() && it.Key().HasPrefix(prefix) { - // first kv pair is row lock information. - // TODO: check valid lock - // get row handle - handle, err := tables.DecodeRecordKeyHandle(it.Key()) - if err != nil { - return errors.Trace(err) - } - - data, err := rowWithCols(retriever, t, handle, cols) - if err != nil { - return errors.Trace(err) - } - more, err := fn(handle, data, cols) - if !more || err != nil { - return errors.Trace(err) - } - - rk := t.RecordKey(handle, nil) - err = kv.NextUntil(it, util.RowKeyPrefixFilter(rk)) - if err != nil { - return errors.Trace(err) - } - } - - return nil -} diff --git a/vendor/github.com/pingcap/tidb/kv/btree_buffer.go b/vendor/github.com/pingcap/tidb/kv/btree_buffer.go deleted file mode 100644 index efa433571..000000000 --- a/vendor/github.com/pingcap/tidb/kv/btree_buffer.go +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Copyright 2015 Wenbin Xiao -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "io" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv/memkv" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/types" -) - -type btreeBuffer struct { - tree *memkv.Tree -} - -// NewBTreeBuffer returns a breeBuffer. -func NewBTreeBuffer() MemBuffer { - return &btreeBuffer{ - tree: memkv.NewTree(types.Collators[true]), - } -} - -// Get returns the value associated with the key; ErrNotExist error if the key does not exist. -func (b *btreeBuffer) Get(k Key) ([]byte, error) { - v, ok := b.tree.Get(toIfaces(k)) - if !ok { - return nil, ErrNotExist - } - return fromIfaces(v), nil -} - -// Set associates the key with the value. -func (b *btreeBuffer) Set(k Key, v []byte) error { - if len(v) == 0 { - return errors.Trace(ErrCannotSetNilValue) - } - b.tree.Set(toIfaces(k), toIfaces(v)) - return nil -} - -// Delete removes the entry from buffer with provided key. -func (b *btreeBuffer) Delete(k Key) error { - b.tree.Set(toIfaces(k), nil) - return nil -} - -// Release clear the whole buffer. -func (b *btreeBuffer) Release() { - b.tree.Clear() -} - -type btreeIter struct { - e *memkv.Enumerator - k Key - v []byte - ok bool -} - -// Seek creates a new Iterator based on the provided key. -func (b *btreeBuffer) Seek(k Key) (Iterator, error) { - var e *memkv.Enumerator - var err error - if k == nil { - e, err = b.tree.SeekFirst() - if err != nil { - if terror.ErrorEqual(err, io.EOF) { - return &btreeIter{ok: false}, nil - } - return &btreeIter{ok: false}, errors.Trace(err) - } - } else { - key := toIfaces([]byte(k)) - e, _ = b.tree.Seek(key) - } - iter := &btreeIter{e: e} - // the initial push... - err = iter.Next() - if err != nil { - return &btreeIter{ok: false}, errors.Trace(err) - } - return iter, nil -} - -// Close implements Iterator Close. -func (i *btreeIter) Close() { - //noop -} - -// Key implements Iterator Key. -func (i *btreeIter) Key() Key { - return i.k -} - -// Value implements Iterator Value. -func (i *btreeIter) Value() []byte { - return i.v -} - -// Next implements Iterator Next. -func (i *btreeIter) Next() error { - k, v, err := i.e.Next() - if err != nil { - i.ok = false - if terror.ErrorEqual(err, io.EOF) { - return nil - } - return errors.Trace(err) - } - i.k, i.v, i.ok = fromIfaces(k), fromIfaces(v), true - return nil -} - -// Valid implements Iterator Valid. -func (i *btreeIter) Valid() bool { - return i.ok -} - -func toIfaces(v []byte) []interface{} { - return []interface{}{v} -} - -func fromIfaces(v []interface{}) []byte { - if v == nil { - return nil - } - return v[0].([]byte) -} diff --git a/vendor/github.com/pingcap/tidb/kv/buffer_store.go b/vendor/github.com/pingcap/tidb/kv/buffer_store.go deleted file mode 100644 index e211aae8d..000000000 --- a/vendor/github.com/pingcap/tidb/kv/buffer_store.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "github.com/juju/errors" -) - -// BufferStore wraps a Retriever for read and a MemBuffer for buffered write. -// Common usage pattern: -// bs := NewBufferStore(r) // use BufferStore to wrap a Retriever -// defer bs.Release() // make sure it will be released -// // ... -// // read/write on bs -// // ... -// bs.SaveTo(m) // save above operations to a Mutator -type BufferStore struct { - MemBuffer - r Retriever -} - -// NewBufferStore creates a BufferStore using r for read. -func NewBufferStore(r Retriever) *BufferStore { - return &BufferStore{ - r: r, - MemBuffer: &lazyMemBuffer{}, - } -} - -// Get implements the Retriever interface. -func (s *BufferStore) Get(k Key) ([]byte, error) { - val, err := s.MemBuffer.Get(k) - if IsErrNotFound(err) { - val, err = s.r.Get(k) - } - if err != nil { - return nil, errors.Trace(err) - } - if len(val) == 0 { - return nil, errors.Trace(ErrNotExist) - } - return val, nil -} - -// Seek implements the Retriever interface. -func (s *BufferStore) Seek(k Key) (Iterator, error) { - bufferIt, err := s.MemBuffer.Seek(k) - if err != nil { - return nil, errors.Trace(err) - } - retrieverIt, err := s.r.Seek(k) - if err != nil { - return nil, errors.Trace(err) - } - return newUnionIter(bufferIt, retrieverIt), nil -} - -// WalkBuffer iterates all buffered kv pairs. -func (s *BufferStore) WalkBuffer(f func(k Key, v []byte) error) error { - iter, err := s.MemBuffer.Seek(nil) - if err != nil { - return errors.Trace(err) - } - defer iter.Close() - for ; iter.Valid(); iter.Next() { - if err := f(iter.Key(), iter.Value()); err != nil { - return errors.Trace(err) - } - } - return nil -} - -// SaveTo saves all buffered kv pairs into a Mutator. -func (s *BufferStore) SaveTo(m Mutator) error { - err := s.WalkBuffer(func(k Key, v []byte) error { - if len(v) == 0 { - return errors.Trace(m.Delete(k)) - } - return errors.Trace(m.Set(k, v)) - }) - return errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/kv/bufpool.go b/vendor/github.com/pingcap/tidb/kv/bufpool.go deleted file mode 100644 index 0e02e1951..000000000 --- a/vendor/github.com/pingcap/tidb/kv/bufpool.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "sync" - - "github.com/ngaut/log" -) - -// A cache holds a set of reusable objects. -// The slice is a stack (LIFO). -// If more are needed, the cache creates them by calling new. -type cache struct { - mu sync.Mutex - name string - saved []MemBuffer - // factory - fact func() MemBuffer -} - -func (c *cache) put(x MemBuffer) { - c.mu.Lock() - if len(c.saved) < cap(c.saved) { - c.saved = append(c.saved, x) - } else { - log.Warnf("%s is full, size: %d, you may need to increase pool size", c.name, len(c.saved)) - } - c.mu.Unlock() -} - -func (c *cache) get() MemBuffer { - c.mu.Lock() - n := len(c.saved) - if n == 0 { - c.mu.Unlock() - return c.fact() - } - x := c.saved[n-1] - c.saved = c.saved[0 : n-1] - c.mu.Unlock() - return x -} - -func newCache(name string, cap int, fact func() MemBuffer) *cache { - return &cache{name: name, saved: make([]MemBuffer, 0, cap), fact: fact} -} diff --git a/vendor/github.com/pingcap/tidb/kv/error.go b/vendor/github.com/pingcap/tidb/kv/error.go deleted file mode 100644 index 831c01c22..000000000 --- a/vendor/github.com/pingcap/tidb/kv/error.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "errors" - "strings" - - "github.com/pingcap/go-themis" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" -) - -// KV error codes. -const ( - CodeIncompatibleDBFormat terror.ErrCode = 1 - CodeNoDataForHandle terror.ErrCode = 2 - CodeKeyExists terror.ErrCode = 3 -) - -var ( - // ErrClosed is used when close an already closed txn. - ErrClosed = errors.New("Error: Transaction already closed") - // ErrNotExist is used when try to get an entry with an unexist key from KV store. - ErrNotExist = errors.New("Error: key not exist") - // ErrConditionNotMatch is used when condition is not met. - ErrConditionNotMatch = errors.New("Error: Condition not match") - // ErrLockConflict is used when try to lock an already locked key. - ErrLockConflict = errors.New("Error: Lock conflict") - // ErrLazyConditionPairsNotMatch is used when value in store differs from expect pairs. - ErrLazyConditionPairsNotMatch = errors.New("Error: Lazy condition pairs not match") - // ErrRetryable is used when KV store occurs RPC error or some other - // errors which SQL layer can safely retry. - ErrRetryable = errors.New("Error: KV error safe to retry") - // ErrCannotSetNilValue is the error when sets an empty value. - ErrCannotSetNilValue = errors.New("can not set nil value") - // ErrInvalidTxn is the error when commits or rollbacks in an invalid transaction. - ErrInvalidTxn = errors.New("invalid transaction") - - // ErrNotCommitted is the error returned by CommitVersion when this - // transaction is not committed. - ErrNotCommitted = errors.New("this transaction has not committed") - - // ErrKeyExists returns when key is already exist. - ErrKeyExists = terror.ClassKV.New(CodeKeyExists, "key already exist") -) - -func init() { - kvMySQLErrCodes := map[terror.ErrCode]uint16{ - CodeKeyExists: mysql.ErrDupEntry, - } - terror.ErrClassToMySQLCodes[terror.ClassKV] = kvMySQLErrCodes -} - -// IsRetryableError checks if the err is a fatal error and the under going operation is worth to retry. -func IsRetryableError(err error) bool { - if err == nil { - return false - } - - if terror.ErrorEqual(err, ErrRetryable) || - terror.ErrorEqual(err, ErrLockConflict) || - terror.ErrorEqual(err, ErrConditionNotMatch) || - terror.ErrorEqual(err, themis.ErrRetryable) || - // HBase exception message will tell you if you should retry or not - strings.Contains(err.Error(), "try again later") { - return true - } - - return false -} - -// IsErrNotFound checks if err is a kind of NotFound error. -func IsErrNotFound(err error) bool { - if terror.ErrorEqual(err, ErrNotExist) { - return true - } - - return false -} diff --git a/vendor/github.com/pingcap/tidb/kv/index_iter.go b/vendor/github.com/pingcap/tidb/kv/index_iter.go deleted file mode 100644 index 50884ddc9..000000000 --- a/vendor/github.com/pingcap/tidb/kv/index_iter.go +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "bytes" - "encoding/binary" - "io" - - "github.com/juju/errors" - "github.com/pingcap/tidb/util/codec" - "github.com/pingcap/tidb/util/types" -) - -var ( - _ Index = (*kvIndex)(nil) - _ IndexIterator = (*indexIter)(nil) -) - -// IndexIterator is the interface for iterator of index data on KV store. -type IndexIterator interface { - Next() (k []types.Datum, h int64, err error) - Close() -} - -// Index is the interface for index data on KV store. -type Index interface { - // Create supports insert into statement. - Create(rm RetrieverMutator, indexedValues []types.Datum, h int64) error - // Delete supports delete from statement. - Delete(m Mutator, indexedValues []types.Datum, h int64) error - // Drop supports drop table, drop index statements. - Drop(rm RetrieverMutator) error - // Exist supports check index exists or not. - Exist(rm RetrieverMutator, indexedValues []types.Datum, h int64) (bool, int64, error) - // GenIndexKey generates an index key. - GenIndexKey(indexedValues []types.Datum, h int64) (key []byte, distinct bool, err error) - // Seek supports where clause. - Seek(r Retriever, indexedValues []types.Datum) (iter IndexIterator, hit bool, err error) - // SeekFirst supports aggregate min and ascend order by. - SeekFirst(r Retriever) (iter IndexIterator, err error) -} - -func encodeHandle(h int64) []byte { - buf := &bytes.Buffer{} - err := binary.Write(buf, binary.BigEndian, h) - if err != nil { - panic(err) - } - return buf.Bytes() -} - -func decodeHandle(data []byte) (int64, error) { - var h int64 - buf := bytes.NewBuffer(data) - err := binary.Read(buf, binary.BigEndian, &h) - return h, errors.Trace(err) -} - -// indexIter is for KV store index iterator. -type indexIter struct { - it Iterator - idx *kvIndex - prefix Key -} - -// Close does the clean up works when KV store index iterator is closed. -func (c *indexIter) Close() { - if c.it != nil { - c.it.Close() - c.it = nil - } -} - -// Next returns current key and moves iterator to the next step. -func (c *indexIter) Next() (val []types.Datum, h int64, err error) { - if !c.it.Valid() { - return nil, 0, errors.Trace(io.EOF) - } - if !c.it.Key().HasPrefix(c.prefix) { - return nil, 0, errors.Trace(io.EOF) - } - // get indexedValues - buf := c.it.Key()[len(c.prefix):] - vv, err := codec.Decode(buf) - if err != nil { - return nil, 0, errors.Trace(err) - } - // if index is *not* unique, the handle is in keybuf - if !c.idx.unique { - h = vv[len(vv)-1].GetInt64() - val = vv[0 : len(vv)-1] - } else { - // otherwise handle is value - h, err = decodeHandle(c.it.Value()) - if err != nil { - return nil, 0, errors.Trace(err) - } - val = vv - } - // update new iter to next - err = c.it.Next() - if err != nil { - return nil, 0, errors.Trace(err) - } - return -} - -// kvIndex is the data structure for index data in the KV store. -type kvIndex struct { - indexName string - indexID int64 - unique bool - prefix Key -} - -// GenIndexPrefix generates the index prefix. -func GenIndexPrefix(indexPrefix Key, indexID int64) Key { - buf := make([]byte, 0, len(indexPrefix)+8) - buf = append(buf, indexPrefix...) - buf = codec.EncodeInt(buf, indexID) - return buf -} - -// NewKVIndex builds a new kvIndex object. -func NewKVIndex(indexPrefix Key, indexName string, indexID int64, unique bool) Index { - index := &kvIndex{ - indexName: indexName, - indexID: indexID, - unique: unique, - prefix: GenIndexPrefix(indexPrefix, indexID), - } - - return index -} - -// GenIndexKey generates storage key for index values. Returned distinct indicates whether the -// indexed values should be distinct in storage (i.e. whether handle is encoded in the key). -func (c *kvIndex) GenIndexKey(indexedValues []types.Datum, h int64) (key []byte, distinct bool, err error) { - if c.unique { - // See: https://dev.mysql.com/doc/refman/5.7/en/create-index.html - // A UNIQUE index creates a constraint such that all values in the index must be distinct. - // An error occurs if you try to add a new row with a key value that matches an existing row. - // For all engines, a UNIQUE index permits multiple NULL values for columns that can contain NULL. - distinct = true - for _, cv := range indexedValues { - if cv.Kind() == types.KindNull { - distinct = false - break - } - } - } - - key = append(key, c.prefix...) - if distinct { - key, err = codec.EncodeKey(key, indexedValues...) - } else { - key, err = codec.EncodeKey(key, append(indexedValues, types.NewDatum(h))...) - } - if err != nil { - return nil, false, errors.Trace(err) - } - return -} - -// Create creates a new entry in the kvIndex data. -// If the index is unique and there is an existing entry with the same key, Create will return ErrKeyExists. -func (c *kvIndex) Create(rm RetrieverMutator, indexedValues []types.Datum, h int64) error { - key, distinct, err := c.GenIndexKey(indexedValues, h) - if err != nil { - return errors.Trace(err) - } - if !distinct { - // TODO: reconsider value - err = rm.Set(key, []byte("timestamp?")) - return errors.Trace(err) - } - - _, err = rm.Get(key) - if IsErrNotFound(err) { - err = rm.Set(key, encodeHandle(h)) - return errors.Trace(err) - } - - return errors.Trace(ErrKeyExists) -} - -// Delete removes the entry for handle h and indexdValues from KV index. -func (c *kvIndex) Delete(m Mutator, indexedValues []types.Datum, h int64) error { - key, _, err := c.GenIndexKey(indexedValues, h) - if err != nil { - return errors.Trace(err) - } - err = m.Delete(key) - return errors.Trace(err) -} - -// Drop removes the KV index from store. -func (c *kvIndex) Drop(rm RetrieverMutator) error { - it, err := rm.Seek(c.prefix) - if err != nil { - return errors.Trace(err) - } - defer it.Close() - - // remove all indices - for it.Valid() { - if !it.Key().HasPrefix(c.prefix) { - break - } - err := rm.Delete(it.Key()) - if err != nil { - return errors.Trace(err) - } - err = it.Next() - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -// Seek searches KV index for the entry with indexedValues. -func (c *kvIndex) Seek(r Retriever, indexedValues []types.Datum) (iter IndexIterator, hit bool, err error) { - key, _, err := c.GenIndexKey(indexedValues, 0) - if err != nil { - return nil, false, errors.Trace(err) - } - it, err := r.Seek(key) - if err != nil { - return nil, false, errors.Trace(err) - } - // check if hit - hit = false - if it.Valid() && it.Key().Cmp(key) == 0 { - hit = true - } - return &indexIter{it: it, idx: c, prefix: c.prefix}, hit, nil -} - -// SeekFirst returns an iterator which points to the first entry of the KV index. -func (c *kvIndex) SeekFirst(r Retriever) (iter IndexIterator, err error) { - it, err := r.Seek(c.prefix) - if err != nil { - return nil, errors.Trace(err) - } - return &indexIter{it: it, idx: c, prefix: c.prefix}, nil -} - -func (c *kvIndex) Exist(rm RetrieverMutator, indexedValues []types.Datum, h int64) (bool, int64, error) { - key, distinct, err := c.GenIndexKey(indexedValues, h) - if err != nil { - return false, 0, errors.Trace(err) - } - - value, err := rm.Get(key) - if IsErrNotFound(err) { - return false, 0, nil - } - if err != nil { - return false, 0, errors.Trace(err) - } - - // For distinct index, the value of key is handle. - if distinct { - handle, err := decodeHandle(value) - if err != nil { - return false, 0, errors.Trace(err) - } - - if handle != h { - return true, handle, errors.Trace(ErrKeyExists) - } - - return true, handle, nil - } - - return true, h, nil -} diff --git a/vendor/github.com/pingcap/tidb/kv/iter.go b/vendor/github.com/pingcap/tidb/kv/iter.go deleted file mode 100644 index 2c337be3c..000000000 --- a/vendor/github.com/pingcap/tidb/kv/iter.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import "github.com/juju/errors" - -// NextUntil applies FnKeyCmp to each entry of the iterator until meets some condition. -// It will stop when fn returns true, or iterator is invalid or an error occurs. -func NextUntil(it Iterator, fn FnKeyCmp) error { - var err error - for it.Valid() && !fn(it.Key()) { - err = it.Next() - if err != nil { - return errors.Trace(err) - } - } - return nil -} diff --git a/vendor/github.com/pingcap/tidb/kv/key.go b/vendor/github.com/pingcap/tidb/kv/key.go deleted file mode 100644 index fed902ff2..000000000 --- a/vendor/github.com/pingcap/tidb/kv/key.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import "bytes" - -// Key represents high-level Key type. -type Key []byte - -// Next returns the next key in byte-order. -func (k Key) Next() Key { - // add 0x0 to the end of key - buf := make([]byte, len([]byte(k))+1) - copy(buf, []byte(k)) - return buf -} - -// Cmp returns the comparison result of two key. -// The result will be 0 if a==b, -1 if a < b, and +1 if a > b. -func (k Key) Cmp(another Key) int { - return bytes.Compare(k, another) -} - -// HasPrefix tests whether the Key begins with prefix. -func (k Key) HasPrefix(prefix Key) bool { - return bytes.HasPrefix(k, prefix) -} - -// Clone returns a copy of the Key. -func (k Key) Clone() Key { - return append([]byte(nil), k...) -} - -// EncodedKey represents encoded key in low-level storage engine. -type EncodedKey []byte - -// Cmp returns the comparison result of two key. -// The result will be 0 if a==b, -1 if a < b, and +1 if a > b. -func (k EncodedKey) Cmp(another EncodedKey) int { - return bytes.Compare(k, another) -} - -// Next returns the next key in byte-order. -func (k EncodedKey) Next() EncodedKey { - return EncodedKey(bytes.Join([][]byte{k, Key{0}}, nil)) -} diff --git a/vendor/github.com/pingcap/tidb/kv/kv.go b/vendor/github.com/pingcap/tidb/kv/kv.go deleted file mode 100644 index fb75e4944..000000000 --- a/vendor/github.com/pingcap/tidb/kv/kv.go +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import "io" - -const ( - // PresumeKeyNotExists directives that when dealing with a Get operation but failing to read data from cache, - // we presume that the key does not exist in Store. The actual existence will be checked before the - // transaction's commit. - // This option is an optimization for frequent checks during a transaction, e.g. batch inserts. - PresumeKeyNotExists Option = iota + 1 - // PresumeKeyNotExistsError is the option key for error. - // When PresumeKeyNotExists is set and condition is not match, should throw the error. - PresumeKeyNotExistsError -) - -// Retriever is the interface wraps the basic Get and Seek methods. -type Retriever interface { - // Get gets the value for key k from kv store. - // If corresponding kv pair does not exist, it returns nil and ErrNotExist. - Get(k Key) ([]byte, error) - // Seek creates an Iterator positioned on the first entry that k <= entry's key. - // If such entry is not found, it returns an invalid Iterator with no error. - // The Iterator must be Closed after use. - Seek(k Key) (Iterator, error) -} - -// Mutator is the interface wraps the basic Set and Delete methods. -type Mutator interface { - // Set sets the value for key k as v into kv store. - // v must NOT be nil or empty, otherwise it returns ErrCannotSetNilValue. - Set(k Key, v []byte) error - // Delete removes the entry for key k from kv store. - Delete(k Key) error -} - -// RetrieverMutator is the interface that groups Retriever and Mutator interfaces. -type RetrieverMutator interface { - Retriever - Mutator -} - -// MemBuffer is an in-memory kv collection. It should be released after use. -type MemBuffer interface { - RetrieverMutator - // Release releases the buffer. - Release() -} - -// Transaction defines the interface for operations inside a Transaction. -// This is not thread safe. -type Transaction interface { - RetrieverMutator - // Commit commits the transaction operations to KV store. - Commit() error - // Rollback undoes the transaction operations to KV store. - Rollback() error - // String implements fmt.Stringer interface. - String() string - // LockKeys tries to lock the entries with the keys in KV store. - LockKeys(keys ...Key) error - // SetOption sets an option with a value, when val is nil, uses the default - // value of this option. - SetOption(opt Option, val interface{}) - // DelOption deletes an option. - DelOption(opt Option) - // IsReadOnly checks if the transaction has only performed read operations. - IsReadOnly() bool - // GetClient gets a client instance. - GetClient() Client - // StartTS returns the transaction start timestamp. - StartTS() int64 -} - -// Client is used to send request to KV layer. -type Client interface { - // Send sends request to KV layer, returns a Response. - Send(req *Request) Response - - // SupportRequestType checks if reqType and subType is supported. - SupportRequestType(reqType, subType int64) bool -} - -// ReqTypes. -const ( - ReqTypeSelect = 101 - ReqTypeIndex = 102 -) - -// KeyRange represents a range where StartKey <= key < EndKey. -type KeyRange struct { - StartKey Key - EndKey Key -} - -// Request represents a kv request. -type Request struct { - // The request type. - Tp int64 - Data []byte - // Key Ranges - KeyRanges []KeyRange - // If desc is true, the request is sent in descending order. - Desc bool - // If concurrency is 1, it only sends the request to a single storage unit when - // ResponseIterator.Next is called. If concurrency is greater than 1, the request will be - // sent to multiple storage units concurrently. - Concurrency int -} - -// Response represents the response returned from KV layer. -type Response interface { - // Next returns a resultSubset from a single storage unit. - // When full result set is returned, nil is returned. - Next() (resultSubset io.ReadCloser, err error) -} - -// Snapshot defines the interface for the snapshot fetched from KV store. -type Snapshot interface { - Retriever - // BatchGet gets a batch of values from snapshot. - BatchGet(keys []Key) (map[string][]byte, error) - // Release releases the snapshot to store. - Release() -} - -// Driver is the interface that must be implemented by a KV storage. -type Driver interface { - // Open returns a new Storage. - // The path is the string for storage specific format. - Open(path string) (Storage, error) -} - -// Storage defines the interface for storage. -// Isolation should be at least SI(SNAPSHOT ISOLATION) -type Storage interface { - // Begin transaction - Begin() (Transaction, error) - // GetSnapshot gets a snapshot that is able to read any data which data is <= ver. - // if ver is MaxVersion or > current max committed version, we will use current version for this snapshot. - GetSnapshot(ver Version) (Snapshot, error) - // Close store - Close() error - // Storage's unique ID - UUID() string - // CurrentVersion returns current max committed version. - CurrentVersion() (Version, error) -} - -// FnKeyCmp is the function for iterator the keys -type FnKeyCmp func(key Key) bool - -// Iterator is the interface for a iterator on KV store. -type Iterator interface { - Valid() bool - Key() Key - Value() []byte - Next() error - Close() -} diff --git a/vendor/github.com/pingcap/tidb/kv/memdb_buffer.go b/vendor/github.com/pingcap/tidb/kv/memdb_buffer.go deleted file mode 100644 index 82c897ee4..000000000 --- a/vendor/github.com/pingcap/tidb/kv/memdb_buffer.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Copyright 2015 Wenbin Xiao -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/terror" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/comparer" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/memdb" - "github.com/syndtr/goleveldb/leveldb/util" -) - -type memDbBuffer struct { - db *memdb.DB -} - -type memDbIter struct { - iter iterator.Iterator -} - -// NewMemDbBuffer creates a new memDbBuffer. -func NewMemDbBuffer() MemBuffer { - return &memDbBuffer{db: memdb.New(comparer.DefaultComparer, 4*1024)} -} - -// Seek creates an Iterator. -func (m *memDbBuffer) Seek(k Key) (Iterator, error) { - var i Iterator - if k == nil { - i = &memDbIter{iter: m.db.NewIterator(&util.Range{})} - } else { - i = &memDbIter{iter: m.db.NewIterator(&util.Range{Start: []byte(k)})} - } - i.Next() - return i, nil -} - -// Get returns the value associated with key. -func (m *memDbBuffer) Get(k Key) ([]byte, error) { - v, err := m.db.Get(k) - if terror.ErrorEqual(err, leveldb.ErrNotFound) { - return nil, ErrNotExist - } - return v, nil -} - -// Set associates key with value. -func (m *memDbBuffer) Set(k Key, v []byte) error { - if len(v) == 0 { - return errors.Trace(ErrCannotSetNilValue) - } - err := m.db.Put(k, v) - return errors.Trace(err) -} - -// Delete removes the entry from buffer with provided key. -func (m *memDbBuffer) Delete(k Key) error { - err := m.db.Put(k, nil) - return errors.Trace(err) -} - -// Release reset the buffer. -func (m *memDbBuffer) Release() { - m.db.Reset() -} - -// Next implements the Iterator Next. -func (i *memDbIter) Next() error { - i.iter.Next() - return nil -} - -// Valid implements the Iterator Valid. -func (i *memDbIter) Valid() bool { - return i.iter.Valid() -} - -// Key implements the Iterator Key. -func (i *memDbIter) Key() Key { - return i.iter.Key() -} - -// Value implements the Iterator Value. -func (i *memDbIter) Value() []byte { - return i.iter.Value() -} - -// Close Implements the Iterator Close. -func (i *memDbIter) Close() { - i.iter.Release() -} diff --git a/vendor/github.com/pingcap/tidb/kv/memkv/btree.go b/vendor/github.com/pingcap/tidb/kv/memkv/btree.go deleted file mode 100644 index 34e249162..000000000 --- a/vendor/github.com/pingcap/tidb/kv/memkv/btree.go +++ /dev/null @@ -1,739 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package memkv - -import ( - "io" -) - -const ( - kx = 128 //DONE benchmark tune this number if using custom key/value type(s). - kd = 64 //DONE benchmark tune this number if using custom key/value type(s). -) - -type ( - // cmp compares a and b. Return value is: - // - // < 0 if a < b - // 0 if a == b - // > 0 if a > b - // - cmp func(a, b []interface{}) int - - d struct { // data page - c int - d [2*kd + 1]de - n *d - p *d - } - - de struct { // d element - k []interface{} - v []interface{} - } - - // Enumerator is the iterator for btree - Enumerator struct { - err error - hit bool - i int - k []interface{} - q *d - t *Tree - ver int64 - } - - // Tree is a B+tree. - Tree struct { - c int - cmp cmp - first *d - last *d - r interface{} - ver int64 - } - - xe struct { // x element - ch interface{} - sep *d - } - - x struct { // index page - c int - x [2*kx + 2]xe - } -) - -var ( // R/O zero values - zd d - zde de - zx x - zxe xe -) - -func clr(q interface{}) { - switch z := q.(type) { - case *x: - for i := 0; i <= z.c; i++ { // Ch0 Sep0 ... Chn-1 Sepn-1 Chn - clr(z.x[i].ch) - } - *z = zx // GC - case *d: - *z = zd // GC - } -} - -// -------------------------------------------------------------------------- x - -func newX(ch0 interface{}) *x { - r := &x{} - r.x[0].ch = ch0 - return r -} - -func (q *x) extract(i int) { - q.c-- - if i < q.c { - copy(q.x[i:], q.x[i+1:q.c+1]) - q.x[q.c].ch = q.x[q.c+1].ch - q.x[q.c].sep = nil // GC - q.x[q.c+1] = zxe // GC - } -} - -func (q *x) insert(i int, d *d, ch interface{}) *x { - c := q.c - if i < c { - q.x[c+1].ch = q.x[c].ch - copy(q.x[i+2:], q.x[i+1:c]) - q.x[i+1].sep = q.x[i].sep - } - c++ - q.c = c - q.x[i].sep = d - q.x[i+1].ch = ch - return q -} - -func (q *x) siblings(i int) (l, r *d) { - if i >= 0 { - if i > 0 { - l = q.x[i-1].ch.(*d) - } - if i < q.c { - r = q.x[i+1].ch.(*d) - } - } - return -} - -// -------------------------------------------------------------------------- d - -func (l *d) mvL(r *d, c int) { - copy(l.d[l.c:], r.d[:c]) - copy(r.d[:], r.d[c:r.c]) - l.c += c - r.c -= c -} - -func (l *d) mvR(r *d, c int) { - copy(r.d[c:], r.d[:r.c]) - copy(r.d[:c], l.d[l.c-c:]) - r.c += c - l.c -= c -} - -// ----------------------------------------------------------------------- tree - -// NewTree returns a newly created, empty tree. The compare function is used -// for key collation. -func NewTree(cmp cmp) *Tree { - return &Tree{cmp: cmp} -} - -// Clear removes all K/V pairs from the tree. -func (t *Tree) Clear() { - if t.r == nil { - return - } - - clr(t.r) - t.c, t.first, t.last, t.r = 0, nil, nil, nil - t.ver++ -} - -func (t *Tree) cat(p *x, q, r *d, pi int) { - t.ver++ - q.mvL(r, r.c) - if r.n != nil { - r.n.p = q - } else { - t.last = q - } - q.n = r.n - if p.c > 1 { - p.extract(pi) - p.x[pi].ch = q - } else { - t.r = q - } -} - -func (t *Tree) catX(p, q, r *x, pi int) { - t.ver++ - q.x[q.c].sep = p.x[pi].sep - copy(q.x[q.c+1:], r.x[:r.c]) - q.c += r.c + 1 - q.x[q.c].ch = r.x[r.c].ch - if p.c > 1 { - p.c-- - pc := p.c - if pi < pc { - p.x[pi].sep = p.x[pi+1].sep - copy(p.x[pi+1:], p.x[pi+2:pc+1]) - p.x[pc].ch = p.x[pc+1].ch - p.x[pc].sep = nil // GC - p.x[pc+1].ch = nil // GC - } - return - } - - t.r = q -} - -//Delete removes the k's KV pair, if it exists, in which case Delete returns -//true. -func (t *Tree) Delete(k []interface{}) (ok bool) { - pi := -1 - var p *x - q := t.r - if q == nil { - return - } - - for { - var i int - i, ok = t.find(q, k) - if ok { - switch z := q.(type) { - case *x: - dp := z.x[i].sep - switch { - case dp.c > kd: - t.extract(dp, 0) - default: - if z.c < kx && q != t.r { - t.underflowX(p, &z, pi, &i) - } - pi = i + 1 - p = z - q = z.x[pi].ch - ok = false - continue - } - case *d: - t.extract(z, i) - if z.c >= kd { - return - } - - if q != t.r { - t.underflow(p, z, pi) - } else if t.c == 0 { - t.Clear() - } - } - return - } - - switch z := q.(type) { - case *x: - if z.c < kx && q != t.r { - t.underflowX(p, &z, pi, &i) - } - pi = i - p = z - q = z.x[i].ch - case *d: - return - } - } -} - -func (t *Tree) extract(q *d, i int) { // (r []interface{}) { - t.ver++ - //r = q.d[i].v // prepared for Extract - q.c-- - if i < q.c { - copy(q.d[i:], q.d[i+1:q.c+1]) - } - q.d[q.c] = zde // GC - t.c-- - return -} - -func (t *Tree) find(q interface{}, k []interface{}) (i int, ok bool) { - var mk []interface{} - l := 0 - switch z := q.(type) { - case *x: - h := z.c - 1 - for l <= h { - m := (l + h) >> 1 - mk = z.x[m].sep.d[0].k - switch cmp := t.cmp(k, mk); { - case cmp > 0: - l = m + 1 - case cmp == 0: - return m, true - default: - h = m - 1 - } - } - case *d: - h := z.c - 1 - for l <= h { - m := (l + h) >> 1 - mk = z.d[m].k - switch cmp := t.cmp(k, mk); { - case cmp > 0: - l = m + 1 - case cmp == 0: - return m, true - default: - h = m - 1 - } - } - } - return l, false -} - -// First returns the first item of the tree in the key collating order, or -// (nil, nil) if the tree is empty. -func (t *Tree) First() (k []interface{}, v []interface{}) { - if q := t.first; q != nil { - q := &q.d[0] - k, v = q.k, q.v - } - return -} - -// Get returns the value associated with k and true if it exists. Otherwise Get -// returns (nil, false). -func (t *Tree) Get(k []interface{}) (v []interface{}, ok bool) { - q := t.r - if q == nil { - return - } - - for { - var i int - if i, ok = t.find(q, k); ok { - switch z := q.(type) { - case *x: - return z.x[i].sep.d[0].v, true - case *d: - return z.d[i].v, true - } - } - switch z := q.(type) { - case *x: - q = z.x[i].ch - default: - return - } - } -} - -func (t *Tree) insert(q *d, i int, k []interface{}, v []interface{}) *d { - t.ver++ - c := q.c - if i < c { - copy(q.d[i+1:], q.d[i:c]) - } - c++ - q.c = c - q.d[i].k, q.d[i].v = k, v - t.c++ - return q -} - -// Last returns the last item of the tree in the key collating order, or (nil, -// nil) if the tree is empty. -func (t *Tree) Last() (k []interface{}, v []interface{}) { - if q := t.last; q != nil { - q := &q.d[q.c-1] - k, v = q.k, q.v - } - return -} - -// Len returns the number of items in the tree. -func (t *Tree) Len() int { - return t.c -} - -func (t *Tree) overflow(p *x, q *d, pi, i int, k []interface{}, v []interface{}) { - t.ver++ - l, r := p.siblings(pi) - - if l != nil && l.c < 2*kd { - l.mvL(q, 1) - t.insert(q, i-1, k, v) - return - } - - if r != nil && r.c < 2*kd { - if i < 2*kd { - q.mvR(r, 1) - t.insert(q, i, k, v) - } else { - t.insert(r, 0, k, v) - } - return - } - - t.split(p, q, pi, i, k, v) -} - -// Seek returns an Enumerator positioned on a an item such that k >= item's -// key. ok reports if k == item.key The Enumerator's position is possibly -// after the last item in the tree. -func (t *Tree) Seek(k []interface{}) (e *Enumerator, ok bool) { - q := t.r - if q == nil { - e = &Enumerator{nil, false, 0, k, nil, t, t.ver} - return - } - - for { - var i int - if i, ok = t.find(q, k); ok { - switch z := q.(type) { - case *x: - e = &Enumerator{nil, ok, 0, k, z.x[i].sep, t, t.ver} - return - case *d: - e = &Enumerator{nil, ok, i, k, z, t, t.ver} - return - } - } - switch z := q.(type) { - case *x: - q = z.x[i].ch - case *d: - e = &Enumerator{nil, ok, i, k, z, t, t.ver} - return - } - } -} - -// SeekFirst returns an Enumerator positioned on the first KV pair in the tree, -// if any. For an empty tree, err == io.EOF is returned and e will be nil. -func (t *Tree) SeekFirst() (e *Enumerator, err error) { - q := t.first - if q == nil { - return nil, io.EOF - } - - return &Enumerator{nil, true, 0, q.d[0].k, q, t, t.ver}, nil -} - -// SeekLast returns an Enumerator positioned on the last KV pair in the tree, -// if any. For an empty tree, err == io.EOF is returned and e will be nil. -func (t *Tree) SeekLast() (e *Enumerator, err error) { - q := t.last - if q == nil { - return nil, io.EOF - } - - return &Enumerator{nil, true, q.c - 1, q.d[q.c-1].k, q, t, t.ver}, nil -} - -// Set sets the value associated with k. -func (t *Tree) Set(k []interface{}, v []interface{}) { - pi := -1 - var p *x - q := t.r - if q != nil { - for { - i, ok := t.find(q, k) - if ok { - switch z := q.(type) { - case *x: - z.x[i].sep.d[0].v = v - case *d: - z.d[i].v = v - } - return - } - - switch z := q.(type) { - case *x: - if z.c > 2*kx { - t.splitX(p, &z, pi, &i) - } - pi = i - p = z - q = z.x[i].ch - case *d: - switch { - case z.c < 2*kd: - t.insert(z, i, k, v) - default: - t.overflow(p, z, pi, i, k, v) - } - return - } - } - } - - z := t.insert(&d{}, 0, k, v) - t.r, t.first, t.last = z, z, z - return -} - -func (t *Tree) split(p *x, q *d, pi, i int, k []interface{}, v []interface{}) { - t.ver++ - r := &d{} - if q.n != nil { - r.n = q.n - r.n.p = r - } else { - t.last = r - } - q.n = r - r.p = q - - copy(r.d[:], q.d[kd:2*kd]) - for i := range q.d[kd:] { - q.d[kd+i] = zde - } - q.c = kd - r.c = kd - if pi >= 0 { - p.insert(pi, r, r) - } else { - t.r = newX(q).insert(0, r, r) - } - if i > kd { - t.insert(r, i-kd, k, v) - return - } - - t.insert(q, i, k, v) -} - -func (t *Tree) splitX(p *x, pp **x, pi int, i *int) { - t.ver++ - q := *pp - r := &x{} - copy(r.x[:], q.x[kx+1:]) - q.c = kx - r.c = kx - if pi >= 0 { - p.insert(pi, q.x[kx].sep, r) - } else { - t.r = newX(q).insert(0, q.x[kx].sep, r) - } - q.x[kx].sep = nil - for i := range q.x[kx+1:] { - q.x[kx+i+1] = zxe - } - if *i > kx { - *pp = r - *i -= kx + 1 - } -} - -func (t *Tree) underflow(p *x, q *d, pi int) { - t.ver++ - l, r := p.siblings(pi) - - if l != nil && l.c+q.c >= 2*kd { - l.mvR(q, 1) - } else if r != nil && q.c+r.c >= 2*kd { - q.mvL(r, 1) - r.d[r.c] = zde // GC - } else if l != nil { - t.cat(p, l, q, pi-1) - } else { - t.cat(p, q, r, pi) - } -} - -func (t *Tree) underflowX(p *x, pp **x, pi int, i *int) { - t.ver++ - var l, r *x - q := *pp - - if pi >= 0 { - if pi > 0 { - l = p.x[pi-1].ch.(*x) - } - if pi < p.c { - r = p.x[pi+1].ch.(*x) - } - } - - if l != nil && l.c > kx { - q.x[q.c+1].ch = q.x[q.c].ch - copy(q.x[1:], q.x[:q.c]) - q.x[0].ch = l.x[l.c].ch - q.x[0].sep = p.x[pi-1].sep - q.c++ - *i++ - l.c-- - p.x[pi-1].sep = l.x[l.c].sep - return - } - - if r != nil && r.c > kx { - q.x[q.c].sep = p.x[pi].sep - q.c++ - q.x[q.c].ch = r.x[0].ch - p.x[pi].sep = r.x[0].sep - copy(r.x[:], r.x[1:r.c]) - r.c-- - rc := r.c - r.x[rc].ch = r.x[rc+1].ch - r.x[rc].sep = nil - r.x[rc+1].ch = nil - return - } - - if l != nil { - *i += l.c + 1 - t.catX(p, l, q, pi-1) - *pp = l - return - } - - t.catX(p, q, r, pi) -} - -// ----------------------------------------------------------------- Enumerator - -// Next returns the currently enumerated item, if it exists and moves to the -// next item in the key collation order. If there is no item to return, err == -// io.EOF is returned. -func (e *Enumerator) Next() (k []interface{}, v []interface{}, err error) { - if err = e.err; err != nil { - return - } - - if e.ver != e.t.ver { - f, hit := e.t.Seek(e.k) - if !e.hit && hit { - if err = f.next(); err != nil { - return - } - } - - *e = *f - } - if e.q == nil { - e.err, err = io.EOF, io.EOF - return - } - - if e.i >= e.q.c { - if err = e.next(); err != nil { - return - } - } - - i := e.q.d[e.i] - k, v = i.k, i.v - e.k, e.hit = k, false - e.next() - return -} - -func (e *Enumerator) next() error { - if e.q == nil { - e.err = io.EOF - return io.EOF - } - - switch { - case e.i < e.q.c-1: - e.i++ - default: - if e.q, e.i = e.q.n, 0; e.q == nil { - e.err = io.EOF - } - } - return e.err -} - -// Prev returns the currently enumerated item, if it exists and moves to the -// previous item in the key collation order. If there is no item to return, err -// == io.EOF is returned. -func (e *Enumerator) Prev() (k []interface{}, v []interface{}, err error) { - if err = e.err; err != nil { - return - } - - if e.ver != e.t.ver { - f, hit := e.t.Seek(e.k) - if !e.hit && hit { - if err = f.prev(); err != nil { - return - } - } - - *e = *f - } - if e.q == nil { - e.err, err = io.EOF, io.EOF - return - } - - if e.i >= e.q.c { - if err = e.next(); err != nil { - return - } - } - - i := e.q.d[e.i] - k, v = i.k, i.v - e.k, e.hit = k, false - e.prev() - return -} - -func (e *Enumerator) prev() error { - if e.q == nil { - e.err = io.EOF - return io.EOF - } - - switch { - case e.i > 0: - e.i-- - default: - if e.q = e.q.p; e.q == nil { - e.err = io.EOF - break - } - - e.i = e.q.c - 1 - } - return e.err -} diff --git a/vendor/github.com/pingcap/tidb/kv/memkv/temp.go b/vendor/github.com/pingcap/tidb/kv/memkv/temp.go deleted file mode 100644 index 01e9d43d0..000000000 --- a/vendor/github.com/pingcap/tidb/kv/memkv/temp.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package memkv - -import ( - "github.com/pingcap/tidb/util/types" -) - -type btreeIterator interface { - Next() (k, v []interface{}, err error) -} - -// Temp is the interface of a memory kv storage -type Temp interface { - Drop() (err error) - Get(k []interface{}) (v []interface{}, err error) - SeekFirst() (e btreeIterator, err error) - Set(k, v []interface{}) (err error) -} - -// memtemp for join/groupby or any aggregation operation -type memTemp struct { - // memory btree - tree *Tree -} - -// CreateTemp returns a new empty memory kv -func CreateTemp(asc bool) (_ Temp, err error) { - return &memTemp{ - tree: NewTree(types.Collators[asc]), - }, nil -} - -func (t *memTemp) Get(k []interface{}) (v []interface{}, err error) { - v, _ = t.tree.Get(k) - return -} - -func (t *memTemp) Drop() (err error) { return } - -func (t *memTemp) Set(k, v []interface{}) (err error) { - vv, err := types.Clone(v) - if err != nil { - return err - } - t.tree.Set(append([]interface{}(nil), k...), vv.([]interface{})) - return -} - -func (t *memTemp) SeekFirst() (e btreeIterator, err error) { - it, err := t.tree.SeekFirst() - if err != nil { - return - } - - return it, nil -} diff --git a/vendor/github.com/pingcap/tidb/kv/txn.go b/vendor/github.com/pingcap/tidb/kv/txn.go deleted file mode 100644 index 18515380b..000000000 --- a/vendor/github.com/pingcap/tidb/kv/txn.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "math" - "math/rand" - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" -) - -// RunInNewTxn will run the f in a new transaction environment. -func RunInNewTxn(store Storage, retryable bool, f func(txn Transaction) error) error { - for i := 0; i < maxRetryCnt; i++ { - txn, err := store.Begin() - if err != nil { - log.Errorf("[kv] RunInNewTxn error - %v", err) - return errors.Trace(err) - } - - err = f(txn) - if retryable && IsRetryableError(err) { - log.Warnf("[kv] Retry txn %v", txn) - txn.Rollback() - continue - } - if err != nil { - txn.Rollback() - return errors.Trace(err) - } - - err = txn.Commit() - if retryable && IsRetryableError(err) { - log.Warnf("[kv] Retry txn %v", txn) - txn.Rollback() - BackOff(i) - continue - } - if err != nil { - return errors.Trace(err) - } - break - } - - return nil -} - -var ( - // Max retry count in RunInNewTxn - maxRetryCnt = 100 - // retryBackOffBase is the initial duration, in microsecond, a failed transaction stays dormancy before it retries - retryBackOffBase = 1 - // retryBackOffCap is the max amount of duration, in microsecond, a failed transaction stays dormancy before it retries - retryBackOffCap = 100 -) - -// BackOff Implements exponential backoff with full jitter. -// Returns real back off time in microsecond. -// See: http://www.awsarchitectureblog.com/2015/03/backoff.html. -func BackOff(attempts int) int { - upper := int(math.Min(float64(retryBackOffCap), float64(retryBackOffBase)*math.Pow(2.0, float64(attempts)))) - sleep := time.Duration(rand.Intn(upper)) * time.Millisecond - time.Sleep(sleep) - return int(sleep) -} diff --git a/vendor/github.com/pingcap/tidb/kv/union_iter.go b/vendor/github.com/pingcap/tidb/kv/union_iter.go deleted file mode 100644 index 41fc795f2..000000000 --- a/vendor/github.com/pingcap/tidb/kv/union_iter.go +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import "github.com/ngaut/log" - -// UnionIter is the iterator on an UnionStore. -type UnionIter struct { - dirtyIt Iterator - snapshotIt Iterator - - dirtyValid bool - snapshotValid bool - - curIsDirty bool - isValid bool -} - -func newUnionIter(dirtyIt Iterator, snapshotIt Iterator) *UnionIter { - it := &UnionIter{ - dirtyIt: dirtyIt, - snapshotIt: snapshotIt, - dirtyValid: dirtyIt.Valid(), - snapshotValid: snapshotIt.Valid(), - } - it.updateCur() - return it -} - -// Go next and update valid status. -func (iter *UnionIter) dirtyNext() { - iter.dirtyIt.Next() - iter.dirtyValid = iter.dirtyIt.Valid() -} - -// Go next and update valid status. -func (iter *UnionIter) snapshotNext() { - iter.snapshotIt.Next() - iter.snapshotValid = iter.snapshotIt.Valid() -} - -func (iter *UnionIter) updateCur() { - iter.isValid = true - for { - if !iter.dirtyValid && !iter.snapshotValid { - iter.isValid = false - return - } - - if !iter.dirtyValid { - iter.curIsDirty = false - return - } - - if !iter.snapshotValid { - iter.curIsDirty = true - // if delete it - if len(iter.dirtyIt.Value()) == 0 { - iter.dirtyNext() - continue - } - break - } - - // both valid - if iter.snapshotValid && iter.dirtyValid { - snapshotKey := iter.snapshotIt.Key() - dirtyKey := iter.dirtyIt.Key() - cmp := dirtyKey.Cmp(snapshotKey) - // if equal, means both have value - if cmp == 0 { - if len(iter.dirtyIt.Value()) == 0 { - // snapshot has a record, but txn says we have deleted it - // just go next - iter.dirtyNext() - iter.snapshotNext() - continue - } - // both go next - iter.snapshotNext() - iter.curIsDirty = true - break - } else if cmp > 0 { - // record from snapshot comes first - iter.curIsDirty = false - break - } else { - // record from dirty comes first - if len(iter.dirtyIt.Value()) == 0 { - log.Warnf("[kv] delete a record not exists? k = %q", iter.dirtyIt.Key()) - // jump over this deletion - iter.dirtyNext() - continue - } - iter.curIsDirty = true - break - } - } - } -} - -// Next implements the Iterator Next interface. -func (iter *UnionIter) Next() error { - if !iter.curIsDirty { - iter.snapshotNext() - } else { - iter.dirtyNext() - } - iter.updateCur() - return nil -} - -// Value implements the Iterator Value interface. -// Multi columns -func (iter *UnionIter) Value() []byte { - if !iter.curIsDirty { - return iter.snapshotIt.Value() - } - return iter.dirtyIt.Value() -} - -// Key implements the Iterator Key interface. -func (iter *UnionIter) Key() Key { - if !iter.curIsDirty { - return iter.snapshotIt.Key() - } - return iter.dirtyIt.Key() -} - -// Valid implements the Iterator Valid interface. -func (iter *UnionIter) Valid() bool { - return iter.isValid -} - -// Close implements the Iterator Close interface. -func (iter *UnionIter) Close() { - if iter.snapshotIt != nil { - iter.snapshotIt.Close() - iter.snapshotIt = nil - } - if iter.dirtyIt != nil { - iter.dirtyIt.Close() - iter.dirtyIt = nil - } -} diff --git a/vendor/github.com/pingcap/tidb/kv/union_store.go b/vendor/github.com/pingcap/tidb/kv/union_store.go deleted file mode 100644 index b5a093e08..000000000 --- a/vendor/github.com/pingcap/tidb/kv/union_store.go +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "bytes" - - "github.com/juju/errors" -) - -// UnionStore is a store that wraps a snapshot for read and a BufferStore for buffered write. -// Also, it provides some transaction related utilities. -type UnionStore interface { - MemBuffer - // CheckLazyConditionPairs loads all lazy values from store then checks if all values are matched. - // Lazy condition pairs should be checked before transaction commit. - CheckLazyConditionPairs() error - // WalkBuffer iterates all buffered kv pairs. - WalkBuffer(f func(k Key, v []byte) error) error - // SetOption sets an option with a value, when val is nil, uses the default - // value of this option. - SetOption(opt Option, val interface{}) - // DelOption deletes an option. - DelOption(opt Option) -} - -// Option is used for customizing kv store's behaviors during a transaction. -type Option int - -// Options is an interface of a set of options. Each option is associated with a value. -type Options interface { - // Get gets an option value. - Get(opt Option) (v interface{}, ok bool) -} - -var ( - p = newCache("memdb pool", 100, func() MemBuffer { - return NewMemDbBuffer() - }) -) - -// conditionPair is used to store lazy check condition. -// If condition not match (value is not equal as expected one), returns err. -type conditionPair struct { - key Key - value []byte - err error -} - -// UnionStore is an in-memory Store which contains a buffer for write and a -// snapshot for read. -type unionStore struct { - *BufferStore - snapshot Snapshot // for read - lazyConditionPairs map[string](*conditionPair) // for delay check - opts options -} - -// NewUnionStore builds a new UnionStore. -func NewUnionStore(snapshot Snapshot) UnionStore { - return &unionStore{ - BufferStore: NewBufferStore(snapshot), - snapshot: snapshot, - lazyConditionPairs: make(map[string](*conditionPair)), - opts: make(map[Option]interface{}), - } -} - -type lazyMemBuffer struct { - mb MemBuffer -} - -func (lmb *lazyMemBuffer) Get(k Key) ([]byte, error) { - if lmb.mb == nil { - return nil, ErrNotExist - } - - return lmb.mb.Get(k) -} - -func (lmb *lazyMemBuffer) Set(key Key, value []byte) error { - if lmb.mb == nil { - lmb.mb = p.get() - } - - return lmb.mb.Set(key, value) -} - -func (lmb *lazyMemBuffer) Delete(k Key) error { - if lmb.mb == nil { - lmb.mb = p.get() - } - - return lmb.mb.Delete(k) -} - -func (lmb *lazyMemBuffer) Seek(k Key) (Iterator, error) { - if lmb.mb == nil { - lmb.mb = p.get() - } - - return lmb.mb.Seek(k) -} - -func (lmb *lazyMemBuffer) Release() { - if lmb.mb == nil { - return - } - - lmb.mb.Release() - - p.put(lmb.mb) - lmb.mb = nil -} - -// Get implements the Retriever interface. -func (us *unionStore) Get(k Key) ([]byte, error) { - v, err := us.MemBuffer.Get(k) - if IsErrNotFound(err) { - if _, ok := us.opts.Get(PresumeKeyNotExists); ok { - e, ok := us.opts.Get(PresumeKeyNotExistsError) - if ok && e != nil { - us.markLazyConditionPair(k, nil, e.(error)) - } else { - us.markLazyConditionPair(k, nil, ErrKeyExists) - } - return nil, errors.Trace(ErrNotExist) - } - } - if IsErrNotFound(err) { - v, err = us.BufferStore.r.Get(k) - } - if err != nil { - return v, errors.Trace(err) - } - if len(v) == 0 { - return nil, errors.Trace(ErrNotExist) - } - return v, nil -} - -// markLazyConditionPair marks a kv pair for later check. -// If condition not match, should return e as error. -func (us *unionStore) markLazyConditionPair(k Key, v []byte, e error) { - us.lazyConditionPairs[string(k)] = &conditionPair{ - key: k.Clone(), - value: v, - err: e, - } -} - -// CheckLazyConditionPairs implements the UnionStore interface. -func (us *unionStore) CheckLazyConditionPairs() error { - if len(us.lazyConditionPairs) == 0 { - return nil - } - keys := make([]Key, 0, len(us.lazyConditionPairs)) - for _, v := range us.lazyConditionPairs { - keys = append(keys, v.key) - } - values, err := us.snapshot.BatchGet(keys) - if err != nil { - return errors.Trace(err) - } - - for k, v := range us.lazyConditionPairs { - if len(v.value) == 0 { - if _, exist := values[k]; exist { - return errors.Trace(v.err) - } - } else { - if bytes.Compare(values[k], v.value) != 0 { - return errors.Trace(ErrLazyConditionPairsNotMatch) - } - } - } - return nil -} - -// SetOption implements the UnionStore SetOption interface. -func (us *unionStore) SetOption(opt Option, val interface{}) { - us.opts[opt] = val -} - -// DelOption implements the UnionStore DelOption interface. -func (us *unionStore) DelOption(opt Option) { - delete(us.opts, opt) -} - -// Release implements the UnionStore Release interface. -func (us *unionStore) Release() { - us.snapshot.Release() - us.BufferStore.Release() -} - -type options map[Option]interface{} - -func (opts options) Get(opt Option) (interface{}, bool) { - v, ok := opts[opt] - return v, ok -} diff --git a/vendor/github.com/pingcap/tidb/kv/utils.go b/vendor/github.com/pingcap/tidb/kv/utils.go deleted file mode 100644 index 8fb08d13f..000000000 --- a/vendor/github.com/pingcap/tidb/kv/utils.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import ( - "strconv" - - "github.com/juju/errors" -) - -// IncInt64 increases the value for key k in kv store by step. -func IncInt64(rm RetrieverMutator, k Key, step int64) (int64, error) { - val, err := rm.Get(k) - if IsErrNotFound(err) { - err = rm.Set(k, []byte(strconv.FormatInt(step, 10))) - if err != nil { - return 0, errors.Trace(err) - } - return step, nil - } - if err != nil { - return 0, errors.Trace(err) - } - - intVal, err := strconv.ParseInt(string(val), 10, 0) - if err != nil { - return 0, errors.Trace(err) - } - - intVal += step - err = rm.Set(k, []byte(strconv.FormatInt(intVal, 10))) - if err != nil { - return 0, errors.Trace(err) - } - return intVal, nil -} - -// GetInt64 get int64 value which created by IncInt64 method. -func GetInt64(r Retriever, k Key) (int64, error) { - val, err := r.Get(k) - if IsErrNotFound(err) { - return 0, nil - } - if err != nil { - return 0, errors.Trace(err) - } - intVal, err := strconv.ParseInt(string(val), 10, 0) - return intVal, errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/kv/version.go b/vendor/github.com/pingcap/tidb/kv/version.go deleted file mode 100644 index f00921586..000000000 --- a/vendor/github.com/pingcap/tidb/kv/version.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package kv - -import "math" - -// VersionProvider provides increasing IDs. -type VersionProvider interface { - CurrentVersion() (Version, error) -} - -// Version is the wrapper of KV's version. -type Version struct { - Ver uint64 -} - -var ( - // MaxVersion is the maximum version, notice that it's not a valid version. - MaxVersion = Version{Ver: math.MaxUint64} - // MinVersion is the minimum version, it's not a valid version, too. - MinVersion = Version{Ver: 0} -) - -// NewVersion creates a new Version struct. -func NewVersion(v uint64) Version { - return Version{ - Ver: v, - } -} - -// Cmp returns the comparison result of two versions. -// The result will be 0 if a==b, -1 if a < b, and +1 if a > b. -func (v Version) Cmp(another Version) int { - if v.Ver > another.Ver { - return 1 - } else if v.Ver < another.Ver { - return -1 - } - return 0 -} diff --git a/vendor/github.com/pingcap/tidb/meta/autoid/autoid.go b/vendor/github.com/pingcap/tidb/meta/autoid/autoid.go deleted file mode 100644 index b9385e9ed..000000000 --- a/vendor/github.com/pingcap/tidb/meta/autoid/autoid.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package autoid - -import ( - "sync" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" -) - -const ( - step = 1000 -) - -// Allocator is an auto increment id generator. -// Just keep id unique actually. -type Allocator interface { - // Alloc allocs the next autoID for table with tableID. - // It gets a batch of autoIDs at a time. So it does not need to access storage for each call. - Alloc(tableID int64) (int64, error) - // Rebase rebases the autoID base for table with tableID and the new base value. - // If allocIDs is true, it will allocate some IDs and save to the cache. - // If allocIDs is false, it will not allocate IDs. - Rebase(tableID, newBase int64, allocIDs bool) error -} - -type allocator struct { - mu sync.Mutex - base int64 - end int64 - store kv.Storage - dbID int64 -} - -// Rebase implements autoid.Allocator Rebase interface. -func (alloc *allocator) Rebase(tableID, newBase int64, allocIDs bool) error { - if tableID == 0 { - return errors.New("Invalid tableID") - } - - alloc.mu.Lock() - defer alloc.mu.Unlock() - if newBase <= alloc.base { - return nil - } - if newBase <= alloc.end { - alloc.base = newBase - return nil - } - - return kv.RunInNewTxn(alloc.store, true, func(txn kv.Transaction) error { - m := meta.NewMeta(txn) - end, err := m.GetAutoTableID(alloc.dbID, tableID) - if err != nil { - return errors.Trace(err) - } - - if newBase <= end { - return nil - } - newStep := newBase - end + step - if !allocIDs { - newStep = newBase - end - } - end, err = m.GenAutoTableID(alloc.dbID, tableID, newStep) - if err != nil { - return errors.Trace(err) - } - - alloc.end = end - alloc.base = newBase - if !allocIDs { - alloc.base = alloc.end - } - return nil - }) -} - -// Alloc implements autoid.Allocator Alloc interface. -func (alloc *allocator) Alloc(tableID int64) (int64, error) { - if tableID == 0 { - return 0, errors.New("Invalid tableID") - } - alloc.mu.Lock() - defer alloc.mu.Unlock() - if alloc.base == alloc.end { // step - err := kv.RunInNewTxn(alloc.store, true, func(txn kv.Transaction) error { - m := meta.NewMeta(txn) - base, err1 := m.GetAutoTableID(alloc.dbID, tableID) - if err1 != nil { - return errors.Trace(err1) - } - end, err1 := m.GenAutoTableID(alloc.dbID, tableID, step) - if err1 != nil { - return errors.Trace(err1) - } - - alloc.end = end - if end == step { - alloc.base = base - } else { - alloc.base = end - step - } - return nil - }) - - if err != nil { - return 0, errors.Trace(err) - } - } - - alloc.base++ - log.Debugf("[kv] Alloc id %d, table ID:%d, from %p, database ID:%d", alloc.base, tableID, alloc, alloc.dbID) - return alloc.base, nil -} - -var ( - memID int64 - memIDLock sync.Mutex -) - -type memoryAllocator struct { - mu sync.Mutex - base int64 - end int64 - dbID int64 -} - -// Rebase implements autoid.Allocator Rebase interface. -func (alloc *memoryAllocator) Rebase(tableID, newBase int64, allocIDs bool) error { - // TODO: implement it. - return nil -} - -// Alloc implements autoid.Allocator Alloc interface. -func (alloc *memoryAllocator) Alloc(tableID int64) (int64, error) { - if tableID == 0 { - return 0, errors.New("Invalid tableID") - } - alloc.mu.Lock() - defer alloc.mu.Unlock() - if alloc.base == alloc.end { // step - memIDLock.Lock() - memID = memID + step - alloc.end = memID - alloc.base = alloc.end - step - memIDLock.Unlock() - } - alloc.base++ - return alloc.base, nil -} - -// NewAllocator returns a new auto increment id generator on the store. -func NewAllocator(store kv.Storage, dbID int64) Allocator { - return &allocator{ - store: store, - dbID: dbID, - } -} - -// NewMemoryAllocator returns a new auto increment id generator in memory. -func NewMemoryAllocator(dbID int64) Allocator { - return &memoryAllocator{ - dbID: dbID, - } -} diff --git a/vendor/github.com/pingcap/tidb/meta/meta.go b/vendor/github.com/pingcap/tidb/meta/meta.go deleted file mode 100644 index ff8b31679..000000000 --- a/vendor/github.com/pingcap/tidb/meta/meta.go +++ /dev/null @@ -1,650 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package meta - -import ( - "encoding/binary" - "encoding/json" - "fmt" - "strconv" - "strings" - "sync" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/structure" -) - -var ( - globalIDMutex sync.Mutex -) - -// Meta structure: -// NextGlobalID -> int64 -// SchemaVersion -> int64 -// DBs -> { -// DB:1 -> db meta data []byte -// DB:2 -> db meta data []byte -// } -// DB:1 -> { -// Table:1 -> table meta data []byte -// Table:2 -> table meta data []byte -// TID:1 -> int64 -// TID:2 -> int64 -// } -// - -var ( - mNextGlobalIDKey = []byte("NextGlobalID") - mSchemaVersionKey = []byte("SchemaVersionKey") - mDBs = []byte("DBs") - mDBPrefix = "DB" - mTablePrefix = "Table" - mTableIDPrefix = "TID" - mBootstrapKey = []byte("BootstrapKey") -) - -var ( - // ErrDBExists is the error for db exists. - ErrDBExists = errors.New("database already exists") - // ErrDBNotExists is the error for db not exists. - ErrDBNotExists = errors.New("database doesn't exist") - // ErrTableExists is the error for table exists. - ErrTableExists = errors.New("table already exists") - // ErrTableNotExists is the error for table not exists. - ErrTableNotExists = errors.New("table doesn't exist") -) - -// Meta is for handling meta information in a transaction. -type Meta struct { - txn *structure.TxStructure -} - -// NewMeta creates a Meta in transaction txn. -func NewMeta(txn kv.Transaction) *Meta { - t := structure.NewStructure(txn, []byte{'m'}) - return &Meta{txn: t} -} - -// GenGlobalID generates next id globally. -func (m *Meta) GenGlobalID() (int64, error) { - globalIDMutex.Lock() - defer globalIDMutex.Unlock() - - return m.txn.Inc(mNextGlobalIDKey, 1) -} - -// GetGlobalID gets current global id. -func (m *Meta) GetGlobalID() (int64, error) { - return m.txn.GetInt64(mNextGlobalIDKey) -} - -func (m *Meta) dbKey(dbID int64) []byte { - return []byte(fmt.Sprintf("%s:%d", mDBPrefix, dbID)) -} - -func (m *Meta) parseDatabaseID(key string) (int64, error) { - seps := strings.Split(key, ":") - if len(seps) != 2 { - return 0, errors.Errorf("invalid db key %s", key) - } - - n, err := strconv.ParseInt(seps[1], 10, 64) - return n, errors.Trace(err) -} - -func (m *Meta) autoTalbeIDKey(tableID int64) []byte { - return []byte(fmt.Sprintf("%s:%d", mTableIDPrefix, tableID)) -} - -func (m *Meta) tableKey(tableID int64) []byte { - return []byte(fmt.Sprintf("%s:%d", mTablePrefix, tableID)) -} - -func (m *Meta) parseTableID(key string) (int64, error) { - seps := strings.Split(key, ":") - if len(seps) != 2 { - return 0, errors.Errorf("invalid table meta key %s", key) - } - - n, err := strconv.ParseInt(seps[1], 10, 64) - return n, errors.Trace(err) -} - -// GenAutoTableID adds step to the auto id of the table and returns the sum. -func (m *Meta) GenAutoTableID(dbID int64, tableID int64, step int64) (int64, error) { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return 0, errors.Trace(err) - } - - // Check if table exists. - tableKey := m.tableKey(tableID) - if err := m.checkTableExists(dbKey, tableKey); err != nil { - return 0, errors.Trace(err) - } - - return m.txn.HInc(dbKey, m.autoTalbeIDKey(tableID), step) -} - -// GetAutoTableID gets current auto id with table id. -func (m *Meta) GetAutoTableID(dbID int64, tableID int64) (int64, error) { - return m.txn.HGetInt64(m.dbKey(dbID), m.autoTalbeIDKey(tableID)) -} - -// GetSchemaVersion gets current global schema version. -func (m *Meta) GetSchemaVersion() (int64, error) { - return m.txn.GetInt64(mSchemaVersionKey) -} - -// GenSchemaVersion generates next schema version. -func (m *Meta) GenSchemaVersion() (int64, error) { - return m.txn.Inc(mSchemaVersionKey, 1) -} - -func (m *Meta) checkDBExists(dbKey []byte) error { - v, err := m.txn.HGet(mDBs, dbKey) - if err != nil { - return errors.Trace(err) - } else if v == nil { - return ErrDBNotExists - } - - return nil -} - -func (m *Meta) checkDBNotExists(dbKey []byte) error { - v, err := m.txn.HGet(mDBs, dbKey) - if err != nil { - return errors.Trace(err) - } - - if v != nil { - return ErrDBExists - } - - return nil -} - -func (m *Meta) checkTableExists(dbKey []byte, tableKey []byte) error { - v, err := m.txn.HGet(dbKey, tableKey) - if err != nil { - return errors.Trace(err) - } - - if v == nil { - return ErrTableNotExists - } - - return nil -} - -func (m *Meta) checkTableNotExists(dbKey []byte, tableKey []byte) error { - v, err := m.txn.HGet(dbKey, tableKey) - if err != nil { - return errors.Trace(err) - } - - if v != nil { - return ErrTableExists - } - - return nil -} - -// CreateDatabase creates a database with db info. -func (m *Meta) CreateDatabase(dbInfo *model.DBInfo) error { - dbKey := m.dbKey(dbInfo.ID) - - if err := m.checkDBNotExists(dbKey); err != nil { - return errors.Trace(err) - } - - data, err := json.Marshal(dbInfo) - if err != nil { - return errors.Trace(err) - } - - return m.txn.HSet(mDBs, dbKey, data) -} - -// UpdateDatabase updates a database with db info. -func (m *Meta) UpdateDatabase(dbInfo *model.DBInfo) error { - dbKey := m.dbKey(dbInfo.ID) - - if err := m.checkDBExists(dbKey); err != nil { - return errors.Trace(err) - } - - data, err := json.Marshal(dbInfo) - if err != nil { - return errors.Trace(err) - } - - return m.txn.HSet(mDBs, dbKey, data) -} - -// CreateTable creates a table with tableInfo in database. -func (m *Meta) CreateTable(dbID int64, tableInfo *model.TableInfo) error { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return errors.Trace(err) - } - - // Check if table exists. - tableKey := m.tableKey(tableInfo.ID) - if err := m.checkTableNotExists(dbKey, tableKey); err != nil { - return errors.Trace(err) - } - - data, err := json.Marshal(tableInfo) - if err != nil { - return errors.Trace(err) - } - - return m.txn.HSet(dbKey, tableKey, data) -} - -// DropDatabase drops whole database. -func (m *Meta) DropDatabase(dbID int64) error { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.txn.HClear(dbKey); err != nil { - return errors.Trace(err) - } - - if err := m.txn.HDel(mDBs, dbKey); err != nil { - return errors.Trace(err) - } - - return nil -} - -// DropTable drops table in database. -func (m *Meta) DropTable(dbID int64, tableID int64) error { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return errors.Trace(err) - } - - // Check if table exists. - tableKey := m.tableKey(tableID) - if err := m.checkTableExists(dbKey, tableKey); err != nil { - return errors.Trace(err) - } - - if err := m.txn.HDel(dbKey, tableKey); err != nil { - return errors.Trace(err) - } - - if err := m.txn.HDel(dbKey, m.autoTalbeIDKey(tableID)); err != nil { - return errors.Trace(err) - } - - return nil -} - -// UpdateTable updates the table with table info. -func (m *Meta) UpdateTable(dbID int64, tableInfo *model.TableInfo) error { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return errors.Trace(err) - } - - // Check if table exists. - tableKey := m.tableKey(tableInfo.ID) - if err := m.checkTableExists(dbKey, tableKey); err != nil { - return errors.Trace(err) - } - - data, err := json.Marshal(tableInfo) - if err != nil { - return errors.Trace(err) - } - - err = m.txn.HSet(dbKey, tableKey, data) - return errors.Trace(err) -} - -// ListTables shows all tables in database. -func (m *Meta) ListTables(dbID int64) ([]*model.TableInfo, error) { - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return nil, errors.Trace(err) - } - - res, err := m.txn.HGetAll(dbKey) - if err != nil { - return nil, errors.Trace(err) - } - - tables := make([]*model.TableInfo, 0, len(res)/2) - for _, r := range res { - // only handle table meta - tableKey := string(r.Field) - if !strings.HasPrefix(tableKey, mTablePrefix) { - continue - } - - tbInfo := &model.TableInfo{} - err = json.Unmarshal(r.Value, tbInfo) - if err != nil { - return nil, errors.Trace(err) - } - - tables = append(tables, tbInfo) - } - - return tables, nil -} - -// ListDatabases shows all databases. -func (m *Meta) ListDatabases() ([]*model.DBInfo, error) { - res, err := m.txn.HGetAll(mDBs) - if err != nil { - return nil, errors.Trace(err) - } - - dbs := make([]*model.DBInfo, 0, len(res)) - for _, r := range res { - dbInfo := &model.DBInfo{} - err = json.Unmarshal(r.Value, dbInfo) - if err != nil { - return nil, errors.Trace(err) - } - dbs = append(dbs, dbInfo) - } - return dbs, nil -} - -// GetDatabase gets the database value with ID. -func (m *Meta) GetDatabase(dbID int64) (*model.DBInfo, error) { - dbKey := m.dbKey(dbID) - value, err := m.txn.HGet(mDBs, dbKey) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - dbInfo := &model.DBInfo{} - err = json.Unmarshal(value, dbInfo) - return dbInfo, errors.Trace(err) -} - -// GetTable gets the table value in database with tableID. -func (m *Meta) GetTable(dbID int64, tableID int64) (*model.TableInfo, error) { - // Check if db exists. - dbKey := m.dbKey(dbID) - if err := m.checkDBExists(dbKey); err != nil { - return nil, errors.Trace(err) - } - - tableKey := m.tableKey(tableID) - value, err := m.txn.HGet(dbKey, tableKey) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - tableInfo := &model.TableInfo{} - err = json.Unmarshal(value, tableInfo) - return tableInfo, errors.Trace(err) -} - -// DDL job structure -// DDLOnwer: []byte -// DDLJobList: list jobs -// DDLJobHistory: hash -// DDLJobReorg: hash -// -// for multi DDL workers, only one can become the owner -// to operate DDL jobs, and dispatch them to MR Jobs. - -var ( - mDDLJobOwnerKey = []byte("DDLJobOwner") - mDDLJobListKey = []byte("DDLJobList") - mDDLJobHistoryKey = []byte("DDLJobHistory") - mDDLJobReorgKey = []byte("DDLJobReorg") -) - -func (m *Meta) getJobOwner(key []byte) (*model.Owner, error) { - value, err := m.txn.Get(key) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - owner := &model.Owner{} - err = json.Unmarshal(value, owner) - return owner, errors.Trace(err) -} - -// GetDDLJobOwner gets the current owner for DDL. -func (m *Meta) GetDDLJobOwner() (*model.Owner, error) { - return m.getJobOwner(mDDLJobOwnerKey) -} - -func (m *Meta) setJobOwner(key []byte, o *model.Owner) error { - b, err := json.Marshal(o) - if err != nil { - return errors.Trace(err) - } - return m.txn.Set(key, b) -} - -// SetDDLJobOwner sets the current owner for DDL. -func (m *Meta) SetDDLJobOwner(o *model.Owner) error { - return m.setJobOwner(mDDLJobOwnerKey, o) -} - -func (m *Meta) enQueueDDLJob(key []byte, job *model.Job) error { - b, err := job.Encode() - if err != nil { - return errors.Trace(err) - } - return m.txn.RPush(key, b) -} - -// EnQueueDDLJob adds a DDL job to the list. -func (m *Meta) EnQueueDDLJob(job *model.Job) error { - return m.enQueueDDLJob(mDDLJobListKey, job) -} - -func (m *Meta) deQueueDDLJob(key []byte) (*model.Job, error) { - value, err := m.txn.LPop(key) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - job := &model.Job{} - err = job.Decode(value) - return job, errors.Trace(err) -} - -// DeQueueDDLJob pops a DDL job from the list. -func (m *Meta) DeQueueDDLJob() (*model.Job, error) { - return m.deQueueDDLJob(mDDLJobListKey) -} - -func (m *Meta) getDDLJob(key []byte, index int64) (*model.Job, error) { - value, err := m.txn.LIndex(key, index) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - job := &model.Job{} - err = job.Decode(value) - return job, errors.Trace(err) -} - -// GetDDLJob returns the DDL job with index. -func (m *Meta) GetDDLJob(index int64) (*model.Job, error) { - job, err := m.getDDLJob(mDDLJobListKey, index) - return job, errors.Trace(err) -} - -func (m *Meta) updateDDLJob(index int64, job *model.Job, key []byte) error { - // TODO: use timestamp allocated by TSO - job.LastUpdateTS = time.Now().UnixNano() - b, err := job.Encode() - if err != nil { - return errors.Trace(err) - } - return m.txn.LSet(key, index, b) -} - -// UpdateDDLJob updates the DDL job with index. -func (m *Meta) UpdateDDLJob(index int64, job *model.Job) error { - return m.updateDDLJob(index, job, mDDLJobListKey) -} - -// DDLJobQueueLen returns the DDL job queue length. -func (m *Meta) DDLJobQueueLen() (int64, error) { - return m.txn.LLen(mDDLJobListKey) -} - -func (m *Meta) jobIDKey(id int64) []byte { - b := make([]byte, 8) - binary.BigEndian.PutUint64(b, uint64(id)) - return b -} - -func (m *Meta) addHistoryDDLJob(key []byte, job *model.Job) error { - b, err := job.Encode() - if err != nil { - return errors.Trace(err) - } - - return m.txn.HSet(key, m.jobIDKey(job.ID), b) -} - -// AddHistoryDDLJob adds DDL job to history. -func (m *Meta) AddHistoryDDLJob(job *model.Job) error { - return m.addHistoryDDLJob(mDDLJobHistoryKey, job) -} - -func (m *Meta) getHistoryDDLJob(key []byte, id int64) (*model.Job, error) { - value, err := m.txn.HGet(key, m.jobIDKey(id)) - if err != nil || value == nil { - return nil, errors.Trace(err) - } - - job := &model.Job{} - err = job.Decode(value) - return job, errors.Trace(err) -} - -// GetHistoryDDLJob gets a history DDL job. -func (m *Meta) GetHistoryDDLJob(id int64) (*model.Job, error) { - return m.getHistoryDDLJob(mDDLJobHistoryKey, id) -} - -// IsBootstrapped returns whether we have already run bootstrap or not. -// return true means we don't need doing any other bootstrap. -func (m *Meta) IsBootstrapped() (bool, error) { - value, err := m.txn.GetInt64(mBootstrapKey) - if err != nil { - return false, errors.Trace(err) - } - return value == 1, nil -} - -// FinishBootstrap finishes bootstrap. -func (m *Meta) FinishBootstrap() error { - err := m.txn.Set(mBootstrapKey, []byte("1")) - return errors.Trace(err) -} - -// UpdateDDLReorgHandle saves the job reorganization latest processed handle for later resuming. -func (m *Meta) UpdateDDLReorgHandle(job *model.Job, handle int64) error { - err := m.txn.HSet(mDDLJobReorgKey, m.jobIDKey(job.ID), []byte(strconv.FormatInt(handle, 10))) - return errors.Trace(err) -} - -// RemoveDDLReorgHandle removes the job reorganization handle. -func (m *Meta) RemoveDDLReorgHandle(job *model.Job) error { - err := m.txn.HDel(mDDLJobReorgKey, m.jobIDKey(job.ID)) - return errors.Trace(err) -} - -// GetDDLReorgHandle gets the latest processed handle. -func (m *Meta) GetDDLReorgHandle(job *model.Job) (int64, error) { - value, err := m.txn.HGetInt64(mDDLJobReorgKey, m.jobIDKey(job.ID)) - return value, errors.Trace(err) -} - -// DDL background job structure -// BgJobOnwer: []byte -// BgJobList: list jobs -// BgJobHistory: hash -// BgJobReorg: hash -// -// for multi background worker, only one can become the owner -// to operate background job, and dispatch them to MR background job. - -var ( - mBgJobOwnerKey = []byte("BgJobOwner") - mBgJobListKey = []byte("BgJobList") - mBgJobHistoryKey = []byte("BgJobHistory") -) - -// UpdateBgJob updates the background job with index. -func (m *Meta) UpdateBgJob(index int64, job *model.Job) error { - return m.updateDDLJob(index, job, mBgJobListKey) -} - -// GetBgJob returns the background job with index. -func (m *Meta) GetBgJob(index int64) (*model.Job, error) { - job, err := m.getDDLJob(mBgJobListKey, index) - - return job, errors.Trace(err) -} - -// EnQueueBgJob adds a background job to the list. -func (m *Meta) EnQueueBgJob(job *model.Job) error { - return m.enQueueDDLJob(mBgJobListKey, job) -} - -// BgJobQueueLen returns the background job queue length. -func (m *Meta) BgJobQueueLen() (int64, error) { - return m.txn.LLen(mBgJobListKey) -} - -// AddHistoryBgJob adds background job to history. -func (m *Meta) AddHistoryBgJob(job *model.Job) error { - return m.addHistoryDDLJob(mBgJobHistoryKey, job) -} - -// GetHistoryBgJob gets a history background job. -func (m *Meta) GetHistoryBgJob(id int64) (*model.Job, error) { - return m.getHistoryDDLJob(mBgJobHistoryKey, id) -} - -// DeQueueBgJob pops a background job from the list. -func (m *Meta) DeQueueBgJob() (*model.Job, error) { - return m.deQueueDDLJob(mBgJobListKey) -} - -// GetBgJobOwner gets the current background job owner. -func (m *Meta) GetBgJobOwner() (*model.Owner, error) { - return m.getJobOwner(mBgJobOwnerKey) -} - -// SetBgJobOwner sets the current background job owner. -func (m *Meta) SetBgJobOwner(o *model.Owner) error { - return m.setJobOwner(mBgJobOwnerKey, o) -} diff --git a/vendor/github.com/pingcap/tidb/model/ddl.go b/vendor/github.com/pingcap/tidb/model/ddl.go deleted file mode 100644 index d8809dac1..000000000 --- a/vendor/github.com/pingcap/tidb/model/ddl.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "encoding/json" - "fmt" - - "github.com/juju/errors" -) - -// ActionType is the type for DDL action. -type ActionType byte - -// List DDL actions. -const ( - ActionNone ActionType = iota - ActionCreateSchema - ActionDropSchema - ActionCreateTable - ActionDropTable - ActionAddColumn - ActionDropColumn - ActionAddIndex - ActionDropIndex -) - -func (action ActionType) String() string { - switch action { - case ActionCreateSchema: - return "create schema" - case ActionDropSchema: - return "drop schema" - case ActionCreateTable: - return "create table" - case ActionDropTable: - return "drop table" - case ActionAddColumn: - return "add column" - case ActionDropColumn: - return "drop column" - case ActionAddIndex: - return "add index" - case ActionDropIndex: - return "drop index" - default: - return "none" - } -} - -// Job is for a DDL operation. -type Job struct { - ID int64 `json:"id"` - Type ActionType `json:"type"` - SchemaID int64 `json:"schema_id"` - TableID int64 `json:"table_id"` - State JobState `json:"state"` - Error string `json:"err"` - // every time we meet an error when running job, we will increase it - ErrorCount int64 `json:"err_count"` - Args []interface{} `json:"-"` - // we must use json raw message for delay parsing special args. - RawArgs json.RawMessage `json:"raw_args"` - SchemaState SchemaState `json:"schema_state"` - // snapshot version for this job. - SnapshotVer uint64 `json:"snapshot_ver"` - // unix nano seconds - // TODO: use timestamp allocated by TSO - LastUpdateTS int64 `json:"last_update_ts"` -} - -// Encode encodes job with json format. -func (job *Job) Encode() ([]byte, error) { - var err error - job.RawArgs, err = json.Marshal(job.Args) - if err != nil { - return nil, errors.Trace(err) - } - - var b []byte - b, err = json.Marshal(job) - return b, errors.Trace(err) -} - -// Decode decodes job from the json buffer, we must use DecodeArgs later to -// decode special args for this job. -func (job *Job) Decode(b []byte) error { - err := json.Unmarshal(b, job) - return errors.Trace(err) -} - -// DecodeArgs decodes job args. -func (job *Job) DecodeArgs(args ...interface{}) error { - job.Args = args - err := json.Unmarshal(job.RawArgs, &job.Args) - return errors.Trace(err) -} - -// String implements fmt.Stringer interface. -func (job *Job) String() string { - return fmt.Sprintf("ID:%d, Type:%s, State:%s, SchemaState:%s, SchemaID:%d, TableID:%d, Args:%s", - job.ID, job.Type, job.State, job.SchemaState, job.SchemaID, job.TableID, job.RawArgs) -} - -// IsFinished returns whether job is finished or not. -// If the job state is Done or Cancelled, it is finished. -func (job *Job) IsFinished() bool { - return job.State == JobDone || job.State == JobCancelled -} - -// IsRunning returns whether job is still running or not. -func (job *Job) IsRunning() bool { - return job.State == JobRunning -} - -// JobState is for job state. -type JobState byte - -// List job states. -const ( - JobNone JobState = iota - JobRunning - JobDone - JobCancelled -) - -// String implements fmt.Stringer interface. -func (s JobState) String() string { - switch s { - case JobRunning: - return "running" - case JobDone: - return "done" - case JobCancelled: - return "cancelled" - default: - return "none" - } -} - -// Owner is for DDL Owner. -type Owner struct { - OwnerID string `json:"owner_id"` - // unix nano seconds - // TODO: use timestamp allocated by TSO - LastUpdateTS int64 `json:"last_update_ts"` -} - -// String implements fmt.Stringer interface. -func (o *Owner) String() string { - return fmt.Sprintf("ID:%s, LastUpdateTS:%d", o.OwnerID, o.LastUpdateTS) -} diff --git a/vendor/github.com/pingcap/tidb/model/model.go b/vendor/github.com/pingcap/tidb/model/model.go deleted file mode 100644 index 6c19baead..000000000 --- a/vendor/github.com/pingcap/tidb/model/model.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "strings" - - "github.com/pingcap/tidb/util/types" -) - -// SchemaState is the state for schema elements. -type SchemaState byte - -const ( - // StateNone means this schema element is absent and can't be used. - StateNone SchemaState = iota - // StateDeleteOnly means we can only delete items for this schema element. - StateDeleteOnly - // StateWriteOnly means we can use any write operation on this schema element, - // but outer can't read the changed data. - StateWriteOnly - // StateWriteReorganization means we are re-organizating whole data after write only state. - StateWriteReorganization - // StateDeleteReorganization means we are re-organizating whole data after delete only state. - StateDeleteReorganization - // StatePublic means this schema element is ok for all write and read operations. - StatePublic -) - -// String implements fmt.Stringer interface. -func (s SchemaState) String() string { - switch s { - case StateDeleteOnly: - return "delete only" - case StateWriteOnly: - return "write only" - case StateWriteReorganization: - return "write reorganization" - case StateDeleteReorganization: - return "delete reorganization" - case StatePublic: - return "public" - default: - return "none" - } -} - -// ColumnInfo provides meta data describing of a table column. -type ColumnInfo struct { - ID int64 `json:"id"` - Name CIStr `json:"name"` - Offset int `json:"offset"` - DefaultValue interface{} `json:"default"` - types.FieldType `json:"type"` - State SchemaState `json:"state"` -} - -// Clone clones ColumnInfo. -func (c *ColumnInfo) Clone() *ColumnInfo { - nc := *c - return &nc -} - -// TableInfo provides meta data describing a DB table. -type TableInfo struct { - ID int64 `json:"id"` - Name CIStr `json:"name"` - Charset string `json:"charset"` - Collate string `json:"collate"` - // Columns are listed in the order in which they appear in the schema. - Columns []*ColumnInfo `json:"cols"` - Indices []*IndexInfo `json:"index_info"` - State SchemaState `json:"state"` - PKIsHandle bool `json:"pk_is_handle"` - Comment string `json:"comment"` -} - -// Clone clones TableInfo. -func (t *TableInfo) Clone() *TableInfo { - nt := *t - nt.Columns = make([]*ColumnInfo, len(t.Columns)) - nt.Indices = make([]*IndexInfo, len(t.Indices)) - - for i := range t.Columns { - nt.Columns[i] = t.Columns[i].Clone() - } - - for i := range t.Indices { - nt.Indices[i] = t.Indices[i].Clone() - } - return &nt -} - -// IndexColumn provides index column info. -type IndexColumn struct { - Name CIStr `json:"name"` // Index name - Offset int `json:"offset"` // Index offset - Length int `json:"length"` // Index length -} - -// Clone clones IndexColumn. -func (i *IndexColumn) Clone() *IndexColumn { - ni := *i - return &ni -} - -// IndexType is the type of index -type IndexType int - -// String implements Stringer interface. -func (t IndexType) String() string { - switch t { - case IndexTypeBtree: - return "BTREE" - case IndexTypeHash: - return "HASH" - } - return "" -} - -// IndexTypes -const ( - IndexTypeBtree IndexType = iota + 1 - IndexTypeHash -) - -// IndexInfo provides meta data describing a DB index. -// It corresponds to the statement `CREATE INDEX Name ON Table (Column);` -// See: https://dev.mysql.com/doc/refman/5.7/en/create-index.html -type IndexInfo struct { - ID int64 `json:"id"` - Name CIStr `json:"idx_name"` // Index name. - Table CIStr `json:"tbl_name"` // Table name. - Columns []*IndexColumn `json:"idx_cols"` // Index columns. - Unique bool `json:"is_unique"` // Whether the index is unique. - Primary bool `json:"is_primary"` // Whether the index is primary key. - State SchemaState `json:"state"` - Comment string `json:"comment"` // Comment - Tp IndexType `json:"index_type"` // Index type: Btree or Hash -} - -// Clone clones IndexInfo. -func (index *IndexInfo) Clone() *IndexInfo { - ni := *index - ni.Columns = make([]*IndexColumn, len(index.Columns)) - for i := range index.Columns { - ni.Columns[i] = index.Columns[i].Clone() - } - return &ni -} - -// DBInfo provides meta data describing a DB. -type DBInfo struct { - ID int64 `json:"id"` // Database ID - Name CIStr `json:"db_name"` // DB name. - Charset string `json:"charset"` - Collate string `json:"collate"` - Tables []*TableInfo `json:"-"` // Tables in the DB. - State SchemaState `json:"state"` -} - -// Clone clones DBInfo. -func (db *DBInfo) Clone() *DBInfo { - newInfo := *db - newInfo.Tables = make([]*TableInfo, len(db.Tables)) - for i := range db.Tables { - newInfo.Tables[i] = db.Tables[i].Clone() - } - return &newInfo -} - -// CIStr is case insensitve string. -type CIStr struct { - O string `json:"O"` // Original string. - L string `json:"L"` // Lower case string. -} - -// String implements fmt.Stringer interface. -func (cis CIStr) String() string { - return cis.O -} - -// NewCIStr creates a new CIStr. -func NewCIStr(s string) (cs CIStr) { - cs.O = s - cs.L = strings.ToLower(s) - return -} diff --git a/vendor/github.com/pingcap/tidb/mysql/bit.go b/vendor/github.com/pingcap/tidb/mysql/bit.go deleted file mode 100644 index 4f76dceb1..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/bit.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "fmt" - "strconv" - "strings" - - "github.com/juju/errors" -) - -// Bit is for mysql bit type. -type Bit struct { - // Value holds the value for bit type. - Value uint64 - - // Width is the display with for bit value. - // e.g, with is 8, 0 is for 0b00000000. - Width int -} - -// String implements fmt.Stringer interface. -func (b Bit) String() string { - format := fmt.Sprintf("0b%%0%db", b.Width) - return fmt.Sprintf(format, b.Value) -} - -// ToNumber changes bit type to float64 for numeric operation. -// MySQL treats bit as double type. -func (b Bit) ToNumber() float64 { - return float64(b.Value) -} - -// ToString returns the binary string for bit type. -func (b Bit) ToString() string { - byteSize := (b.Width + 7) / 8 - buf := make([]byte, byteSize) - for i := byteSize - 1; i >= 0; i-- { - buf[byteSize-i-1] = byte(b.Value >> uint(i*8)) - } - return string(buf) -} - -// Min and Max bit width. -const ( - MinBitWidth = 1 - MaxBitWidth = 64 - // UnspecifiedBitWidth is the unspecified with if you want to calculate bit width dynamically. - UnspecifiedBitWidth = -1 -) - -// ParseBit parses bit string. -// The string format can be b'val', B'val' or 0bval, val must be 0 or 1. -// Width is the display width for bit representation. -1 means calculating -// width dynamically, using following algorithm: (len("011101") + 7) & ^7, -// e.g, if bit string is 0b01, the above will return 8 for its bit width. -func ParseBit(s string, width int) (Bit, error) { - if len(s) == 0 { - return Bit{}, errors.Errorf("invalid empty string for parsing bit type") - } - - if s[0] == 'b' || s[0] == 'B' { - // format is b'val' or B'val' - s = strings.Trim(s[1:], "'") - } else if strings.HasPrefix(s, "0b") { - s = s[2:] - } else { - // here means format is not b'val', B'val' or 0bval. - return Bit{}, errors.Errorf("invalid bit type format %s", s) - } - - if width == UnspecifiedBitWidth { - width = (len(s) + 7) & ^7 - } - - if width == 0 { - width = MinBitWidth - } - - if width < MinBitWidth || width > MaxBitWidth { - return Bit{}, errors.Errorf("invalid display width for bit type, must in [1, 64], but %d", width) - } - - n, err := strconv.ParseUint(s, 2, 64) - if err != nil { - return Bit{}, errors.Trace(err) - } - - if n > (uint64(1)< 0 { - // It is scientific notation, like 3.14e10 - expInt, err := strconv.Atoi(value[n+1:]) - if err != nil { - return Decimal{}, fmt.Errorf("can't convert %s to decimal, incorrect exponent", value) - } - value = value[0:n] - exp = int32(expInt) - } - - parts := strings.Split(value, ".") - if len(parts) == 1 { - // There is no decimal point, we can just parse the original string as - // an int. - intString = value - } else if len(parts) == 2 { - intString = parts[0] + parts[1] - expInt := -len(parts[1]) - exp += int32(expInt) - } else { - return Decimal{}, fmt.Errorf("can't convert %s to decimal: too many .s", value) - } - - dValue := new(big.Int) - _, ok := dValue.SetString(intString, 10) - if !ok { - return Decimal{}, fmt.Errorf("can't convert %s to decimal", value) - } - - val := Decimal{ - value: dValue, - exp: exp, - fracDigits: fracDigitsDefault(exp), - } - if exp < -MaxFractionDigits { - val = val.rescale(-MaxFractionDigits) - } - return val, nil -} - -// NewDecimalFromFloat converts a float64 to Decimal. -// -// Example: -// -// NewDecimalFromFloat(123.45678901234567).String() // output: "123.4567890123456" -// NewDecimalFromFloat(.00000000000000001).String() // output: "0.00000000000000001" -// -// NOTE: this will panic on NaN, +/-inf. -func NewDecimalFromFloat(value float64) Decimal { - floor := math.Floor(value) - - // fast path, where float is an int. - if floor == value && !math.IsInf(value, 0) { - return NewDecimalFromInt(int64(value), 0) - } - - str := strconv.FormatFloat(value, 'f', -1, 64) - dec, err := ParseDecimal(str) - if err != nil { - panic(err) - } - return dec -} - -// NewDecimalFromFloatWithExponent converts a float64 to Decimal, with an arbitrary -// number of fractional digits. -// -// Example: -// -// NewDecimalFromFloatWithExponent(123.456, -2).String() // output: "123.46" -// -func NewDecimalFromFloatWithExponent(value float64, exp int32) Decimal { - mul := math.Pow(10, -float64(exp)) - floatValue := value * mul - if math.IsNaN(floatValue) || math.IsInf(floatValue, 0) { - panic(fmt.Sprintf("Cannot create a Decimal from %v", floatValue)) - } - dValue := big.NewInt(round(floatValue)) - - return Decimal{ - value: dValue, - exp: exp, - fracDigits: fracDigitsDefault(exp), - } -} - -// rescale returns a rescaled version of the decimal. Returned -// decimal may be less precise if the given exponent is bigger -// than the initial exponent of the Decimal. -// NOTE: this will truncate, NOT round -// -// Example: -// -// d := New(12345, -4) -// d2 := d.rescale(-1) -// d3 := d2.rescale(-4) -// println(d1) -// println(d2) -// println(d3) -// -// Output: -// -// 1.2345 -// 1.2 -// 1.2000 -// -func (d Decimal) rescale(exp int32) Decimal { - d.ensureInitialized() - if exp < -MaxFractionDigits-1 { - // Limit the number of digits but we can not call Round here because it is called by Round. - // Limit it to MaxFractionDigits + 1 to make sure the final result is correct. - exp = -MaxFractionDigits - 1 - } - // Must convert exps to float64 before - to prevent overflow. - diff := math.Abs(float64(exp) - float64(d.exp)) - value := new(big.Int).Set(d.value) - - expScale := new(big.Int).Exp(tenInt, big.NewInt(int64(diff)), nil) - if exp > d.exp { - value = value.Quo(value, expScale) - } else if exp < d.exp { - value = value.Mul(value, expScale) - } - return Decimal{ - value: value, - exp: exp, - fracDigits: d.fracDigits, - } -} - -// Abs returns the absolute value of the decimal. -func (d Decimal) Abs() Decimal { - d.ensureInitialized() - d2Value := new(big.Int).Abs(d.value) - return Decimal{ - value: d2Value, - exp: d.exp, - fracDigits: d.fracDigits, - } -} - -// Add returns d + d2. -func (d Decimal) Add(d2 Decimal) Decimal { - baseExp := min(d.exp, d2.exp) - rd := d.rescale(baseExp) - rd2 := d2.rescale(baseExp) - - d3Value := new(big.Int).Add(rd.value, rd2.value) - return Decimal{ - value: d3Value, - exp: baseExp, - fracDigits: fracDigitsPlus(d.fracDigits, d2.fracDigits), - } -} - -// Sub returns d - d2. -func (d Decimal) Sub(d2 Decimal) Decimal { - baseExp := min(d.exp, d2.exp) - rd := d.rescale(baseExp) - rd2 := d2.rescale(baseExp) - - d3Value := new(big.Int).Sub(rd.value, rd2.value) - return Decimal{ - value: d3Value, - exp: baseExp, - fracDigits: fracDigitsPlus(d.fracDigits, d2.fracDigits), - } -} - -// Mul returns d * d2. -func (d Decimal) Mul(d2 Decimal) Decimal { - d.ensureInitialized() - d2.ensureInitialized() - - expInt64 := int64(d.exp) + int64(d2.exp) - if expInt64 > math.MaxInt32 || expInt64 < math.MinInt32 { - // It is better to panic than to give incorrect results, as - // decimals are usually used for money. - panic(fmt.Sprintf("exponent %v overflows an int32!", expInt64)) - } - - d3Value := new(big.Int).Mul(d.value, d2.value) - val := Decimal{ - value: d3Value, - exp: int32(expInt64), - fracDigits: fracDigitsMul(d.fracDigits, d2.fracDigits), - } - if val.exp < -(MaxFractionDigits) { - val = val.Round(MaxFractionDigits) - } - return val -} - -// Div returns d / d2. If it doesn't divide exactly, the result will have -// DivisionPrecision digits after the decimal point. -func (d Decimal) Div(d2 Decimal) Decimal { - // Division is hard, use Rat to do it. - ratNum := d.Rat() - ratDenom := d2.Rat() - - quoRat := big.NewRat(0, 1).Quo(ratNum, ratDenom) - - // Converting from Rat to Decimal inefficiently for now. - ret, err := ParseDecimal(quoRat.FloatString(MaxFractionDigits + 1)) - if err != nil { - panic(err) // This should never happen. - } - // To pass test "2 / 3 * 3 < 2" -> "1". - ret = ret.Truncate(MaxFractionDigits) - ret.fracDigits = fracDigitsDiv(d.fracDigits) - return ret -} - -// Cmp compares the numbers represented by d and d2, and returns: -// -// -1 if d < d2 -// 0 if d == d2 -// +1 if d > d2 -// -func (d Decimal) Cmp(d2 Decimal) int { - baseExp := min(d.exp, d2.exp) - rd := d.rescale(baseExp) - rd2 := d2.rescale(baseExp) - - return rd.value.Cmp(rd2.value) -} - -// Equals returns whether the numbers represented by d and d2 are equal. -func (d Decimal) Equals(d2 Decimal) bool { - return d.Cmp(d2) == 0 -} - -// Exponent returns the exponent, or scale component of the decimal. -func (d Decimal) Exponent() int32 { - return d.exp -} - -// FracDigits returns the number of fractional digits of the decimal. -func (d Decimal) FracDigits() int32 { - return d.fracDigits -} - -// IntPart returns the integer component of the decimal. -func (d Decimal) IntPart() int64 { - scaledD := d.rescale(0) - return scaledD.value.Int64() -} - -// Rat returns a rational number representation of the decimal. -func (d Decimal) Rat() *big.Rat { - d.ensureInitialized() - if d.exp <= 0 { - // It must negate after casting to prevent int32 overflow. - denom := new(big.Int).Exp(tenInt, big.NewInt(-int64(d.exp)), nil) - return new(big.Rat).SetFrac(d.value, denom) - } - - mul := new(big.Int).Exp(tenInt, big.NewInt(int64(d.exp)), nil) - num := new(big.Int).Mul(d.value, mul) - return new(big.Rat).SetFrac(num, oneInt) -} - -// Float64 returns the nearest float64 value for d and a bool indicating -// whether f represents d exactly. -// For more details, see the documentation for big.Rat.Float64. -func (d Decimal) Float64() (f float64, exact bool) { - return d.Rat().Float64() -} - -// String returns the string representation of the decimal -// with the fixed point. -// -// Example: -// -// d := New(-12345, -3) -// println(d.String()) -// -// Output: -// -// -12.345 -// -func (d Decimal) String() string { - return d.StringFixed(d.fracDigits) -} - -// StringFixed returns a rounded fixed-point string with places digits after -// the decimal point. -// -// Example: -// -// NewFromFloat(0).StringFixed(2) // output: "0.00" -// NewFromFloat(0).StringFixed(0) // output: "0" -// NewFromFloat(5.45).StringFixed(0) // output: "5" -// NewFromFloat(5.45).StringFixed(1) // output: "5.5" -// NewFromFloat(5.45).StringFixed(2) // output: "5.45" -// NewFromFloat(5.45).StringFixed(3) // output: "5.450" -// NewFromFloat(545).StringFixed(-1) // output: "550" -// -func (d Decimal) StringFixed(places int32) string { - rounded := d.Round(places) - return rounded.string(false) -} - -// Round rounds the decimal to places decimal places. -// If places < 0, it will round the integer part to the nearest 10^(-places). -// -// Example: -// -// NewFromFloat(5.45).Round(1).String() // output: "5.5" -// NewFromFloat(545).Round(-1).String() // output: "550" -// -func (d Decimal) Round(places int32) Decimal { - // Truncate to places + 1. - ret := d.rescale(-places - 1) - - // Add sign(d) * 0.5. - if ret.value.Sign() < 0 { - ret.value.Sub(ret.value, fiveInt) - } else { - ret.value.Add(ret.value, fiveInt) - } - - // Floor for positive numbers, Ceil for negative numbers. - _, m := ret.value.DivMod(ret.value, tenInt, new(big.Int)) - ret.exp++ - if ret.value.Sign() < 0 && m.Cmp(zeroInt) != 0 { - ret.value.Add(ret.value, oneInt) - } - ret.fracDigits = places - return ret -} - -// Floor returns the nearest integer value less than or equal to d. -func (d Decimal) Floor() Decimal { - d.ensureInitialized() - - exp := big.NewInt(10) - - // It must negate after casting to prevent int32 overflow. - exp.Exp(exp, big.NewInt(-int64(d.exp)), nil) - - z := new(big.Int).Div(d.value, exp) - return Decimal{value: z, exp: 0} -} - -// Ceil returns the nearest integer value greater than or equal to d. -func (d Decimal) Ceil() Decimal { - d.ensureInitialized() - - exp := big.NewInt(10) - - // It must negate after casting to prevent int32 overflow. - exp.Exp(exp, big.NewInt(-int64(d.exp)), nil) - - z, m := new(big.Int).DivMod(d.value, exp, new(big.Int)) - if m.Cmp(zeroInt) != 0 { - z.Add(z, oneInt) - } - return Decimal{value: z, exp: 0} -} - -// Truncate truncates off digits from the number, without rounding. -// -// NOTE: precision is the last digit that will not be truncated (must be >= 0). -// -// Example: -// -// decimal.NewFromString("123.456").Truncate(2).String() // "123.45" -// -func (d Decimal) Truncate(precision int32) Decimal { - d.ensureInitialized() - if precision >= 0 && -precision > d.exp { - d = d.rescale(-precision) - } - d.fracDigits = precision - return d -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (d *Decimal) UnmarshalJSON(decimalBytes []byte) error { - str, err := unquoteIfQuoted(decimalBytes) - if err != nil { - return fmt.Errorf("Error decoding string '%s': %s", decimalBytes, err) - } - - decimal, err := ParseDecimal(str) - *d = decimal - if err != nil { - return fmt.Errorf("Error decoding string '%s': %s", str, err) - } - return nil -} - -// MarshalJSON implements the json.Marshaler interface. -func (d Decimal) MarshalJSON() ([]byte, error) { - str := "\"" + d.String() + "\"" - return []byte(str), nil -} - -// Scan implements the sql.Scanner interface for database deserialization. -func (d *Decimal) Scan(value interface{}) error { - str, err := unquoteIfQuoted(value) - if err != nil { - return err - } - *d, err = ParseDecimal(str) - - return err -} - -// Value implements the driver.Valuer interface for database serialization. -func (d Decimal) Value() (driver.Value, error) { - return d.String(), nil -} - -// BigIntValue returns the *bit.Int value member of decimal. -func (d Decimal) BigIntValue() *big.Int { - return d.value -} - -// UnmarshalText implements the encoding.TextUnmarshaler interface for XML -// deserialization. -func (d *Decimal) UnmarshalText(text []byte) error { - str := string(text) - - dec, err := ParseDecimal(str) - *d = dec - if err != nil { - return fmt.Errorf("Error decoding string '%s': %s", str, err) - } - - return nil -} - -// MarshalText implements the encoding.TextMarshaler interface for XML -// serialization. -func (d Decimal) MarshalText() (text []byte, err error) { - return []byte(d.String()), nil -} - -// StringScaled first scales the decimal then calls .String() on it. -// NOTE: buggy, unintuitive, and DEPRECATED! Use StringFixed instead. -func (d Decimal) StringScaled(exp int32) string { - return d.rescale(exp).String() -} - -func (d Decimal) string(trimTrailingZeros bool) string { - if d.exp >= 0 { - return d.rescale(0).value.String() - } - - abs := new(big.Int).Abs(d.value) - str := abs.String() - - var intPart, fractionalPart string - - // this cast to int will cause bugs if d.exp == INT_MIN - // and you are on a 32-bit machine. Won't fix this super-edge case. - dExpInt := int(d.exp) - if len(str) > -dExpInt { - intPart = str[:len(str)+dExpInt] - fractionalPart = str[len(str)+dExpInt:] - } else { - intPart = "0" - - num0s := -dExpInt - len(str) - fractionalPart = strings.Repeat("0", num0s) + str - } - - if trimTrailingZeros { - i := len(fractionalPart) - 1 - for ; i >= 0; i-- { - if fractionalPart[i] != '0' { - break - } - } - fractionalPart = fractionalPart[:i+1] - } - - number := intPart - if len(fractionalPart) > 0 { - number += "." + fractionalPart - } - - if d.value.Sign() < 0 { - return "-" + number - } - - return number -} - -func (d *Decimal) ensureInitialized() { - if d.value == nil { - d.value = new(big.Int) - } -} - -func min(x, y int32) int32 { - if x >= y { - return y - } - return x -} - -func max(x, y int32) int32 { - if x >= y { - return x - } - return y -} - -func round(n float64) int64 { - if n < 0 { - return int64(n - 0.5) - } - return int64(n + 0.5) -} - -func unquoteIfQuoted(value interface{}) (string, error) { - bytes, ok := value.([]byte) - if !ok { - return "", fmt.Errorf("Could not convert value '%+v' to byte array", - value) - } - - // If the amount is quoted, strip the quotes. - if len(bytes) > 2 && bytes[0] == '"' && bytes[len(bytes)-1] == '"' { - bytes = bytes[1 : len(bytes)-1] - } - return string(bytes), nil -} - -func fracDigitsDefault(exp int32) int32 { - if exp < 0 { - return min(MaxFractionDigits, -exp) - } - - return 0 -} - -func fracDigitsPlus(x, y int32) int32 { - return max(x, y) -} - -func fracDigitsDiv(x int32) int32 { - return min(x+DivIncreasePrecision, MaxFractionDigits) -} - -func fracDigitsMul(a, b int32) int32 { - return min(MaxFractionDigits, a+b) -} diff --git a/vendor/github.com/pingcap/tidb/mysql/enum.go b/vendor/github.com/pingcap/tidb/mysql/enum.go deleted file mode 100644 index 425a3e1b5..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/enum.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "strconv" - "strings" - - "github.com/juju/errors" -) - -// Enum is for MySQL enum type. -type Enum struct { - Name string - Value uint64 -} - -// String implements fmt.Stringer interface. -func (e Enum) String() string { - return e.Name -} - -// ToNumber changes enum index to float64 for numeric operation. -func (e Enum) ToNumber() float64 { - return float64(e.Value) -} - -// ParseEnumName creates a Enum with item name. -func ParseEnumName(elems []string, name string) (Enum, error) { - for i, n := range elems { - if strings.EqualFold(n, name) { - return Enum{Name: n, Value: uint64(i) + 1}, nil - } - } - - // name doesn't exist, maybe an integer? - if num, err := strconv.ParseUint(name, 0, 64); err == nil { - return ParseEnumValue(elems, num) - } - - return Enum{}, errors.Errorf("item %s is not in enum %v", name, elems) -} - -// ParseEnumValue creates a Enum with special number. -func ParseEnumValue(elems []string, number uint64) (Enum, error) { - if number == 0 || number > uint64(len(elems)) { - return Enum{}, errors.Errorf("number %d overflow enum boundary [1, %d]", number, len(elems)) - } - - return Enum{Name: elems[number-1], Value: number}, nil -} diff --git a/vendor/github.com/pingcap/tidb/mysql/errcode.go b/vendor/github.com/pingcap/tidb/mysql/errcode.go deleted file mode 100644 index 8de53d7e7..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/errcode.go +++ /dev/null @@ -1,885 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -// MySQL error code. -// This value is numeric. It is not portable to other database systems. -const ( - ErrErrorFirst uint16 = 1000 - ErrHashchk = 1000 - ErrNisamchk = 1001 - ErrNo = 1002 - ErrYes = 1003 - ErrCantCreateFile = 1004 - ErrCantCreateTable = 1005 - ErrCantCreateDb = 1006 - ErrDbCreateExists = 1007 - ErrDbDropExists = 1008 - ErrDbDropDelete = 1009 - ErrDbDropRmdir = 1010 - ErrCantDeleteFile = 1011 - ErrCantFindSystemRec = 1012 - ErrCantGetStat = 1013 - ErrCantGetWd = 1014 - ErrCantLock = 1015 - ErrCantOpenFile = 1016 - ErrFileNotFound = 1017 - ErrCantReadDir = 1018 - ErrCantSetWd = 1019 - ErrCheckread = 1020 - ErrDiskFull = 1021 - ErrDupKey = 1022 - ErrErrorOnClose = 1023 - ErrErrorOnRead = 1024 - ErrErrorOnRename = 1025 - ErrErrorOnWrite = 1026 - ErrFileUsed = 1027 - ErrFilsortAbort = 1028 - ErrFormNotFound = 1029 - ErrGetErrno = 1030 - ErrIllegalHa = 1031 - ErrKeyNotFound = 1032 - ErrNotFormFile = 1033 - ErrNotKeyfile = 1034 - ErrOldKeyfile = 1035 - ErrOpenAsReadonly = 1036 - ErrOutofmemory = 1037 - ErrOutOfSortmemory = 1038 - ErrUnexpectedEOF = 1039 - ErrConCount = 1040 - ErrOutOfResources = 1041 - ErrBadHost = 1042 - ErrHandshake = 1043 - ErrDbaccessDenied = 1044 - ErrAccessDenied = 1045 - ErrNoDb = 1046 - ErrUnknownCom = 1047 - ErrBadNull = 1048 - ErrBadDb = 1049 - ErrTableExists = 1050 - ErrBadTable = 1051 - ErrNonUniq = 1052 - ErrServerShutdown = 1053 - ErrBadField = 1054 - ErrWrongFieldWithGroup = 1055 - ErrWrongGroupField = 1056 - ErrWrongSumSelect = 1057 - ErrWrongValueCount = 1058 - ErrTooLongIdent = 1059 - ErrDupFieldname = 1060 - ErrDupKeyname = 1061 - ErrDupEntry = 1062 - ErrWrongFieldSpec = 1063 - ErrParse = 1064 - ErrEmptyQuery = 1065 - ErrNonuniqTable = 1066 - ErrInvalidDefault = 1067 - ErrMultiplePriKey = 1068 - ErrTooManyKeys = 1069 - ErrTooManyKeyParts = 1070 - ErrTooLongKey = 1071 - ErrKeyColumnDoesNotExits = 1072 - ErrBlobUsedAsKey = 1073 - ErrTooBigFieldlength = 1074 - ErrWrongAutoKey = 1075 - ErrReady = 1076 - ErrNormalShutdown = 1077 - ErrGotSignal = 1078 - ErrShutdownComplete = 1079 - ErrForcingClose = 1080 - ErrIpsock = 1081 - ErrNoSuchIndex = 1082 - ErrWrongFieldTerminators = 1083 - ErrBlobsAndNoTerminated = 1084 - ErrTextfileNotReadable = 1085 - ErrFileExists = 1086 - ErrLoadInfo = 1087 - ErrAlterInfo = 1088 - ErrWrongSubKey = 1089 - ErrCantRemoveAllFields = 1090 - ErrCantDropFieldOrKey = 1091 - ErrInsertInfo = 1092 - ErrUpdateTableUsed = 1093 - ErrNoSuchThread = 1094 - ErrKillDenied = 1095 - ErrNoTablesUsed = 1096 - ErrTooBigSet = 1097 - ErrNoUniqueLogfile = 1098 - ErrTableNotLockedForWrite = 1099 - ErrTableNotLocked = 1100 - ErrBlobCantHaveDefault = 1101 - ErrWrongDbName = 1102 - ErrWrongTableName = 1103 - ErrTooBigSelect = 1104 - ErrUnknown = 1105 - ErrUnknownProcedure = 1106 - ErrWrongParamcountToProcedure = 1107 - ErrWrongParametersToProcedure = 1108 - ErrUnknownTable = 1109 - ErrFieldSpecifiedTwice = 1110 - ErrInvalidGroupFuncUse = 1111 - ErrUnsupportedExtension = 1112 - ErrTableMustHaveColumns = 1113 - ErrRecordFileFull = 1114 - ErrUnknownCharacterSet = 1115 - ErrTooManyTables = 1116 - ErrTooManyFields = 1117 - ErrTooBigRowsize = 1118 - ErrStackOverrun = 1119 - ErrWrongOuterJoin = 1120 - ErrNullColumnInIndex = 1121 - ErrCantFindUdf = 1122 - ErrCantInitializeUdf = 1123 - ErrUdfNoPaths = 1124 - ErrUdfExists = 1125 - ErrCantOpenLibrary = 1126 - ErrCantFindDlEntry = 1127 - ErrFunctionNotDefined = 1128 - ErrHostIsBlocked = 1129 - ErrHostNotPrivileged = 1130 - ErrPasswordAnonymousUser = 1131 - ErrPasswordNotAllowed = 1132 - ErrPasswordNoMatch = 1133 - ErrUpdateInfo = 1134 - ErrCantCreateThread = 1135 - ErrWrongValueCountOnRow = 1136 - ErrCantReopenTable = 1137 - ErrInvalidUseOfNull = 1138 - ErrRegexp = 1139 - ErrMixOfGroupFuncAndFields = 1140 - ErrNonexistingGrant = 1141 - ErrTableaccessDenied = 1142 - ErrColumnaccessDenied = 1143 - ErrIllegalGrantForTable = 1144 - ErrGrantWrongHostOrUser = 1145 - ErrNoSuchTable = 1146 - ErrNonexistingTableGrant = 1147 - ErrNotAllowedCommand = 1148 - ErrSyntax = 1149 - ErrDelayedCantChangeLock = 1150 - ErrTooManyDelayedThreads = 1151 - ErrAbortingConnection = 1152 - ErrNetPacketTooLarge = 1153 - ErrNetReadErrorFromPipe = 1154 - ErrNetFcntl = 1155 - ErrNetPacketsOutOfOrder = 1156 - ErrNetUncompress = 1157 - ErrNetRead = 1158 - ErrNetReadInterrupted = 1159 - ErrNetErrorOnWrite = 1160 - ErrNetWriteInterrupted = 1161 - ErrTooLongString = 1162 - ErrTableCantHandleBlob = 1163 - ErrTableCantHandleAutoIncrement = 1164 - ErrDelayedInsertTableLocked = 1165 - ErrWrongColumnName = 1166 - ErrWrongKeyColumn = 1167 - ErrWrongMrgTable = 1168 - ErrDupUnique = 1169 - ErrBlobKeyWithoutLength = 1170 - ErrPrimaryCantHaveNull = 1171 - ErrTooManyRows = 1172 - ErrRequiresPrimaryKey = 1173 - ErrNoRaidCompiled = 1174 - ErrUpdateWithoutKeyInSafeMode = 1175 - ErrKeyDoesNotExits = 1176 - ErrCheckNoSuchTable = 1177 - ErrCheckNotImplemented = 1178 - ErrCantDoThisDuringAnTransaction = 1179 - ErrErrorDuringCommit = 1180 - ErrErrorDuringRollback = 1181 - ErrErrorDuringFlushLogs = 1182 - ErrErrorDuringCheckpoint = 1183 - ErrNewAbortingConnection = 1184 - ErrDumpNotImplemented = 1185 - ErrFlushMasterBinlogClosed = 1186 - ErrIndexRebuild = 1187 - ErrMaster = 1188 - ErrMasterNetRead = 1189 - ErrMasterNetWrite = 1190 - ErrFtMatchingKeyNotFound = 1191 - ErrLockOrActiveTransaction = 1192 - ErrUnknownSystemVariable = 1193 - ErrCrashedOnUsage = 1194 - ErrCrashedOnRepair = 1195 - ErrWarningNotCompleteRollback = 1196 - ErrTransCacheFull = 1197 - ErrSlaveMustStop = 1198 - ErrSlaveNotRunning = 1199 - ErrBadSlave = 1200 - ErrMasterInfo = 1201 - ErrSlaveThread = 1202 - ErrTooManyUserConnections = 1203 - ErrSetConstantsOnly = 1204 - ErrLockWaitTimeout = 1205 - ErrLockTableFull = 1206 - ErrReadOnlyTransaction = 1207 - ErrDropDbWithReadLock = 1208 - ErrCreateDbWithReadLock = 1209 - ErrWrongArguments = 1210 - ErrNoPermissionToCreateUser = 1211 - ErrUnionTablesInDifferentDir = 1212 - ErrLockDeadlock = 1213 - ErrTableCantHandleFt = 1214 - ErrCannotAddForeign = 1215 - ErrNoReferencedRow = 1216 - ErrRowIsReferenced = 1217 - ErrConnectToMaster = 1218 - ErrQueryOnMaster = 1219 - ErrErrorWhenExecutingCommand = 1220 - ErrWrongUsage = 1221 - ErrWrongNumberOfColumnsInSelect = 1222 - ErrCantUpdateWithReadlock = 1223 - ErrMixingNotAllowed = 1224 - ErrDupArgument = 1225 - ErrUserLimitReached = 1226 - ErrSpecificAccessDenied = 1227 - ErrLocalVariable = 1228 - ErrGlobalVariable = 1229 - ErrNoDefault = 1230 - ErrWrongValueForVar = 1231 - ErrWrongTypeForVar = 1232 - ErrVarCantBeRead = 1233 - ErrCantUseOptionHere = 1234 - ErrNotSupportedYet = 1235 - ErrMasterFatalErrorReadingBinlog = 1236 - ErrSlaveIgnoredTable = 1237 - ErrIncorrectGlobalLocalVar = 1238 - ErrWrongFkDef = 1239 - ErrKeyRefDoNotMatchTableRef = 1240 - ErrOperandColumns = 1241 - ErrSubqueryNo1Row = 1242 - ErrUnknownStmtHandler = 1243 - ErrCorruptHelpDb = 1244 - ErrCyclicReference = 1245 - ErrAutoConvert = 1246 - ErrIllegalReference = 1247 - ErrDerivedMustHaveAlias = 1248 - ErrSelectReduced = 1249 - ErrTablenameNotAllowedHere = 1250 - ErrNotSupportedAuthMode = 1251 - ErrSpatialCantHaveNull = 1252 - ErrCollationCharsetMismatch = 1253 - ErrSlaveWasRunning = 1254 - ErrSlaveWasNotRunning = 1255 - ErrTooBigForUncompress = 1256 - ErrZlibZMem = 1257 - ErrZlibZBuf = 1258 - ErrZlibZData = 1259 - ErrCutValueGroupConcat = 1260 - ErrWarnTooFewRecords = 1261 - ErrWarnTooManyRecords = 1262 - ErrWarnNullToNotnull = 1263 - ErrWarnDataOutOfRange = 1264 - WarnDataTruncated = 1265 - ErrWarnUsingOtherHandler = 1266 - ErrCantAggregate2collations = 1267 - ErrDropUser = 1268 - ErrRevokeGrants = 1269 - ErrCantAggregate3collations = 1270 - ErrCantAggregateNcollations = 1271 - ErrVariableIsNotStruct = 1272 - ErrUnknownCollation = 1273 - ErrSlaveIgnoredSslParams = 1274 - ErrServerIsInSecureAuthMode = 1275 - ErrWarnFieldResolved = 1276 - ErrBadSlaveUntilCond = 1277 - ErrMissingSkipSlave = 1278 - ErrUntilCondIgnored = 1279 - ErrWrongNameForIndex = 1280 - ErrWrongNameForCatalog = 1281 - ErrWarnQcResize = 1282 - ErrBadFtColumn = 1283 - ErrUnknownKeyCache = 1284 - ErrWarnHostnameWontWork = 1285 - ErrUnknownStorageEngine = 1286 - ErrWarnDeprecatedSyntax = 1287 - ErrNonUpdatableTable = 1288 - ErrFeatureDisabled = 1289 - ErrOptionPreventsStatement = 1290 - ErrDuplicatedValueInType = 1291 - ErrTruncatedWrongValue = 1292 - ErrTooMuchAutoTimestampCols = 1293 - ErrInvalidOnUpdate = 1294 - ErrUnsupportedPs = 1295 - ErrGetErrmsg = 1296 - ErrGetTemporaryErrmsg = 1297 - ErrUnknownTimeZone = 1298 - ErrWarnInvalidTimestamp = 1299 - ErrInvalidCharacterString = 1300 - ErrWarnAllowedPacketOverflowed = 1301 - ErrConflictingDeclarations = 1302 - ErrSpNoRecursiveCreate = 1303 - ErrSpAlreadyExists = 1304 - ErrSpDoesNotExist = 1305 - ErrSpDropFailed = 1306 - ErrSpStoreFailed = 1307 - ErrSpLilabelMismatch = 1308 - ErrSpLabelRedefine = 1309 - ErrSpLabelMismatch = 1310 - ErrSpUninitVar = 1311 - ErrSpBadselect = 1312 - ErrSpBadreturn = 1313 - ErrSpBadstatement = 1314 - ErrUpdateLogDeprecatedIgnored = 1315 - ErrUpdateLogDeprecatedTranslated = 1316 - ErrQueryInterrupted = 1317 - ErrSpWrongNoOfArgs = 1318 - ErrSpCondMismatch = 1319 - ErrSpNoreturn = 1320 - ErrSpNoreturnend = 1321 - ErrSpBadCursorQuery = 1322 - ErrSpBadCursorSelect = 1323 - ErrSpCursorMismatch = 1324 - ErrSpCursorAlreadyOpen = 1325 - ErrSpCursorNotOpen = 1326 - ErrSpUndeclaredVar = 1327 - ErrSpWrongNoOfFetchArgs = 1328 - ErrSpFetchNoData = 1329 - ErrSpDupParam = 1330 - ErrSpDupVar = 1331 - ErrSpDupCond = 1332 - ErrSpDupCurs = 1333 - ErrSpCantAlter = 1334 - ErrSpSubselectNyi = 1335 - ErrStmtNotAllowedInSfOrTrg = 1336 - ErrSpVarcondAfterCurshndlr = 1337 - ErrSpCursorAfterHandler = 1338 - ErrSpCaseNotFound = 1339 - ErrFparserTooBigFile = 1340 - ErrFparserBadHeader = 1341 - ErrFparserEOFInComment = 1342 - ErrFparserErrorInParameter = 1343 - ErrFparserEOFInUnknownParameter = 1344 - ErrViewNoExplain = 1345 - ErrFrmUnknownType = 1346 - ErrWrongObject = 1347 - ErrNonupdateableColumn = 1348 - ErrViewSelectDerived = 1349 - ErrViewSelectClause = 1350 - ErrViewSelectVariable = 1351 - ErrViewSelectTmptable = 1352 - ErrViewWrongList = 1353 - ErrWarnViewMerge = 1354 - ErrWarnViewWithoutKey = 1355 - ErrViewInvalid = 1356 - ErrSpNoDropSp = 1357 - ErrSpGotoInHndlr = 1358 - ErrTrgAlreadyExists = 1359 - ErrTrgDoesNotExist = 1360 - ErrTrgOnViewOrTempTable = 1361 - ErrTrgCantChangeRow = 1362 - ErrTrgNoSuchRowInTrg = 1363 - ErrNoDefaultForField = 1364 - ErrDivisionByZero = 1365 - ErrTruncatedWrongValueForField = 1366 - ErrIllegalValueForType = 1367 - ErrViewNonupdCheck = 1368 - ErrViewCheckFailed = 1369 - ErrProcaccessDenied = 1370 - ErrRelayLogFail = 1371 - ErrPasswdLength = 1372 - ErrUnknownTargetBinlog = 1373 - ErrIoErrLogIndexRead = 1374 - ErrBinlogPurgeProhibited = 1375 - ErrFseekFail = 1376 - ErrBinlogPurgeFatalErr = 1377 - ErrLogInUse = 1378 - ErrLogPurgeUnknownErr = 1379 - ErrRelayLogInit = 1380 - ErrNoBinaryLogging = 1381 - ErrReservedSyntax = 1382 - ErrWsasFailed = 1383 - ErrDiffGroupsProc = 1384 - ErrNoGroupForProc = 1385 - ErrOrderWithProc = 1386 - ErrLoggingProhibitChangingOf = 1387 - ErrNoFileMapping = 1388 - ErrWrongMagic = 1389 - ErrPsManyParam = 1390 - ErrKeyPart0 = 1391 - ErrViewChecksum = 1392 - ErrViewMultiupdate = 1393 - ErrViewNoInsertFieldList = 1394 - ErrViewDeleteMergeView = 1395 - ErrCannotUser = 1396 - ErrXaerNota = 1397 - ErrXaerInval = 1398 - ErrXaerRmfail = 1399 - ErrXaerOutside = 1400 - ErrXaerRmerr = 1401 - ErrXaRbrollback = 1402 - ErrNonexistingProcGrant = 1403 - ErrProcAutoGrantFail = 1404 - ErrProcAutoRevokeFail = 1405 - ErrDataTooLong = 1406 - ErrSpBadSQLstate = 1407 - ErrStartup = 1408 - ErrLoadFromFixedSizeRowsToVar = 1409 - ErrCantCreateUserWithGrant = 1410 - ErrWrongValueForType = 1411 - ErrTableDefChanged = 1412 - ErrSpDupHandler = 1413 - ErrSpNotVarArg = 1414 - ErrSpNoRetset = 1415 - ErrCantCreateGeometryObject = 1416 - ErrFailedRoutineBreakBinlog = 1417 - ErrBinlogUnsafeRoutine = 1418 - ErrBinlogCreateRoutineNeedSuper = 1419 - ErrExecStmtWithOpenCursor = 1420 - ErrStmtHasNoOpenCursor = 1421 - ErrCommitNotAllowedInSfOrTrg = 1422 - ErrNoDefaultForViewField = 1423 - ErrSpNoRecursion = 1424 - ErrTooBigScale = 1425 - ErrTooBigPrecision = 1426 - ErrMBiggerThanD = 1427 - ErrWrongLockOfSystemTable = 1428 - ErrConnectToForeignDataSource = 1429 - ErrQueryOnForeignDataSource = 1430 - ErrForeignDataSourceDoesntExist = 1431 - ErrForeignDataStringInvalidCantCreate = 1432 - ErrForeignDataStringInvalid = 1433 - ErrCantCreateFederatedTable = 1434 - ErrTrgInWrongSchema = 1435 - ErrStackOverrunNeedMore = 1436 - ErrTooLongBody = 1437 - ErrWarnCantDropDefaultKeycache = 1438 - ErrTooBigDisplaywidth = 1439 - ErrXaerDupid = 1440 - ErrDatetimeFunctionOverflow = 1441 - ErrCantUpdateUsedTableInSfOrTrg = 1442 - ErrViewPreventUpdate = 1443 - ErrPsNoRecursion = 1444 - ErrSpCantSetAutocommit = 1445 - ErrMalformedDefiner = 1446 - ErrViewFrmNoUser = 1447 - ErrViewOtherUser = 1448 - ErrNoSuchUser = 1449 - ErrForbidSchemaChange = 1450 - ErrRowIsReferenced2 = 1451 - ErrNoReferencedRow2 = 1452 - ErrSpBadVarShadow = 1453 - ErrTrgNoDefiner = 1454 - ErrOldFileFormat = 1455 - ErrSpRecursionLimit = 1456 - ErrSpProcTableCorrupt = 1457 - ErrSpWrongName = 1458 - ErrTableNeedsUpgrade = 1459 - ErrSpNoAggregate = 1460 - ErrMaxPreparedStmtCountReached = 1461 - ErrViewRecursive = 1462 - ErrNonGroupingFieldUsed = 1463 - ErrTableCantHandleSpkeys = 1464 - ErrNoTriggersOnSystemSchema = 1465 - ErrRemovedSpaces = 1466 - ErrAutoincReadFailed = 1467 - ErrUsername = 1468 - ErrHostname = 1469 - ErrWrongStringLength = 1470 - ErrNonInsertableTable = 1471 - ErrAdminWrongMrgTable = 1472 - ErrTooHighLevelOfNestingForSelect = 1473 - ErrNameBecomesEmpty = 1474 - ErrAmbiguousFieldTerm = 1475 - ErrForeignServerExists = 1476 - ErrForeignServerDoesntExist = 1477 - ErrIllegalHaCreateOption = 1478 - ErrPartitionRequiresValues = 1479 - ErrPartitionWrongValues = 1480 - ErrPartitionMaxvalue = 1481 - ErrPartitionSubpartition = 1482 - ErrPartitionSubpartMix = 1483 - ErrPartitionWrongNoPart = 1484 - ErrPartitionWrongNoSubpart = 1485 - ErrWrongExprInPartitionFunc = 1486 - ErrNoConstExprInRangeOrList = 1487 - ErrFieldNotFoundPart = 1488 - ErrListOfFieldsOnlyInHash = 1489 - ErrInconsistentPartitionInfo = 1490 - ErrPartitionFuncNotAllowed = 1491 - ErrPartitionsMustBeDefined = 1492 - ErrRangeNotIncreasing = 1493 - ErrInconsistentTypeOfFunctions = 1494 - ErrMultipleDefConstInListPart = 1495 - ErrPartitionEntry = 1496 - ErrMixHandler = 1497 - ErrPartitionNotDefined = 1498 - ErrTooManyPartitions = 1499 - ErrSubpartition = 1500 - ErrCantCreateHandlerFile = 1501 - ErrBlobFieldInPartFunc = 1502 - ErrUniqueKeyNeedAllFieldsInPf = 1503 - ErrNoParts = 1504 - ErrPartitionMgmtOnNonpartitioned = 1505 - ErrForeignKeyOnPartitioned = 1506 - ErrDropPartitionNonExistent = 1507 - ErrDropLastPartition = 1508 - ErrCoalesceOnlyOnHashPartition = 1509 - ErrReorgHashOnlyOnSameNo = 1510 - ErrReorgNoParam = 1511 - ErrOnlyOnRangeListPartition = 1512 - ErrAddPartitionSubpart = 1513 - ErrAddPartitionNoNewPartition = 1514 - ErrCoalescePartitionNoPartition = 1515 - ErrReorgPartitionNotExist = 1516 - ErrSameNamePartition = 1517 - ErrNoBinlog = 1518 - ErrConsecutiveReorgPartitions = 1519 - ErrReorgOutsideRange = 1520 - ErrPartitionFunctionFailure = 1521 - ErrPartState = 1522 - ErrLimitedPartRange = 1523 - ErrPluginIsNotLoaded = 1524 - ErrWrongValue = 1525 - ErrNoPartitionForGivenValue = 1526 - ErrFilegroupOptionOnlyOnce = 1527 - ErrCreateFilegroupFailed = 1528 - ErrDropFilegroupFailed = 1529 - ErrTablespaceAutoExtend = 1530 - ErrWrongSizeNumber = 1531 - ErrSizeOverflow = 1532 - ErrAlterFilegroupFailed = 1533 - ErrBinlogRowLoggingFailed = 1534 - ErrBinlogRowWrongTableDef = 1535 - ErrBinlogRowRbrToSbr = 1536 - ErrEventAlreadyExists = 1537 - ErrEventStoreFailed = 1538 - ErrEventDoesNotExist = 1539 - ErrEventCantAlter = 1540 - ErrEventDropFailed = 1541 - ErrEventIntervalNotPositiveOrTooBig = 1542 - ErrEventEndsBeforeStarts = 1543 - ErrEventExecTimeInThePast = 1544 - ErrEventOpenTableFailed = 1545 - ErrEventNeitherMExprNorMAt = 1546 - ErrObsoleteColCountDoesntMatchCorrupted = 1547 - ErrObsoleteCannotLoadFromTable = 1548 - ErrEventCannotDelete = 1549 - ErrEventCompile = 1550 - ErrEventSameName = 1551 - ErrEventDataTooLong = 1552 - ErrDropIndexFk = 1553 - ErrWarnDeprecatedSyntaxWithVer = 1554 - ErrCantWriteLockLogTable = 1555 - ErrCantLockLogTable = 1556 - ErrForeignDuplicateKeyOldUnused = 1557 - ErrColCountDoesntMatchPleaseUpdate = 1558 - ErrTempTablePreventsSwitchOutOfRbr = 1559 - ErrStoredFunctionPreventsSwitchBinlogFormat = 1560 - ErrNdbCantSwitchBinlogFormat = 1561 - ErrPartitionNoTemporary = 1562 - ErrPartitionConstDomain = 1563 - ErrPartitionFunctionIsNotAllowed = 1564 - ErrDdlLog = 1565 - ErrNullInValuesLessThan = 1566 - ErrWrongPartitionName = 1567 - ErrCantChangeTxCharacteristics = 1568 - ErrDupEntryAutoincrementCase = 1569 - ErrEventModifyQueue = 1570 - ErrEventSetVar = 1571 - ErrPartitionMerge = 1572 - ErrCantActivateLog = 1573 - ErrRbrNotAvailable = 1574 - ErrBase64Decode = 1575 - ErrEventRecursionForbidden = 1576 - ErrEventsDb = 1577 - ErrOnlyIntegersAllowed = 1578 - ErrUnsuportedLogEngine = 1579 - ErrBadLogStatement = 1580 - ErrCantRenameLogTable = 1581 - ErrWrongParamcountToNativeFct = 1582 - ErrWrongParametersToNativeFct = 1583 - ErrWrongParametersToStoredFct = 1584 - ErrNativeFctNameCollision = 1585 - ErrDupEntryWithKeyName = 1586 - ErrBinlogPurgeEmfile = 1587 - ErrEventCannotCreateInThePast = 1588 - ErrEventCannotAlterInThePast = 1589 - ErrSlaveIncident = 1590 - ErrNoPartitionForGivenValueSilent = 1591 - ErrBinlogUnsafeStatement = 1592 - ErrSlaveFatal = 1593 - ErrSlaveRelayLogReadFailure = 1594 - ErrSlaveRelayLogWriteFailure = 1595 - ErrSlaveCreateEventFailure = 1596 - ErrSlaveMasterComFailure = 1597 - ErrBinlogLoggingImpossible = 1598 - ErrViewNoCreationCtx = 1599 - ErrViewInvalidCreationCtx = 1600 - ErrSrInvalidCreationCtx = 1601 - ErrTrgCorruptedFile = 1602 - ErrTrgNoCreationCtx = 1603 - ErrTrgInvalidCreationCtx = 1604 - ErrEventInvalidCreationCtx = 1605 - ErrTrgCantOpenTable = 1606 - ErrCantCreateSroutine = 1607 - ErrNeverUsed = 1608 - ErrNoFormatDescriptionEventBeforeBinlogStatement = 1609 - ErrSlaveCorruptEvent = 1610 - ErrLoadDataInvalidColumn = 1611 - ErrLogPurgeNoFile = 1612 - ErrXaRbtimeout = 1613 - ErrXaRbdeadlock = 1614 - ErrNeedReprepare = 1615 - ErrDelayedNotSupported = 1616 - WarnNoMasterInfo = 1617 - WarnOptionIgnored = 1618 - WarnPluginDeleteBuiltin = 1619 - WarnPluginBusy = 1620 - ErrVariableIsReadonly = 1621 - ErrWarnEngineTransactionRollback = 1622 - ErrSlaveHeartbeatFailure = 1623 - ErrSlaveHeartbeatValueOutOfRange = 1624 - ErrNdbReplicationSchema = 1625 - ErrConflictFnParse = 1626 - ErrExceptionsWrite = 1627 - ErrTooLongTableComment = 1628 - ErrTooLongFieldComment = 1629 - ErrFuncInexistentNameCollision = 1630 - ErrDatabaseName = 1631 - ErrTableName = 1632 - ErrPartitionName = 1633 - ErrSubpartitionName = 1634 - ErrTemporaryName = 1635 - ErrRenamedName = 1636 - ErrTooManyConcurrentTrxs = 1637 - WarnNonASCIISeparatorNotImplemented = 1638 - ErrDebugSyncTimeout = 1639 - ErrDebugSyncHitLimit = 1640 - ErrDupSignalSet = 1641 - ErrSignalWarn = 1642 - ErrSignalNotFound = 1643 - ErrSignalException = 1644 - ErrResignalWithoutActiveHandler = 1645 - ErrSignalBadConditionType = 1646 - WarnCondItemTruncated = 1647 - ErrCondItemTooLong = 1648 - ErrUnknownLocale = 1649 - ErrSlaveIgnoreServerIds = 1650 - ErrQueryCacheDisabled = 1651 - ErrSameNamePartitionField = 1652 - ErrPartitionColumnList = 1653 - ErrWrongTypeColumnValue = 1654 - ErrTooManyPartitionFuncFields = 1655 - ErrMaxvalueInValuesIn = 1656 - ErrTooManyValues = 1657 - ErrRowSinglePartitionField = 1658 - ErrFieldTypeNotAllowedAsPartitionField = 1659 - ErrPartitionFieldsTooLong = 1660 - ErrBinlogRowEngineAndStmtEngine = 1661 - ErrBinlogRowModeAndStmtEngine = 1662 - ErrBinlogUnsafeAndStmtEngine = 1663 - ErrBinlogRowInjectionAndStmtEngine = 1664 - ErrBinlogStmtModeAndRowEngine = 1665 - ErrBinlogRowInjectionAndStmtMode = 1666 - ErrBinlogMultipleEnginesAndSelfLoggingEngine = 1667 - ErrBinlogUnsafeLimit = 1668 - ErrBinlogUnsafeInsertDelayed = 1669 - ErrBinlogUnsafeSystemTable = 1670 - ErrBinlogUnsafeAutoincColumns = 1671 - ErrBinlogUnsafeUdf = 1672 - ErrBinlogUnsafeSystemVariable = 1673 - ErrBinlogUnsafeSystemFunction = 1674 - ErrBinlogUnsafeNontransAfterTrans = 1675 - ErrMessageAndStatement = 1676 - ErrSlaveConversionFailed = 1677 - ErrSlaveCantCreateConversion = 1678 - ErrInsideTransactionPreventsSwitchBinlogFormat = 1679 - ErrPathLength = 1680 - ErrWarnDeprecatedSyntaxNoReplacement = 1681 - ErrWrongNativeTableStructure = 1682 - ErrWrongPerfschemaUsage = 1683 - ErrWarnISSkippedTable = 1684 - ErrInsideTransactionPreventsSwitchBinlogDirect = 1685 - ErrStoredFunctionPreventsSwitchBinlogDirect = 1686 - ErrSpatialMustHaveGeomCol = 1687 - ErrTooLongIndexComment = 1688 - ErrLockAborted = 1689 - ErrDataOutOfRange = 1690 - ErrWrongSpvarTypeInLimit = 1691 - ErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine = 1692 - ErrBinlogUnsafeMixedStatement = 1693 - ErrInsideTransactionPreventsSwitchSQLLogBin = 1694 - ErrStoredFunctionPreventsSwitchSQLLogBin = 1695 - ErrFailedReadFromParFile = 1696 - ErrValuesIsNotIntType = 1697 - ErrAccessDeniedNoPassword = 1698 - ErrSetPasswordAuthPlugin = 1699 - ErrGrantPluginUserExists = 1700 - ErrTruncateIllegalFk = 1701 - ErrPluginIsPermanent = 1702 - ErrSlaveHeartbeatValueOutOfRangeMin = 1703 - ErrSlaveHeartbeatValueOutOfRangeMax = 1704 - ErrStmtCacheFull = 1705 - ErrMultiUpdateKeyConflict = 1706 - ErrTableNeedsRebuild = 1707 - WarnOptionBelowLimit = 1708 - ErrIndexColumnTooLong = 1709 - ErrErrorInTriggerBody = 1710 - ErrErrorInUnknownTriggerBody = 1711 - ErrIndexCorrupt = 1712 - ErrUndoRecordTooBig = 1713 - ErrBinlogUnsafeInsertIgnoreSelect = 1714 - ErrBinlogUnsafeInsertSelectUpdate = 1715 - ErrBinlogUnsafeReplaceSelect = 1716 - ErrBinlogUnsafeCreateIgnoreSelect = 1717 - ErrBinlogUnsafeCreateReplaceSelect = 1718 - ErrBinlogUnsafeUpdateIgnore = 1719 - ErrPluginNoUninstall = 1720 - ErrPluginNoInstall = 1721 - ErrBinlogUnsafeWriteAutoincSelect = 1722 - ErrBinlogUnsafeCreateSelectAutoinc = 1723 - ErrBinlogUnsafeInsertTwoKeys = 1724 - ErrTableInFkCheck = 1725 - ErrUnsupportedEngine = 1726 - ErrBinlogUnsafeAutoincNotFirst = 1727 - ErrCannotLoadFromTableV2 = 1728 - ErrMasterDelayValueOutOfRange = 1729 - ErrOnlyFdAndRbrEventsAllowedInBinlogStatement = 1730 - ErrPartitionExchangeDifferentOption = 1731 - ErrPartitionExchangePartTable = 1732 - ErrPartitionExchangeTempTable = 1733 - ErrPartitionInsteadOfSubpartition = 1734 - ErrUnknownPartition = 1735 - ErrTablesDifferentMetadata = 1736 - ErrRowDoesNotMatchPartition = 1737 - ErrBinlogCacheSizeGreaterThanMax = 1738 - ErrWarnIndexNotApplicable = 1739 - ErrPartitionExchangeForeignKey = 1740 - ErrNoSuchKeyValue = 1741 - ErrRplInfoDataTooLong = 1742 - ErrNetworkReadEventChecksumFailure = 1743 - ErrBinlogReadEventChecksumFailure = 1744 - ErrBinlogStmtCacheSizeGreaterThanMax = 1745 - ErrCantUpdateTableInCreateTableSelect = 1746 - ErrPartitionClauseOnNonpartitioned = 1747 - ErrRowDoesNotMatchGivenPartitionSet = 1748 - ErrNoSuchPartitionunused = 1749 - ErrChangeRplInfoRepositoryFailure = 1750 - ErrWarningNotCompleteRollbackWithCreatedTempTable = 1751 - ErrWarningNotCompleteRollbackWithDroppedTempTable = 1752 - ErrMtsFeatureIsNotSupported = 1753 - ErrMtsUpdatedDbsGreaterMax = 1754 - ErrMtsCantParallel = 1755 - ErrMtsInconsistentData = 1756 - ErrFulltextNotSupportedWithPartitioning = 1757 - ErrDaInvalidConditionNumber = 1758 - ErrInsecurePlainText = 1759 - ErrInsecureChangeMaster = 1760 - ErrForeignDuplicateKeyWithChildInfo = 1761 - ErrForeignDuplicateKeyWithoutChildInfo = 1762 - ErrSQLthreadWithSecureSlave = 1763 - ErrTableHasNoFt = 1764 - ErrVariableNotSettableInSfOrTrigger = 1765 - ErrVariableNotSettableInTransaction = 1766 - ErrGtidNextIsNotInGtidNextList = 1767 - ErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull = 1768 - ErrSetStatementCannotInvokeFunction = 1769 - ErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull = 1770 - ErrSkippingLoggedTransaction = 1771 - ErrMalformedGtidSetSpecification = 1772 - ErrMalformedGtidSetEncoding = 1773 - ErrMalformedGtidSpecification = 1774 - ErrGnoExhausted = 1775 - ErrBadSlaveAutoPosition = 1776 - ErrAutoPositionRequiresGtidModeOn = 1777 - ErrCantDoImplicitCommitInTrxWhenGtidNextIsSet = 1778 - ErrGtidMode2Or3RequiresEnforceGtidConsistencyOn = 1779 - ErrGtidModeRequiresBinlog = 1780 - ErrCantSetGtidNextToGtidWhenGtidModeIsOff = 1781 - ErrCantSetGtidNextToAnonymousWhenGtidModeIsOn = 1782 - ErrCantSetGtidNextListToNonNullWhenGtidModeIsOff = 1783 - ErrFoundGtidEventWhenGtidModeIsOff = 1784 - ErrGtidUnsafeNonTransactionalTable = 1785 - ErrGtidUnsafeCreateSelect = 1786 - ErrGtidUnsafeCreateDropTemporaryTableInTransaction = 1787 - ErrGtidModeCanOnlyChangeOneStepAtATime = 1788 - ErrMasterHasPurgedRequiredGtids = 1789 - ErrCantSetGtidNextWhenOwningGtid = 1790 - ErrUnknownExplainFormat = 1791 - ErrCantExecuteInReadOnlyTransaction = 1792 - ErrTooLongTablePartitionComment = 1793 - ErrSlaveConfiguration = 1794 - ErrInnodbFtLimit = 1795 - ErrInnodbNoFtTempTable = 1796 - ErrInnodbFtWrongDocidColumn = 1797 - ErrInnodbFtWrongDocidIndex = 1798 - ErrInnodbOnlineLogTooBig = 1799 - ErrUnknownAlterAlgorithm = 1800 - ErrUnknownAlterLock = 1801 - ErrMtsChangeMasterCantRunWithGaps = 1802 - ErrMtsRecoveryFailure = 1803 - ErrMtsResetWorkers = 1804 - ErrColCountDoesntMatchCorruptedV2 = 1805 - ErrSlaveSilentRetryTransaction = 1806 - ErrDiscardFkChecksRunning = 1807 - ErrTableSchemaMismatch = 1808 - ErrTableInSystemTablespace = 1809 - ErrIoRead = 1810 - ErrIoWrite = 1811 - ErrTablespaceMissing = 1812 - ErrTablespaceExists = 1813 - ErrTablespaceDiscarded = 1814 - ErrInternal = 1815 - ErrInnodbImport = 1816 - ErrInnodbIndexCorrupt = 1817 - ErrInvalidYearColumnLength = 1818 - ErrNotValidPassword = 1819 - ErrMustChangePassword = 1820 - ErrFkNoIndexChild = 1821 - ErrFkNoIndexParent = 1822 - ErrFkFailAddSystem = 1823 - ErrFkCannotOpenParent = 1824 - ErrFkIncorrectOption = 1825 - ErrFkDupName = 1826 - ErrPasswordFormat = 1827 - ErrFkColumnCannotDrop = 1828 - ErrFkColumnCannotDropChild = 1829 - ErrFkColumnNotNull = 1830 - ErrDupIndex = 1831 - ErrFkColumnCannotChange = 1832 - ErrFkColumnCannotChangeChild = 1833 - ErrFkCannotDeleteParent = 1834 - ErrMalformedPacket = 1835 - ErrReadOnlyMode = 1836 - ErrGtidNextTypeUndefinedGroup = 1837 - ErrVariableNotSettableInSp = 1838 - ErrCantSetGtidPurgedWhenGtidModeIsOff = 1839 - ErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty = 1840 - ErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty = 1841 - ErrGtidPurgedWasChanged = 1842 - ErrGtidExecutedWasChanged = 1843 - ErrBinlogStmtModeAndNoReplTables = 1844 - ErrAlterOperationNotSupported = 1845 - ErrAlterOperationNotSupportedReason = 1846 - ErrAlterOperationNotSupportedReasonCopy = 1847 - ErrAlterOperationNotSupportedReasonPartition = 1848 - ErrAlterOperationNotSupportedReasonFkRename = 1849 - ErrAlterOperationNotSupportedReasonColumnType = 1850 - ErrAlterOperationNotSupportedReasonFkCheck = 1851 - ErrAlterOperationNotSupportedReasonIgnore = 1852 - ErrAlterOperationNotSupportedReasonNopk = 1853 - ErrAlterOperationNotSupportedReasonAutoinc = 1854 - ErrAlterOperationNotSupportedReasonHiddenFts = 1855 - ErrAlterOperationNotSupportedReasonChangeFts = 1856 - ErrAlterOperationNotSupportedReasonFts = 1857 - ErrSQLSlaveSkipCounterNotSettableInGtidMode = 1858 - ErrDupUnknownInIndex = 1859 - ErrIdentCausesTooLongPath = 1860 - ErrAlterOperationNotSupportedReasonNotNull = 1861 - ErrMustChangePasswordLogin = 1862 - ErrRowInWrongPartition = 1863 - ErrErrorLast = 1863 -) diff --git a/vendor/github.com/pingcap/tidb/mysql/errname.go b/vendor/github.com/pingcap/tidb/mysql/errname.go deleted file mode 100644 index ad11ec746..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/errname.go +++ /dev/null @@ -1,882 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -// MySQLErrName maps error code to MySQL error messages. -var MySQLErrName = map[uint16]string{ - ErrHashchk: "hashchk", - ErrNisamchk: "isamchk", - ErrNo: "NO", - ErrYes: "YES", - ErrCantCreateFile: "Can't create file '%-.200s' (errno: %d - %s)", - ErrCantCreateTable: "Can't create table '%-.200s' (errno: %d)", - ErrCantCreateDb: "Can't create database '%-.192s' (errno: %d)", - ErrDbCreateExists: "Can't create database '%-.192s'; database exists", - ErrDbDropExists: "Can't drop database '%-.192s'; database doesn't exist", - ErrDbDropDelete: "Error dropping database (can't delete '%-.192s', errno: %d)", - ErrDbDropRmdir: "Error dropping database (can't rmdir '%-.192s', errno: %d)", - ErrCantDeleteFile: "Error on delete of '%-.192s' (errno: %d - %s)", - ErrCantFindSystemRec: "Can't read record in system table", - ErrCantGetStat: "Can't get status of '%-.200s' (errno: %d - %s)", - ErrCantGetWd: "Can't get working directory (errno: %d - %s)", - ErrCantLock: "Can't lock file (errno: %d - %s)", - ErrCantOpenFile: "Can't open file: '%-.200s' (errno: %d - %s)", - ErrFileNotFound: "Can't find file: '%-.200s' (errno: %d - %s)", - ErrCantReadDir: "Can't read dir of '%-.192s' (errno: %d - %s)", - ErrCantSetWd: "Can't change dir to '%-.192s' (errno: %d - %s)", - ErrCheckread: "Record has changed since last read in table '%-.192s'", - ErrDiskFull: "Disk full (%s); waiting for someone to free some space... (errno: %d - %s)", - ErrDupKey: "Can't write; duplicate key in table '%-.192s'", - ErrErrorOnClose: "Error on close of '%-.192s' (errno: %d - %s)", - ErrErrorOnRead: "Error reading file '%-.200s' (errno: %d - %s)", - ErrErrorOnRename: "Error on rename of '%-.210s' to '%-.210s' (errno: %d - %s)", - ErrErrorOnWrite: "Error writing file '%-.200s' (errno: %d - %s)", - ErrFileUsed: "'%-.192s' is locked against change", - ErrFilsortAbort: "Sort aborted", - ErrFormNotFound: "View '%-.192s' doesn't exist for '%-.192s'", - ErrGetErrno: "Got error %d from storage engine", - ErrIllegalHa: "Table storage engine for '%-.192s' doesn't have this option", - ErrKeyNotFound: "Can't find record in '%-.192s'", - ErrNotFormFile: "Incorrect information in file: '%-.200s'", - ErrNotKeyfile: "Incorrect key file for table '%-.200s'; try to repair it", - ErrOldKeyfile: "Old key file for table '%-.192s'; repair it!", - ErrOpenAsReadonly: "Table '%-.192s' is read only", - ErrOutofmemory: "Out of memory; restart server and try again (needed %d bytes)", - ErrOutOfSortmemory: "Out of sort memory, consider increasing server sort buffer size", - ErrUnexpectedEOF: "Unexpected EOF found when reading file '%-.192s' (errno: %d - %s)", - ErrConCount: "Too many connections", - ErrOutOfResources: "Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space", - ErrBadHost: "Can't get hostname for your address", - ErrHandshake: "Bad handshake", - ErrDbaccessDenied: "Access denied for user '%-.48s'@'%-.64s' to database '%-.192s'", - ErrAccessDenied: "Access denied for user '%-.48s'@'%-.64s' (using password: %s)", - ErrNoDb: "No database selected", - ErrUnknownCom: "Unknown command", - ErrBadNull: "Column '%-.192s' cannot be null", - ErrBadDb: "Unknown database '%-.192s'", - ErrTableExists: "Table '%-.192s' already exists", - ErrBadTable: "Unknown table '%-.100s'", - ErrNonUniq: "Column '%-.192s' in %-.192s is ambiguous", - ErrServerShutdown: "Server shutdown in progress", - ErrBadField: "Unknown column '%-.192s' in '%-.192s'", - ErrWrongFieldWithGroup: "'%-.192s' isn't in GROUP BY", - ErrWrongGroupField: "Can't group on '%-.192s'", - ErrWrongSumSelect: "Statement has sum functions and columns in same statement", - ErrWrongValueCount: "Column count doesn't match value count", - ErrTooLongIdent: "Identifier name '%-.100s' is too long", - ErrDupFieldname: "Duplicate column name '%-.192s'", - ErrDupKeyname: "Duplicate key name '%-.192s'", - ErrDupEntry: "Duplicate entry '%-.192s' for key %d", - ErrWrongFieldSpec: "Incorrect column specifier for column '%-.192s'", - ErrParse: "%s near '%-.80s' at line %d", - ErrEmptyQuery: "Query was empty", - ErrNonuniqTable: "Not unique table/alias: '%-.192s'", - ErrInvalidDefault: "Invalid default value for '%-.192s'", - ErrMultiplePriKey: "Multiple primary key defined", - ErrTooManyKeys: "Too many keys specified; max %d keys allowed", - ErrTooManyKeyParts: "Too many key parts specified; max %d parts allowed", - ErrTooLongKey: "Specified key was too long; max key length is %d bytes", - ErrKeyColumnDoesNotExits: "Key column '%-.192s' doesn't exist in table", - ErrBlobUsedAsKey: "BLOB column '%-.192s' can't be used in key specification with the used table type", - ErrTooBigFieldlength: "Column length too big for column '%-.192s' (max = %lu); use BLOB or TEXT instead", - ErrWrongAutoKey: "Incorrect table definition; there can be only one auto column and it must be defined as a key", - ErrReady: "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d", - ErrNormalShutdown: "%s: Normal shutdown\n", - ErrGotSignal: "%s: Got signal %d. Aborting!\n", - ErrShutdownComplete: "%s: Shutdown complete\n", - ErrForcingClose: "%s: Forcing close of thread %ld user: '%-.48s'\n", - ErrIpsock: "Can't create IP socket", - ErrNoSuchIndex: "Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table", - ErrWrongFieldTerminators: "Field separator argument is not what is expected; check the manual", - ErrBlobsAndNoTerminated: "You can't use fixed rowlength with BLOBs; please use 'fields terminated by'", - ErrTextfileNotReadable: "The file '%-.128s' must be in the database directory or be readable by all", - ErrFileExists: "File '%-.200s' already exists", - ErrLoadInfo: "Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld", - ErrAlterInfo: "Records: %ld Duplicates: %ld", - ErrWrongSubKey: "Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys", - ErrCantRemoveAllFields: "You can't delete all columns with ALTER TABLE; use DROP TABLE instead", - ErrCantDropFieldOrKey: "Can't DROP '%-.192s'; check that column/key exists", - ErrInsertInfo: "Records: %ld Duplicates: %ld Warnings: %ld", - ErrUpdateTableUsed: "You can't specify target table '%-.192s' for update in FROM clause", - ErrNoSuchThread: "Unknown thread id: %lu", - ErrKillDenied: "You are not owner of thread %lu", - ErrNoTablesUsed: "No tables used", - ErrTooBigSet: "Too many strings for column %-.192s and SET", - ErrNoUniqueLogfile: "Can't generate a unique log-filename %-.200s.(1-999)\n", - ErrTableNotLockedForWrite: "Table '%-.192s' was locked with a READ lock and can't be updated", - ErrTableNotLocked: "Table '%-.192s' was not locked with LOCK TABLES", - ErrBlobCantHaveDefault: "BLOB/TEXT column '%-.192s' can't have a default value", - ErrWrongDbName: "Incorrect database name '%-.100s'", - ErrWrongTableName: "Incorrect table name '%-.100s'", - ErrTooBigSelect: "The SELECT would examine more than MAXJOINSIZE rows; check your WHERE and use SET SQLBIGSELECTS=1 or SET MAXJOINSIZE=# if the SELECT is okay", - ErrUnknown: "Unknown error", - ErrUnknownProcedure: "Unknown procedure '%-.192s'", - ErrWrongParamcountToProcedure: "Incorrect parameter count to procedure '%-.192s'", - ErrWrongParametersToProcedure: "Incorrect parameters to procedure '%-.192s'", - ErrUnknownTable: "Unknown table '%-.192s' in %-.32s", - ErrFieldSpecifiedTwice: "Column '%-.192s' specified twice", - ErrInvalidGroupFuncUse: "Invalid use of group function", - ErrUnsupportedExtension: "Table '%-.192s' uses an extension that doesn't exist in this MySQL version", - ErrTableMustHaveColumns: "A table must have at least 1 column", - ErrRecordFileFull: "The table '%-.192s' is full", - ErrUnknownCharacterSet: "Unknown character set: '%-.64s'", - ErrTooManyTables: "Too many tables; MySQL can only use %d tables in a join", - ErrTooManyFields: "Too many columns", - ErrTooBigRowsize: "Row size too large. The maximum row size for the used table type, not counting BLOBs, is %ld. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs", - ErrStackOverrun: "Thread stack overrun: Used: %ld of a %ld stack. Use 'mysqld --threadStack=#' to specify a bigger stack if needed", - ErrWrongOuterJoin: "Cross dependency found in OUTER JOIN; examine your ON conditions", - ErrNullColumnInIndex: "Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler", - ErrCantFindUdf: "Can't load function '%-.192s'", - ErrCantInitializeUdf: "Can't initialize function '%-.192s'; %-.80s", - ErrUdfNoPaths: "No paths allowed for shared library", - ErrUdfExists: "Function '%-.192s' already exists", - ErrCantOpenLibrary: "Can't open shared library '%-.192s' (errno: %d %-.128s)", - ErrCantFindDlEntry: "Can't find symbol '%-.128s' in library", - ErrFunctionNotDefined: "Function '%-.192s' is not defined", - ErrHostIsBlocked: "Host '%-.64s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'", - ErrHostNotPrivileged: "Host '%-.64s' is not allowed to connect to this MySQL server", - ErrPasswordAnonymousUser: "You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords", - ErrPasswordNotAllowed: "You must have privileges to update tables in the mysql database to be able to change passwords for others", - ErrPasswordNoMatch: "Can't find any matching row in the user table", - ErrUpdateInfo: "Rows matched: %ld Changed: %ld Warnings: %ld", - ErrCantCreateThread: "Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug", - ErrWrongValueCountOnRow: "Column count doesn't match value count at row %ld", - ErrCantReopenTable: "Can't reopen table: '%-.192s'", - ErrInvalidUseOfNull: "Invalid use of NULL value", - ErrRegexp: "Got error '%-.64s' from regexp", - ErrMixOfGroupFuncAndFields: "Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause", - ErrNonexistingGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s'", - ErrTableaccessDenied: "%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s'", - ErrColumnaccessDenied: "%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'", - ErrIllegalGrantForTable: "Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used", - ErrGrantWrongHostOrUser: "The host or user argument to GRANT is too long", - ErrNoSuchTable: "Table '%-.192s.%-.192s' doesn't exist", - ErrNonexistingTableGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s' on table '%-.192s'", - ErrNotAllowedCommand: "The used command is not allowed with this MySQL version", - ErrSyntax: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use", - ErrDelayedCantChangeLock: "Delayed insert thread couldn't get requested lock for table %-.192s", - ErrTooManyDelayedThreads: "Too many delayed threads in use", - ErrAbortingConnection: "Aborted connection %ld to db: '%-.192s' user: '%-.48s' (%-.64s)", - ErrNetPacketTooLarge: "Got a packet bigger than 'maxAllowedPacket' bytes", - ErrNetReadErrorFromPipe: "Got a read error from the connection pipe", - ErrNetFcntl: "Got an error from fcntl()", - ErrNetPacketsOutOfOrder: "Got packets out of order", - ErrNetUncompress: "Couldn't uncompress communication packet", - ErrNetRead: "Got an error reading communication packets", - ErrNetReadInterrupted: "Got timeout reading communication packets", - ErrNetErrorOnWrite: "Got an error writing communication packets", - ErrNetWriteInterrupted: "Got timeout writing communication packets", - ErrTooLongString: "Result string is longer than 'maxAllowedPacket' bytes", - ErrTableCantHandleBlob: "The used table type doesn't support BLOB/TEXT columns", - ErrTableCantHandleAutoIncrement: "The used table type doesn't support AUTOINCREMENT columns", - ErrDelayedInsertTableLocked: "INSERT DELAYED can't be used with table '%-.192s' because it is locked with LOCK TABLES", - ErrWrongColumnName: "Incorrect column name '%-.100s'", - ErrWrongKeyColumn: "The used storage engine can't index column '%-.192s'", - ErrWrongMrgTable: "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist", - ErrDupUnique: "Can't write, because of unique constraint, to table '%-.192s'", - ErrBlobKeyWithoutLength: "BLOB/TEXT column '%-.192s' used in key specification without a key length", - ErrPrimaryCantHaveNull: "All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead", - ErrTooManyRows: "Result consisted of more than one row", - ErrRequiresPrimaryKey: "This table type requires a primary key", - ErrNoRaidCompiled: "This version of MySQL is not compiled with RAID support", - ErrUpdateWithoutKeyInSafeMode: "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", - ErrKeyDoesNotExits: "Key '%-.192s' doesn't exist in table '%-.192s'", - ErrCheckNoSuchTable: "Can't open table", - ErrCheckNotImplemented: "The storage engine for the table doesn't support %s", - ErrCantDoThisDuringAnTransaction: "You are not allowed to execute this command in a transaction", - ErrErrorDuringCommit: "Got error %d during COMMIT", - ErrErrorDuringRollback: "Got error %d during ROLLBACK", - ErrErrorDuringFlushLogs: "Got error %d during FLUSHLOGS", - ErrErrorDuringCheckpoint: "Got error %d during CHECKPOINT", - ErrNewAbortingConnection: "Aborted connection %ld to db: '%-.192s' user: '%-.48s' host: '%-.64s' (%-.64s)", - ErrDumpNotImplemented: "The storage engine for the table does not support binary table dump", - ErrFlushMasterBinlogClosed: "Binlog closed, cannot RESET MASTER", - ErrIndexRebuild: "Failed rebuilding the index of dumped table '%-.192s'", - ErrMaster: "Error from master: '%-.64s'", - ErrMasterNetRead: "Net error reading from master", - ErrMasterNetWrite: "Net error writing to master", - ErrFtMatchingKeyNotFound: "Can't find FULLTEXT index matching the column list", - ErrLockOrActiveTransaction: "Can't execute the given command because you have active locked tables or an active transaction", - ErrUnknownSystemVariable: "Unknown system variable '%-.64s'", - ErrCrashedOnUsage: "Table '%-.192s' is marked as crashed and should be repaired", - ErrCrashedOnRepair: "Table '%-.192s' is marked as crashed and last (automatic?) repair failed", - ErrWarningNotCompleteRollback: "Some non-transactional changed tables couldn't be rolled back", - ErrTransCacheFull: "Multi-statement transaction required more than 'maxBinlogCacheSize' bytes of storage; increase this mysqld variable and try again", - ErrSlaveMustStop: "This operation cannot be performed with a running slave; run STOP SLAVE first", - ErrSlaveNotRunning: "This operation requires a running slave; configure slave and do START SLAVE", - ErrBadSlave: "The server is not configured as slave; fix in config file or with CHANGE MASTER TO", - ErrMasterInfo: "Could not initialize master info structure; more error messages can be found in the MySQL error log", - ErrSlaveThread: "Could not create slave thread; check system resources", - ErrTooManyUserConnections: "User %-.64s already has more than 'maxUserConnections' active connections", - ErrSetConstantsOnly: "You may only use constant expressions with SET", - ErrLockWaitTimeout: "Lock wait timeout exceeded; try restarting transaction", - ErrLockTableFull: "The total number of locks exceeds the lock table size", - ErrReadOnlyTransaction: "Update locks cannot be acquired during a READ UNCOMMITTED transaction", - ErrDropDbWithReadLock: "DROP DATABASE not allowed while thread is holding global read lock", - ErrCreateDbWithReadLock: "CREATE DATABASE not allowed while thread is holding global read lock", - ErrWrongArguments: "Incorrect arguments to %s", - ErrNoPermissionToCreateUser: "'%-.48s'@'%-.64s' is not allowed to create new users", - ErrUnionTablesInDifferentDir: "Incorrect table definition; all MERGE tables must be in the same database", - ErrLockDeadlock: "Deadlock found when trying to get lock; try restarting transaction", - ErrTableCantHandleFt: "The used table type doesn't support FULLTEXT indexes", - ErrCannotAddForeign: "Cannot add foreign key constraint", - ErrNoReferencedRow: "Cannot add or update a child row: a foreign key constraint fails", - ErrRowIsReferenced: "Cannot delete or update a parent row: a foreign key constraint fails", - ErrConnectToMaster: "Error connecting to master: %-.128s", - ErrQueryOnMaster: "Error running query on master: %-.128s", - ErrErrorWhenExecutingCommand: "Error when executing command %s: %-.128s", - ErrWrongUsage: "Incorrect usage of %s and %s", - ErrWrongNumberOfColumnsInSelect: "The used SELECT statements have a different number of columns", - ErrCantUpdateWithReadlock: "Can't execute the query because you have a conflicting read lock", - ErrMixingNotAllowed: "Mixing of transactional and non-transactional tables is disabled", - ErrDupArgument: "Option '%s' used twice in statement", - ErrUserLimitReached: "User '%-.64s' has exceeded the '%s' resource (current value: %ld)", - ErrSpecificAccessDenied: "Access denied; you need (at least one of) the %-.128s privilege(s) for this operation", - ErrLocalVariable: "Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL", - ErrGlobalVariable: "Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL", - ErrNoDefault: "Variable '%-.64s' doesn't have a default value", - ErrWrongValueForVar: "Variable '%-.64s' can't be set to the value of '%-.200s'", - ErrWrongTypeForVar: "Incorrect argument type to variable '%-.64s'", - ErrVarCantBeRead: "Variable '%-.64s' can only be set, not read", - ErrCantUseOptionHere: "Incorrect usage/placement of '%s'", - ErrNotSupportedYet: "This version of MySQL doesn't yet support '%s'", - ErrMasterFatalErrorReadingBinlog: "Got fatal error %d from master when reading data from binary log: '%-.320s'", - ErrSlaveIgnoredTable: "Slave SQL thread ignored the query because of replicate-*-table rules", - ErrIncorrectGlobalLocalVar: "Variable '%-.192s' is a %s variable", - ErrWrongFkDef: "Incorrect foreign key definition for '%-.192s': %s", - ErrKeyRefDoNotMatchTableRef: "Key reference and table reference don't match", - ErrOperandColumns: "Operand should contain %d column(s)", - ErrSubqueryNo1Row: "Subquery returns more than 1 row", - ErrUnknownStmtHandler: "Unknown prepared statement handler (%.*s) given to %s", - ErrCorruptHelpDb: "Help database is corrupt or does not exist", - ErrCyclicReference: "Cyclic reference on subqueries", - ErrAutoConvert: "Converting column '%s' from %s to %s", - ErrIllegalReference: "Reference '%-.64s' not supported (%s)", - ErrDerivedMustHaveAlias: "Every derived table must have its own alias", - ErrSelectReduced: "Select %u was reduced during optimization", - ErrTablenameNotAllowedHere: "Table '%-.192s' from one of the SELECTs cannot be used in %-.32s", - ErrNotSupportedAuthMode: "Client does not support authentication protocol requested by server; consider upgrading MySQL client", - ErrSpatialCantHaveNull: "All parts of a SPATIAL index must be NOT NULL", - ErrCollationCharsetMismatch: "COLLATION '%s' is not valid for CHARACTER SET '%s'", - ErrSlaveWasRunning: "Slave is already running", - ErrSlaveWasNotRunning: "Slave already has been stopped", - ErrTooBigForUncompress: "Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)", - ErrZlibZMem: "ZLIB: Not enough memory", - ErrZlibZBuf: "ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)", - ErrZlibZData: "ZLIB: Input data corrupted", - ErrCutValueGroupConcat: "Row %u was cut by GROUPCONCAT()", - ErrWarnTooFewRecords: "Row %ld doesn't contain data for all columns", - ErrWarnTooManyRecords: "Row %ld was truncated; it contained more data than there were input columns", - ErrWarnNullToNotnull: "Column set to default value; NULL supplied to NOT NULL column '%s' at row %ld", - ErrWarnDataOutOfRange: "Out of range value for column '%s' at row %ld", - WarnDataTruncated: "Data truncated for column '%s' at row %ld", - ErrWarnUsingOtherHandler: "Using storage engine %s for table '%s'", - ErrCantAggregate2collations: "Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'", - ErrDropUser: "Cannot drop one or more of the requested users", - ErrRevokeGrants: "Can't revoke all privileges for one or more of the requested users", - ErrCantAggregate3collations: "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", - ErrCantAggregateNcollations: "Illegal mix of collations for operation '%s'", - ErrVariableIsNotStruct: "Variable '%-.64s' is not a variable component (can't be used as XXXX.variableName)", - ErrUnknownCollation: "Unknown collation: '%-.64s'", - ErrSlaveIgnoredSslParams: "SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started", - ErrServerIsInSecureAuthMode: "Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format", - ErrWarnFieldResolved: "Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d", - ErrBadSlaveUntilCond: "Incorrect parameter or combination of parameters for START SLAVE UNTIL", - ErrMissingSkipSlave: "It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart", - ErrUntilCondIgnored: "SQL thread is not to be started so UNTIL options are ignored", - ErrWrongNameForIndex: "Incorrect index name '%-.100s'", - ErrWrongNameForCatalog: "Incorrect catalog name '%-.100s'", - ErrWarnQcResize: "Query cache failed to set size %lu; new query cache size is %lu", - ErrBadFtColumn: "Column '%-.192s' cannot be part of FULLTEXT index", - ErrUnknownKeyCache: "Unknown key cache '%-.100s'", - ErrWarnHostnameWontWork: "MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work", - ErrUnknownStorageEngine: "Unknown storage engine '%s'", - ErrWarnDeprecatedSyntax: "'%s' is deprecated and will be removed in a future release. Please use %s instead", - ErrNonUpdatableTable: "The target table %-.100s of the %s is not updatable", - ErrFeatureDisabled: "The '%s' feature is disabled; you need MySQL built with '%s' to have it working", - ErrOptionPreventsStatement: "The MySQL server is running with the %s option so it cannot execute this statement", - ErrDuplicatedValueInType: "Column '%-.100s' has duplicated value '%-.64s' in %s", - ErrTruncatedWrongValue: "Truncated incorrect %-.32s value: '%-.128s'", - ErrTooMuchAutoTimestampCols: "Incorrect table definition; there can be only one TIMESTAMP column with CURRENTTIMESTAMP in DEFAULT or ON UPDATE clause", - ErrInvalidOnUpdate: "Invalid ON UPDATE clause for '%-.192s' column", - ErrUnsupportedPs: "This command is not supported in the prepared statement protocol yet", - ErrGetErrmsg: "Got error %d '%-.100s' from %s", - ErrGetTemporaryErrmsg: "Got temporary error %d '%-.100s' from %s", - ErrUnknownTimeZone: "Unknown or incorrect time zone: '%-.64s'", - ErrWarnInvalidTimestamp: "Invalid TIMESTAMP value in column '%s' at row %ld", - ErrInvalidCharacterString: "Invalid %s character string: '%.64s'", - ErrWarnAllowedPacketOverflowed: "Result of %s() was larger than maxAllowedPacket (%ld) - truncated", - ErrConflictingDeclarations: "Conflicting declarations: '%s%s' and '%s%s'", - ErrSpNoRecursiveCreate: "Can't create a %s from within another stored routine", - ErrSpAlreadyExists: "%s %s already exists", - ErrSpDoesNotExist: "%s %s does not exist", - ErrSpDropFailed: "Failed to DROP %s %s", - ErrSpStoreFailed: "Failed to CREATE %s %s", - ErrSpLilabelMismatch: "%s with no matching label: %s", - ErrSpLabelRedefine: "Redefining label %s", - ErrSpLabelMismatch: "End-label %s without match", - ErrSpUninitVar: "Referring to uninitialized variable %s", - ErrSpBadselect: "PROCEDURE %s can't return a result set in the given context", - ErrSpBadreturn: "RETURN is only allowed in a FUNCTION", - ErrSpBadstatement: "%s is not allowed in stored procedures", - ErrUpdateLogDeprecatedIgnored: "The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been ignored.", - ErrUpdateLogDeprecatedTranslated: "The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been translated to SET SQLLOGBIN.", - ErrQueryInterrupted: "Query execution was interrupted", - ErrSpWrongNoOfArgs: "Incorrect number of arguments for %s %s; expected %u, got %u", - ErrSpCondMismatch: "Undefined CONDITION: %s", - ErrSpNoreturn: "No RETURN found in FUNCTION %s", - ErrSpNoreturnend: "FUNCTION %s ended without RETURN", - ErrSpBadCursorQuery: "Cursor statement must be a SELECT", - ErrSpBadCursorSelect: "Cursor SELECT must not have INTO", - ErrSpCursorMismatch: "Undefined CURSOR: %s", - ErrSpCursorAlreadyOpen: "Cursor is already open", - ErrSpCursorNotOpen: "Cursor is not open", - ErrSpUndeclaredVar: "Undeclared variable: %s", - ErrSpWrongNoOfFetchArgs: "Incorrect number of FETCH variables", - ErrSpFetchNoData: "No data - zero rows fetched, selected, or processed", - ErrSpDupParam: "Duplicate parameter: %s", - ErrSpDupVar: "Duplicate variable: %s", - ErrSpDupCond: "Duplicate condition: %s", - ErrSpDupCurs: "Duplicate cursor: %s", - ErrSpCantAlter: "Failed to ALTER %s %s", - ErrSpSubselectNyi: "Subquery value not supported", - ErrStmtNotAllowedInSfOrTrg: "%s is not allowed in stored function or trigger", - ErrSpVarcondAfterCurshndlr: "Variable or condition declaration after cursor or handler declaration", - ErrSpCursorAfterHandler: "Cursor declaration after handler declaration", - ErrSpCaseNotFound: "Case not found for CASE statement", - ErrFparserTooBigFile: "Configuration file '%-.192s' is too big", - ErrFparserBadHeader: "Malformed file type header in file '%-.192s'", - ErrFparserEOFInComment: "Unexpected end of file while parsing comment '%-.200s'", - ErrFparserErrorInParameter: "Error while parsing parameter '%-.192s' (line: '%-.192s')", - ErrFparserEOFInUnknownParameter: "Unexpected end of file while skipping unknown parameter '%-.192s'", - ErrViewNoExplain: "EXPLAIN/SHOW can not be issued; lacking privileges for underlying table", - ErrFrmUnknownType: "File '%-.192s' has unknown type '%-.64s' in its header", - ErrWrongObject: "'%-.192s.%-.192s' is not %s", - ErrNonupdateableColumn: "Column '%-.192s' is not updatable", - ErrViewSelectDerived: "View's SELECT contains a subquery in the FROM clause", - ErrViewSelectClause: "View's SELECT contains a '%s' clause", - ErrViewSelectVariable: "View's SELECT contains a variable or parameter", - ErrViewSelectTmptable: "View's SELECT refers to a temporary table '%-.192s'", - ErrViewWrongList: "View's SELECT and view's field list have different column counts", - ErrWarnViewMerge: "View merge algorithm can't be used here for now (assumed undefined algorithm)", - ErrWarnViewWithoutKey: "View being updated does not have complete key of underlying table in it", - ErrViewInvalid: "View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them", - ErrSpNoDropSp: "Can't drop or alter a %s from within another stored routine", - ErrSpGotoInHndlr: "GOTO is not allowed in a stored procedure handler", - ErrTrgAlreadyExists: "Trigger already exists", - ErrTrgDoesNotExist: "Trigger does not exist", - ErrTrgOnViewOrTempTable: "Trigger's '%-.192s' is view or temporary table", - ErrTrgCantChangeRow: "Updating of %s row is not allowed in %strigger", - ErrTrgNoSuchRowInTrg: "There is no %s row in %s trigger", - ErrNoDefaultForField: "Field '%-.192s' doesn't have a default value", - ErrDivisionByZero: "Division by 0", - ErrTruncatedWrongValueForField: "Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %ld", - ErrIllegalValueForType: "Illegal %s '%-.192s' value found during parsing", - ErrViewNonupdCheck: "CHECK OPTION on non-updatable view '%-.192s.%-.192s'", - ErrViewCheckFailed: "CHECK OPTION failed '%-.192s.%-.192s'", - ErrProcaccessDenied: "%-.16s command denied to user '%-.48s'@'%-.64s' for routine '%-.192s'", - ErrRelayLogFail: "Failed purging old relay logs: %s", - ErrPasswdLength: "Password hash should be a %d-digit hexadecimal number", - ErrUnknownTargetBinlog: "Target log not found in binlog index", - ErrIoErrLogIndexRead: "I/O error reading log index file", - ErrBinlogPurgeProhibited: "Server configuration does not permit binlog purge", - ErrFseekFail: "Failed on fseek()", - ErrBinlogPurgeFatalErr: "Fatal error during log purge", - ErrLogInUse: "A purgeable log is in use, will not purge", - ErrLogPurgeUnknownErr: "Unknown error during log purge", - ErrRelayLogInit: "Failed initializing relay log position: %s", - ErrNoBinaryLogging: "You are not using binary logging", - ErrReservedSyntax: "The '%-.64s' syntax is reserved for purposes internal to the MySQL server", - ErrWsasFailed: "WSAStartup Failed", - ErrDiffGroupsProc: "Can't handle procedures with different groups yet", - ErrNoGroupForProc: "Select must have a group with this procedure", - ErrOrderWithProc: "Can't use ORDER clause with this procedure", - ErrLoggingProhibitChangingOf: "Binary logging and replication forbid changing the global server %s", - ErrNoFileMapping: "Can't map file: %-.200s, errno: %d", - ErrWrongMagic: "Wrong magic in %-.64s", - ErrPsManyParam: "Prepared statement contains too many placeholders", - ErrKeyPart0: "Key part '%-.192s' length cannot be 0", - ErrViewChecksum: "View text checksum failed", - ErrViewMultiupdate: "Can not modify more than one base table through a join view '%-.192s.%-.192s'", - ErrViewNoInsertFieldList: "Can not insert into join view '%-.192s.%-.192s' without fields list", - ErrViewDeleteMergeView: "Can not delete from join view '%-.192s.%-.192s'", - ErrCannotUser: "Operation %s failed for %.256s", - ErrXaerNota: "XAERNOTA: Unknown XID", - ErrXaerInval: "XAERINVAL: Invalid arguments (or unsupported command)", - ErrXaerRmfail: "XAERRMFAIL: The command cannot be executed when global transaction is in the %.64s state", - ErrXaerOutside: "XAEROUTSIDE: Some work is done outside global transaction", - ErrXaerRmerr: "XAERRMERR: Fatal error occurred in the transaction branch - check your data for consistency", - ErrXaRbrollback: "XARBROLLBACK: Transaction branch was rolled back", - ErrNonexistingProcGrant: "There is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'", - ErrProcAutoGrantFail: "Failed to grant EXECUTE and ALTER ROUTINE privileges", - ErrProcAutoRevokeFail: "Failed to revoke all privileges to dropped routine", - ErrDataTooLong: "Data too long for column '%s' at row %ld", - ErrSpBadSQLstate: "Bad SQLSTATE: '%s'", - ErrStartup: "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d %s", - ErrLoadFromFixedSizeRowsToVar: "Can't load value from file with fixed size rows to variable", - ErrCantCreateUserWithGrant: "You are not allowed to create a user with GRANT", - ErrWrongValueForType: "Incorrect %-.32s value: '%-.128s' for function %-.32s", - ErrTableDefChanged: "Table definition has changed, please retry transaction", - ErrSpDupHandler: "Duplicate handler declared in the same block", - ErrSpNotVarArg: "OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger", - ErrSpNoRetset: "Not allowed to return a result set from a %s", - ErrCantCreateGeometryObject: "Cannot get geometry object from data you send to the GEOMETRY field", - ErrFailedRoutineBreakBinlog: "A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes", - ErrBinlogUnsafeRoutine: "This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", - ErrBinlogCreateRoutineNeedSuper: "You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", - ErrExecStmtWithOpenCursor: "You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.", - ErrStmtHasNoOpenCursor: "The statement (%lu) has no open cursor.", - ErrCommitNotAllowedInSfOrTrg: "Explicit or implicit commit is not allowed in stored function or trigger.", - ErrNoDefaultForViewField: "Field of view '%-.192s.%-.192s' underlying table doesn't have a default value", - ErrSpNoRecursion: "Recursive stored functions and triggers are not allowed.", - ErrTooBigScale: "Too big scale %d specified for column '%-.192s'. Maximum is %lu.", - ErrTooBigPrecision: "Too big precision %d specified for column '%-.192s'. Maximum is %lu.", - ErrMBiggerThanD: "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s').", - ErrWrongLockOfSystemTable: "You can't combine write-locking of system tables with other tables or lock types", - ErrConnectToForeignDataSource: "Unable to connect to foreign data source: %.64s", - ErrQueryOnForeignDataSource: "There was a problem processing the query on the foreign data source. Data source : %-.64s", - ErrForeignDataSourceDoesntExist: "The foreign data source you are trying to reference does not exist. Data source : %-.64s", - ErrForeignDataStringInvalidCantCreate: "Can't create federated table. The data source connection string '%-.64s' is not in the correct format", - ErrForeignDataStringInvalid: "The data source connection string '%-.64s' is not in the correct format", - ErrCantCreateFederatedTable: "Can't create federated table. Foreign data src : %-.64s", - ErrTrgInWrongSchema: "Trigger in wrong schema", - ErrStackOverrunNeedMore: "Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Use 'mysqld --threadStack=#' to specify a bigger stack.", - ErrTooLongBody: "Routine body for '%-.100s' is too long", - ErrWarnCantDropDefaultKeycache: "Cannot drop default keycache", - ErrTooBigDisplaywidth: "Display width out of range for column '%-.192s' (max = %lu)", - ErrXaerDupid: "XAERDUPID: The XID already exists", - ErrDatetimeFunctionOverflow: "Datetime function: %-.32s field overflow", - ErrCantUpdateUsedTableInSfOrTrg: "Can't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.", - ErrViewPreventUpdate: "The definition of table '%-.192s' prevents operation %.192s on table '%-.192s'.", - ErrPsNoRecursion: "The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner", - ErrSpCantSetAutocommit: "Not allowed to set autocommit from a stored function or trigger", - ErrMalformedDefiner: "Definer is not fully qualified", - ErrViewFrmNoUser: "View '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!", - ErrViewOtherUser: "You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definer", - ErrNoSuchUser: "The user specified as a definer ('%-.64s'@'%-.64s') does not exist", - ErrForbidSchemaChange: "Changing schema from '%-.192s' to '%-.192s' is not allowed.", - ErrRowIsReferenced2: "Cannot delete or update a parent row: a foreign key constraint fails (%.192s)", - ErrNoReferencedRow2: "Cannot add or update a child row: a foreign key constraint fails (%.192s)", - ErrSpBadVarShadow: "Variable '%-.64s' must be quoted with `...`, or renamed", - ErrTrgNoDefiner: "No definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.", - ErrOldFileFormat: "'%-.192s' has an old format, you should re-create the '%s' object(s)", - ErrSpRecursionLimit: "Recursive limit %d (as set by the maxSpRecursionDepth variable) was exceeded for routine %.192s", - ErrSpProcTableCorrupt: "Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)", - ErrSpWrongName: "Incorrect routine name '%-.192s'", - ErrTableNeedsUpgrade: "Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\"", - ErrSpNoAggregate: "AGGREGATE is not supported for stored functions", - ErrMaxPreparedStmtCountReached: "Can't create more than maxPreparedStmtCount statements (current value: %lu)", - ErrViewRecursive: "`%-.192s`.`%-.192s` contains view recursion", - ErrNonGroupingFieldUsed: "Non-grouping field '%-.192s' is used in %-.64s clause", - ErrTableCantHandleSpkeys: "The used table type doesn't support SPATIAL indexes", - ErrNoTriggersOnSystemSchema: "Triggers can not be created on system tables", - ErrRemovedSpaces: "Leading spaces are removed from name '%s'", - ErrAutoincReadFailed: "Failed to read auto-increment value from storage engine", - ErrUsername: "user name", - ErrHostname: "host name", - ErrWrongStringLength: "String '%-.70s' is too long for %s (should be no longer than %d)", - ErrNonInsertableTable: "The target table %-.100s of the %s is not insertable-into", - ErrAdminWrongMrgTable: "Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist", - ErrTooHighLevelOfNestingForSelect: "Too high level of nesting for select", - ErrNameBecomesEmpty: "Name '%-.64s' has become ''", - ErrAmbiguousFieldTerm: "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY", - ErrForeignServerExists: "The foreign server, %s, you are trying to create already exists.", - ErrForeignServerDoesntExist: "The foreign server name you are trying to reference does not exist. Data source : %-.64s", - ErrIllegalHaCreateOption: "Table storage engine '%-.64s' does not support the create option '%.64s'", - ErrPartitionRequiresValues: "Syntax : %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition", - ErrPartitionWrongValues: "Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition", - ErrPartitionMaxvalue: "MAXVALUE can only be used in last partition definition", - ErrPartitionSubpartition: "Subpartitions can only be hash partitions and by key", - ErrPartitionSubpartMix: "Must define subpartitions on all partitions if on one partition", - ErrPartitionWrongNoPart: "Wrong number of partitions defined, mismatch with previous setting", - ErrPartitionWrongNoSubpart: "Wrong number of subpartitions defined, mismatch with previous setting", - ErrWrongExprInPartitionFunc: "Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed", - ErrNoConstExprInRangeOrList: "Expression in RANGE/LIST VALUES must be constant", - ErrFieldNotFoundPart: "Field in list of fields for partition function not found in table", - ErrListOfFieldsOnlyInHash: "List of fields is only allowed in KEY partitions", - ErrInconsistentPartitionInfo: "The partition info in the frm file is not consistent with what can be written into the frm file", - ErrPartitionFuncNotAllowed: "The %-.192s function returns the wrong type", - ErrPartitionsMustBeDefined: "For %-.64s partitions each partition must be defined", - ErrRangeNotIncreasing: "VALUES LESS THAN value must be strictly increasing for each partition", - ErrInconsistentTypeOfFunctions: "VALUES value must be of same type as partition function", - ErrMultipleDefConstInListPart: "Multiple definition of same constant in list partitioning", - ErrPartitionEntry: "Partitioning can not be used stand-alone in query", - ErrMixHandler: "The mix of handlers in the partitions is not allowed in this version of MySQL", - ErrPartitionNotDefined: "For the partitioned engine it is necessary to define all %-.64s", - ErrTooManyPartitions: "Too many partitions (including subpartitions) were defined", - ErrSubpartition: "It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning", - ErrCantCreateHandlerFile: "Failed to create specific handler file", - ErrBlobFieldInPartFunc: "A BLOB field is not allowed in partition function", - ErrUniqueKeyNeedAllFieldsInPf: "A %-.192s must include all columns in the table's partitioning function", - ErrNoParts: "Number of %-.64s = 0 is not an allowed value", - ErrPartitionMgmtOnNonpartitioned: "Partition management on a not partitioned table is not possible", - ErrForeignKeyOnPartitioned: "Foreign key clause is not yet supported in conjunction with partitioning", - ErrDropPartitionNonExistent: "Error in list of partitions to %-.64s", - ErrDropLastPartition: "Cannot remove all partitions, use DROP TABLE instead", - ErrCoalesceOnlyOnHashPartition: "COALESCE PARTITION can only be used on HASH/KEY partitions", - ErrReorgHashOnlyOnSameNo: "REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers", - ErrReorgNoParam: "REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs", - ErrOnlyOnRangeListPartition: "%-.64s PARTITION can only be used on RANGE/LIST partitions", - ErrAddPartitionSubpart: "Trying to Add partition(s) with wrong number of subpartitions", - ErrAddPartitionNoNewPartition: "At least one partition must be added", - ErrCoalescePartitionNoPartition: "At least one partition must be coalesced", - ErrReorgPartitionNotExist: "More partitions to reorganize than there are partitions", - ErrSameNamePartition: "Duplicate partition name %-.192s", - ErrNoBinlog: "It is not allowed to shut off binlog on this command", - ErrConsecutiveReorgPartitions: "When reorganizing a set of partitions they must be in consecutive order", - ErrReorgOutsideRange: "Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range", - ErrPartitionFunctionFailure: "Partition function not supported in this version for this handler", - ErrPartState: "Partition state cannot be defined from CREATE/ALTER TABLE", - ErrLimitedPartRange: "The %-.64s handler only supports 32 bit integers in VALUES", - ErrPluginIsNotLoaded: "Plugin '%-.192s' is not loaded", - ErrWrongValue: "Incorrect %-.32s value: '%-.128s'", - ErrNoPartitionForGivenValue: "Table has no partition for value %-.64s", - ErrFilegroupOptionOnlyOnce: "It is not allowed to specify %s more than once", - ErrCreateFilegroupFailed: "Failed to create %s", - ErrDropFilegroupFailed: "Failed to drop %s", - ErrTablespaceAutoExtend: "The handler doesn't support autoextend of tablespaces", - ErrWrongSizeNumber: "A size parameter was incorrectly specified, either number or on the form 10M", - ErrSizeOverflow: "The size number was correct but we don't allow the digit part to be more than 2 billion", - ErrAlterFilegroupFailed: "Failed to alter: %s", - ErrBinlogRowLoggingFailed: "Writing one row to the row-based binary log failed", - ErrBinlogRowWrongTableDef: "Table definition on master and slave does not match: %s", - ErrBinlogRowRbrToSbr: "Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events", - ErrEventAlreadyExists: "Event '%-.192s' already exists", - ErrEventStoreFailed: "Failed to store event %s. Error code %d from storage engine.", - ErrEventDoesNotExist: "Unknown event '%-.192s'", - ErrEventCantAlter: "Failed to alter event '%-.192s'", - ErrEventDropFailed: "Failed to drop %s", - ErrEventIntervalNotPositiveOrTooBig: "INTERVAL is either not positive or too big", - ErrEventEndsBeforeStarts: "ENDS is either invalid or before STARTS", - ErrEventExecTimeInThePast: "Event execution time is in the past. Event has been disabled", - ErrEventOpenTableFailed: "Failed to open mysql.event", - ErrEventNeitherMExprNorMAt: "No datetime expression provided", - ErrObsoleteColCountDoesntMatchCorrupted: "Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted", - ErrObsoleteCannotLoadFromTable: "Cannot load from mysql.%s. The table is probably corrupted", - ErrEventCannotDelete: "Failed to delete the event from mysql.event", - ErrEventCompile: "Error during compilation of event's body", - ErrEventSameName: "Same old and new event name", - ErrEventDataTooLong: "Data for column '%s' too long", - ErrDropIndexFk: "Cannot drop index '%-.192s': needed in a foreign key constraint", - ErrWarnDeprecatedSyntaxWithVer: "The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead", - ErrCantWriteLockLogTable: "You can't write-lock a log table. Only read access is possible", - ErrCantLockLogTable: "You can't use locks with log tables.", - ErrForeignDuplicateKeyOldUnused: "Upholding foreign key constraints for table '%.192s', entry '%-.192s', key %d would lead to a duplicate entry", - ErrColCountDoesntMatchPleaseUpdate: "Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysqlUpgrade to fix this error.", - ErrTempTablePreventsSwitchOutOfRbr: "Cannot switch out of the row-based binary log format when the session has open temporary tables", - ErrStoredFunctionPreventsSwitchBinlogFormat: "Cannot change the binary logging format inside a stored function or trigger", - ErrNdbCantSwitchBinlogFormat: "The NDB cluster engine does not support changing the binlog format on the fly yet", - ErrPartitionNoTemporary: "Cannot create temporary table with partitions", - ErrPartitionConstDomain: "Partition constant is out of partition function domain", - ErrPartitionFunctionIsNotAllowed: "This partition function is not allowed", - ErrDdlLog: "Error in DDL log", - ErrNullInValuesLessThan: "Not allowed to use NULL value in VALUES LESS THAN", - ErrWrongPartitionName: "Incorrect partition name", - ErrCantChangeTxCharacteristics: "Transaction characteristics can't be changed while a transaction is in progress", - ErrDupEntryAutoincrementCase: "ALTER TABLE causes autoIncrement resequencing, resulting in duplicate entry '%-.192s' for key '%-.192s'", - ErrEventModifyQueue: "Internal scheduler error %d", - ErrEventSetVar: "Error during starting/stopping of the scheduler. Error code %u", - ErrPartitionMerge: "Engine cannot be used in partitioned tables", - ErrCantActivateLog: "Cannot activate '%-.64s' log", - ErrRbrNotAvailable: "The server was not built with row-based replication", - ErrBase64Decode: "Decoding of base64 string failed", - ErrEventRecursionForbidden: "Recursion of EVENT DDL statements is forbidden when body is present", - ErrEventsDb: "Cannot proceed because system tables used by Event Scheduler were found damaged at server start", - ErrOnlyIntegersAllowed: "Only integers allowed as number here", - ErrUnsuportedLogEngine: "This storage engine cannot be used for log tables\"", - ErrBadLogStatement: "You cannot '%s' a log table if logging is enabled", - ErrCantRenameLogTable: "Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'", - ErrWrongParamcountToNativeFct: "Incorrect parameter count in the call to native function '%-.192s'", - ErrWrongParametersToNativeFct: "Incorrect parameters in the call to native function '%-.192s'", - ErrWrongParametersToStoredFct: "Incorrect parameters in the call to stored function '%-.192s'", - ErrNativeFctNameCollision: "This function '%-.192s' has the same name as a native function", - ErrDupEntryWithKeyName: "Duplicate entry '%-.64s' for key '%-.192s'", - ErrBinlogPurgeEmfile: "Too many files opened, please execute the command again", - ErrEventCannotCreateInThePast: "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.", - ErrEventCannotAlterInThePast: "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future.", - ErrSlaveIncident: "The incident %s occured on the master. Message: %-.64s", - ErrNoPartitionForGivenValueSilent: "Table has no partition for some existing values", - ErrBinlogUnsafeStatement: "Unsafe statement written to the binary log using statement format since BINLOGFORMAT = STATEMENT. %s", - ErrSlaveFatal: "Fatal : %s", - ErrSlaveRelayLogReadFailure: "Relay log read failure: %s", - ErrSlaveRelayLogWriteFailure: "Relay log write failure: %s", - ErrSlaveCreateEventFailure: "Failed to create %s", - ErrSlaveMasterComFailure: "Master command %s failed: %s", - ErrBinlogLoggingImpossible: "Binary logging not possible. Message: %s", - ErrViewNoCreationCtx: "View `%-.64s`.`%-.64s` has no creation context", - ErrViewInvalidCreationCtx: "Creation context of view `%-.64s`.`%-.64s' is invalid", - ErrSrInvalidCreationCtx: "Creation context of stored routine `%-.64s`.`%-.64s` is invalid", - ErrTrgCorruptedFile: "Corrupted TRG file for table `%-.64s`.`%-.64s`", - ErrTrgNoCreationCtx: "Triggers for table `%-.64s`.`%-.64s` have no creation context", - ErrTrgInvalidCreationCtx: "Trigger creation context of table `%-.64s`.`%-.64s` is invalid", - ErrEventInvalidCreationCtx: "Creation context of event `%-.64s`.`%-.64s` is invalid", - ErrTrgCantOpenTable: "Cannot open table for trigger `%-.64s`.`%-.64s`", - ErrCantCreateSroutine: "Cannot create stored routine `%-.64s`. Check warnings", - ErrNeverUsed: "Ambiguous slave modes combination. %s", - ErrNoFormatDescriptionEventBeforeBinlogStatement: "The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.", - ErrSlaveCorruptEvent: "Corrupted replication event was detected", - ErrLoadDataInvalidColumn: "Invalid column reference (%-.64s) in LOAD DATA", - ErrLogPurgeNoFile: "Being purged log %s was not found", - ErrXaRbtimeout: "XARBTIMEOUT: Transaction branch was rolled back: took too long", - ErrXaRbdeadlock: "XARBDEADLOCK: Transaction branch was rolled back: deadlock was detected", - ErrNeedReprepare: "Prepared statement needs to be re-prepared", - ErrDelayedNotSupported: "DELAYED option not supported for table '%-.192s'", - WarnNoMasterInfo: "The master info structure does not exist", - WarnOptionIgnored: "<%-.64s> option ignored", - WarnPluginDeleteBuiltin: "Built-in plugins cannot be deleted", - WarnPluginBusy: "Plugin is busy and will be uninstalled on shutdown", - ErrVariableIsReadonly: "%s variable '%s' is read-only. Use SET %s to assign the value", - ErrWarnEngineTransactionRollback: "Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted", - ErrSlaveHeartbeatFailure: "Unexpected master's heartbeat data: %s", - ErrSlaveHeartbeatValueOutOfRange: "The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds).", - ErrNdbReplicationSchema: "Bad schema for mysql.ndbReplication table. Message: %-.64s", - ErrConflictFnParse: "Error in parsing conflict function. Message: %-.64s", - ErrExceptionsWrite: "Write to exceptions table failed. Message: %-.128s\"", - ErrTooLongTableComment: "Comment for table '%-.64s' is too long (max = %lu)", - ErrTooLongFieldComment: "Comment for field '%-.64s' is too long (max = %lu)", - ErrFuncInexistentNameCollision: "FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual", - ErrDatabaseName: "Database", - ErrTableName: "Table", - ErrPartitionName: "Partition", - ErrSubpartitionName: "Subpartition", - ErrTemporaryName: "Temporary", - ErrRenamedName: "Renamed", - ErrTooManyConcurrentTrxs: "Too many active concurrent transactions", - WarnNonASCIISeparatorNotImplemented: "Non-ASCII separator arguments are not fully supported", - ErrDebugSyncTimeout: "debug sync point wait timed out", - ErrDebugSyncHitLimit: "debug sync point hit limit reached", - ErrDupSignalSet: "Duplicate condition information item '%s'", - ErrSignalWarn: "Unhandled user-defined warning condition", - ErrSignalNotFound: "Unhandled user-defined not found condition", - ErrSignalException: "Unhandled user-defined exception condition", - ErrResignalWithoutActiveHandler: "RESIGNAL when handler not active", - ErrSignalBadConditionType: "SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE", - WarnCondItemTruncated: "Data truncated for condition item '%s'", - ErrCondItemTooLong: "Data too long for condition item '%s'", - ErrUnknownLocale: "Unknown locale: '%-.64s'", - ErrSlaveIgnoreServerIds: "The requested server id %d clashes with the slave startup option --replicate-same-server-id", - ErrQueryCacheDisabled: "Query cache is disabled; restart the server with queryCacheType=1 to enable it", - ErrSameNamePartitionField: "Duplicate partition field name '%-.192s'", - ErrPartitionColumnList: "Inconsistency in usage of column lists for partitioning", - ErrWrongTypeColumnValue: "Partition column values of incorrect type", - ErrTooManyPartitionFuncFields: "Too many fields in '%-.192s'", - ErrMaxvalueInValuesIn: "Cannot use MAXVALUE as value in VALUES IN", - ErrTooManyValues: "Cannot have more than one value for this type of %-.64s partitioning", - ErrRowSinglePartitionField: "Row expressions in VALUES IN only allowed for multi-field column partitioning", - ErrFieldTypeNotAllowedAsPartitionField: "Field '%-.192s' is of a not allowed type for this type of partitioning", - ErrPartitionFieldsTooLong: "The total length of the partitioning fields is too large", - ErrBinlogRowEngineAndStmtEngine: "Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved.", - ErrBinlogRowModeAndStmtEngine: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = ROW and at least one table uses a storage engine limited to statement-based logging.", - ErrBinlogUnsafeAndStmtEngine: "Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOGFORMAT = MIXED. %s", - ErrBinlogRowInjectionAndStmtEngine: "Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging.", - ErrBinlogStmtModeAndRowEngine: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s", - ErrBinlogRowInjectionAndStmtMode: "Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOGFORMAT = STATEMENT.", - ErrBinlogMultipleEnginesAndSelfLoggingEngine: "Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.", - ErrBinlogUnsafeLimit: "The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.", - ErrBinlogUnsafeInsertDelayed: "The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.", - ErrBinlogUnsafeSystemTable: "The statement is unsafe because it uses the general log, slow query log, or performanceSchema table(s). This is unsafe because system tables may differ on slaves.", - ErrBinlogUnsafeAutoincColumns: "Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTOINCREMENT column. Inserted values cannot be logged correctly.", - ErrBinlogUnsafeUdf: "Statement is unsafe because it uses a UDF which may not return the same value on the slave.", - ErrBinlogUnsafeSystemVariable: "Statement is unsafe because it uses a system variable that may have a different value on the slave.", - ErrBinlogUnsafeSystemFunction: "Statement is unsafe because it uses a system function that may return a different value on the slave.", - ErrBinlogUnsafeNontransAfterTrans: "Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.", - ErrMessageAndStatement: "%s Statement: %s", - ErrSlaveConversionFailed: "Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.32s' to type '%-.32s'", - ErrSlaveCantCreateConversion: "Can't create conversion table for table '%-.192s.%-.192s'", - ErrInsideTransactionPreventsSwitchBinlogFormat: "Cannot modify @@session.binlogFormat inside a transaction", - ErrPathLength: "The path specified for %.64s is too long.", - ErrWarnDeprecatedSyntaxNoReplacement: "'%s' is deprecated and will be removed in a future release.", - ErrWrongNativeTableStructure: "Native table '%-.64s'.'%-.64s' has the wrong structure", - ErrWrongPerfschemaUsage: "Invalid performanceSchema usage.", - ErrWarnISSkippedTable: "Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement", - ErrInsideTransactionPreventsSwitchBinlogDirect: "Cannot modify @@session.binlogDirectNonTransactionalUpdates inside a transaction", - ErrStoredFunctionPreventsSwitchBinlogDirect: "Cannot change the binlog direct flag inside a stored function or trigger", - ErrSpatialMustHaveGeomCol: "A SPATIAL index may only contain a geometrical type column", - ErrTooLongIndexComment: "Comment for index '%-.64s' is too long (max = %lu)", - ErrLockAborted: "Wait on a lock was aborted due to a pending exclusive lock", - ErrDataOutOfRange: "%s value is out of range in '%s'", - ErrWrongSpvarTypeInLimit: "A variable of a non-integer based type in LIMIT clause", - ErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine: "Mixing self-logging and non-self-logging engines in a statement is unsafe.", - ErrBinlogUnsafeMixedStatement: "Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.", - ErrInsideTransactionPreventsSwitchSQLLogBin: "Cannot modify @@session.sqlLogBin inside a transaction", - ErrStoredFunctionPreventsSwitchSQLLogBin: "Cannot change the sqlLogBin inside a stored function or trigger", - ErrFailedReadFromParFile: "Failed to read from the .par file", - ErrValuesIsNotIntType: "VALUES value for partition '%-.64s' must have type INT", - ErrAccessDeniedNoPassword: "Access denied for user '%-.48s'@'%-.64s'", - ErrSetPasswordAuthPlugin: "SET PASSWORD has no significance for users authenticating via plugins", - ErrGrantPluginUserExists: "GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists", - ErrTruncateIllegalFk: "Cannot truncate a table referenced in a foreign key constraint (%.192s)", - ErrPluginIsPermanent: "Plugin '%s' is forcePlusPermanent and can not be unloaded", - ErrSlaveHeartbeatValueOutOfRangeMin: "The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled.", - ErrSlaveHeartbeatValueOutOfRangeMax: "The requested value for the heartbeat period exceeds the value of `slaveNetTimeout' seconds. A sensible value for the period should be less than the timeout.", - ErrStmtCacheFull: "Multi-row statements required more than 'maxBinlogStmtCacheSize' bytes of storage; increase this mysqld variable and try again", - ErrMultiUpdateKeyConflict: "Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'.", - ErrTableNeedsRebuild: "Table rebuild required. Please do \"ALTER TABLE `%-.32s` FORCE\" or dump/reload to fix it!", - WarnOptionBelowLimit: "The value of '%s' should be no less than the value of '%s'", - ErrIndexColumnTooLong: "Index column size too large. The maximum column size is %lu bytes.", - ErrErrorInTriggerBody: "Trigger '%-.64s' has an error in its body: '%-.256s'", - ErrErrorInUnknownTriggerBody: "Unknown trigger has an error in its body: '%-.256s'", - ErrIndexCorrupt: "Index %s is corrupted", - ErrUndoRecordTooBig: "Undo log record is too big.", - ErrBinlogUnsafeInsertIgnoreSelect: "INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeInsertSelectUpdate: "INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeReplaceSelect: "REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateIgnoreSelect: "CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateReplaceSelect: "CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeUpdateIgnore: "UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", - ErrPluginNoUninstall: "Plugin '%s' is marked as not dynamically uninstallable. You have to stop the server to uninstall it.", - ErrPluginNoInstall: "Plugin '%s' is marked as not dynamically installable. You have to stop the server to install it.", - ErrBinlogUnsafeWriteAutoincSelect: "Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeCreateSelectAutoinc: "CREATE TABLE... SELECT... on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave.", - ErrBinlogUnsafeInsertTwoKeys: "INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe", - ErrTableInFkCheck: "Table is being used in foreign key check.", - ErrUnsupportedEngine: "Storage engine '%s' does not support system tables. [%s.%s]", - ErrBinlogUnsafeAutoincNotFirst: "INSERT into autoincrement field which is not the first part in the composed primary key is unsafe.", - ErrCannotLoadFromTableV2: "Cannot load from %s.%s. The table is probably corrupted", - ErrMasterDelayValueOutOfRange: "The requested value %u for the master delay exceeds the maximum %u", - ErrOnlyFdAndRbrEventsAllowedInBinlogStatement: "Only FormatDescriptionLogEvent and row events are allowed in BINLOG statements (but %s was provided)", - ErrPartitionExchangeDifferentOption: "Non matching attribute '%-.64s' between partition and table", - ErrPartitionExchangePartTable: "Table to exchange with partition is partitioned: '%-.64s'", - ErrPartitionExchangeTempTable: "Table to exchange with partition is temporary: '%-.64s'", - ErrPartitionInsteadOfSubpartition: "Subpartitioned table, use subpartition instead of partition", - ErrUnknownPartition: "Unknown partition '%-.64s' in table '%-.64s'", - ErrTablesDifferentMetadata: "Tables have different definitions", - ErrRowDoesNotMatchPartition: "Found a row that does not match the partition", - ErrBinlogCacheSizeGreaterThanMax: "Option binlogCacheSize (%lu) is greater than maxBinlogCacheSize (%lu); setting binlogCacheSize equal to maxBinlogCacheSize.", - ErrWarnIndexNotApplicable: "Cannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'", - ErrPartitionExchangeForeignKey: "Table to exchange with partition has foreign key references: '%-.64s'", - ErrNoSuchKeyValue: "Key value '%-.192s' was not found in table '%-.192s.%-.192s'", - ErrRplInfoDataTooLong: "Data for column '%s' too long", - ErrNetworkReadEventChecksumFailure: "Replication event checksum verification failed while reading from network.", - ErrBinlogReadEventChecksumFailure: "Replication event checksum verification failed while reading from a log file.", - ErrBinlogStmtCacheSizeGreaterThanMax: "Option binlogStmtCacheSize (%lu) is greater than maxBinlogStmtCacheSize (%lu); setting binlogStmtCacheSize equal to maxBinlogStmtCacheSize.", - ErrCantUpdateTableInCreateTableSelect: "Can't update table '%-.192s' while '%-.192s' is being created.", - ErrPartitionClauseOnNonpartitioned: "PARTITION () clause on non partitioned table", - ErrRowDoesNotMatchGivenPartitionSet: "Found a row not matching the given partition set", - ErrNoSuchPartitionunused: "partition '%-.64s' doesn't exist", - ErrChangeRplInfoRepositoryFailure: "Failure while changing the type of replication repository: %s.", - ErrWarningNotCompleteRollbackWithCreatedTempTable: "The creation of some temporary tables could not be rolled back.", - ErrWarningNotCompleteRollbackWithDroppedTempTable: "Some temporary tables were dropped, but these operations could not be rolled back.", - ErrMtsFeatureIsNotSupported: "%s is not supported in multi-threaded slave mode. %s", - ErrMtsUpdatedDbsGreaterMax: "The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata.", - ErrMtsCantParallel: "Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s.", - ErrMtsInconsistentData: "%s", - ErrFulltextNotSupportedWithPartitioning: "FULLTEXT index is not supported for partitioned tables.", - ErrDaInvalidConditionNumber: "Invalid condition number", - ErrInsecurePlainText: "Sending passwords in plain text without SSL/TLS is extremely insecure.", - ErrInsecureChangeMaster: "Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.", - ErrForeignDuplicateKeyWithChildInfo: "Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'", - ErrForeignDuplicateKeyWithoutChildInfo: "Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child table", - ErrSQLthreadWithSecureSlave: "Setting authentication options is not possible when only the Slave SQL Thread is being started.", - ErrTableHasNoFt: "The table does not have FULLTEXT index to support this query", - ErrVariableNotSettableInSfOrTrigger: "The system variable %.200s cannot be set in stored functions or triggers.", - ErrVariableNotSettableInTransaction: "The system variable %.200s cannot be set when there is an ongoing transaction.", - ErrGtidNextIsNotInGtidNextList: "The system variable @@SESSION.GTIDNEXT has the value %.200s, which is not listed in @@SESSION.GTIDNEXTLIST.", - ErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull: "When @@SESSION.GTIDNEXTLIST == NULL, the system variable @@SESSION.GTIDNEXT cannot change inside a transaction.", - ErrSetStatementCannotInvokeFunction: "The statement 'SET %.200s' cannot invoke a stored function.", - ErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull: "The system variable @@SESSION.GTIDNEXT cannot be 'AUTOMATIC' when @@SESSION.GTIDNEXTLIST is non-NULL.", - ErrSkippingLoggedTransaction: "Skipping transaction %.200s because it has already been executed and logged.", - ErrMalformedGtidSetSpecification: "Malformed GTID set specification '%.200s'.", - ErrMalformedGtidSetEncoding: "Malformed GTID set encoding.", - ErrMalformedGtidSpecification: "Malformed GTID specification '%.200s'.", - ErrGnoExhausted: "Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new serverUuid.", - ErrBadSlaveAutoPosition: "Parameters MASTERLOGFILE, MASTERLOGPOS, RELAYLOGFILE and RELAYLOGPOS cannot be set when MASTERAUTOPOSITION is active.", - ErrAutoPositionRequiresGtidModeOn: "CHANGE MASTER TO MASTERAUTOPOSITION = 1 can only be executed when @@GLOBAL.GTIDMODE = ON.", - ErrCantDoImplicitCommitInTrxWhenGtidNextIsSet: "Cannot execute statements with implicit commit inside a transaction when @@SESSION.GTIDNEXT != AUTOMATIC or @@SESSION.GTIDNEXTLIST != NULL.", - ErrGtidMode2Or3RequiresEnforceGtidConsistencyOn: "@@GLOBAL.GTIDMODE = ON or UPGRADESTEP2 requires @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", - ErrGtidModeRequiresBinlog: "@@GLOBAL.GTIDMODE = ON or UPGRADESTEP1 or UPGRADESTEP2 requires --log-bin and --log-slave-updates.", - ErrCantSetGtidNextToGtidWhenGtidModeIsOff: "@@SESSION.GTIDNEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTIDMODE = OFF.", - ErrCantSetGtidNextToAnonymousWhenGtidModeIsOn: "@@SESSION.GTIDNEXT cannot be set to ANONYMOUS when @@GLOBAL.GTIDMODE = ON.", - ErrCantSetGtidNextListToNonNullWhenGtidModeIsOff: "@@SESSION.GTIDNEXTLIST cannot be set to a non-NULL value when @@GLOBAL.GTIDMODE = OFF.", - ErrFoundGtidEventWhenGtidModeIsOff: "Found a GtidLogEvent or PreviousGtidsLogEvent when @@GLOBAL.GTIDMODE = OFF.", - ErrGtidUnsafeNonTransactionalTable: "When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.", - ErrGtidUnsafeCreateSelect: "CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", - ErrGtidUnsafeCreateDropTemporaryTableInTransaction: "When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.", - ErrGtidModeCanOnlyChangeOneStepAtATime: "The value of @@GLOBAL.GTIDMODE can only change one step at a time: OFF <-> UPGRADESTEP1 <-> UPGRADESTEP2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions.", - ErrMasterHasPurgedRequiredGtids: "The slave is connecting using CHANGE MASTER TO MASTERAUTOPOSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.", - ErrCantSetGtidNextWhenOwningGtid: "@@SESSION.GTIDNEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK.", - ErrUnknownExplainFormat: "Unknown EXPLAIN format name: '%s'", - ErrCantExecuteInReadOnlyTransaction: "Cannot execute statement in a READ ONLY transaction.", - ErrTooLongTablePartitionComment: "Comment for table partition '%-.64s' is too long (max = %lu)", - ErrSlaveConfiguration: "Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.", - ErrInnodbFtLimit: "InnoDB presently supports one FULLTEXT index creation at a time", - ErrInnodbNoFtTempTable: "Cannot create FULLTEXT index on temporary InnoDB table", - ErrInnodbFtWrongDocidColumn: "Column '%-.192s' is of wrong type for an InnoDB FULLTEXT index", - ErrInnodbFtWrongDocidIndex: "Index '%-.192s' is of wrong type for an InnoDB FULLTEXT index", - ErrInnodbOnlineLogTooBig: "Creating index '%-.192s' required more than 'innodbOnlineAlterLogMaxSize' bytes of modification log. Please try again.", - ErrUnknownAlterAlgorithm: "Unknown ALGORITHM '%s'", - ErrUnknownAlterLock: "Unknown LOCK type '%s'", - ErrMtsChangeMasterCantRunWithGaps: "CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL.", - ErrMtsRecoveryFailure: "Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MySQL error log.", - ErrMtsResetWorkers: "Cannot clean up worker info tables. Additional error messages can be found in the MySQL error log.", - ErrColCountDoesntMatchCorruptedV2: "Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted", - ErrSlaveSilentRetryTransaction: "Slave must silently retry current transaction", - ErrDiscardFkChecksRunning: "There is a foreign key check running on table '%-.192s'. Cannot discard the table.", - ErrTableSchemaMismatch: "Schema mismatch (%s)", - ErrTableInSystemTablespace: "Table '%-.192s' in system tablespace", - ErrIoRead: "IO Read : (%lu, %s) %s", - ErrIoWrite: "IO Write : (%lu, %s) %s", - ErrTablespaceMissing: "Tablespace is missing for table '%-.192s'", - ErrTablespaceExists: "Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORT.", - ErrTablespaceDiscarded: "Tablespace has been discarded for table '%-.192s'", - ErrInternal: "Internal : %s", - ErrInnodbImport: "ALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %lu : '%s'", - ErrInnodbIndexCorrupt: "Index corrupt: %s", - ErrInvalidYearColumnLength: "YEAR(%lu) column type is deprecated. Creating YEAR(4) column instead.", - ErrNotValidPassword: "Your password does not satisfy the current policy requirements", - ErrMustChangePassword: "You must SET PASSWORD before executing this statement", - ErrFkNoIndexChild: "Failed to add the foreign key constaint. Missing index for constraint '%s' in the foreign table '%s'", - ErrFkNoIndexParent: "Failed to add the foreign key constaint. Missing index for constraint '%s' in the referenced table '%s'", - ErrFkFailAddSystem: "Failed to add the foreign key constraint '%s' to system tables", - ErrFkCannotOpenParent: "Failed to open the referenced table '%s'", - ErrFkIncorrectOption: "Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'", - ErrFkDupName: "Duplicate foreign key constraint name '%s'", - ErrPasswordFormat: "The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.", - ErrFkColumnCannotDrop: "Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'", - ErrFkColumnCannotDropChild: "Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrFkColumnNotNull: "Column '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULL", - ErrDupIndex: "Duplicate index '%-.64s' defined on the table '%-.64s.%-.64s'. This is deprecated and will be disallowed in a future release.", - ErrFkColumnCannotChange: "Cannot change column '%-.192s': used in a foreign key constraint '%-.192s'", - ErrFkColumnCannotChangeChild: "Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrFkCannotDeleteParent: "Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'", - ErrMalformedPacket: "Malformed communication packet.", - ErrReadOnlyMode: "Running in read-only mode", - ErrGtidNextTypeUndefinedGroup: "When @@SESSION.GTIDNEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET @@SESSION.GTIDNEXT before a transaction and forgot to set @@SESSION.GTIDNEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current @@SESSION.GTIDNEXT is '%s'.", - ErrVariableNotSettableInSp: "The system variable %.200s cannot be set in stored procedures.", - ErrCantSetGtidPurgedWhenGtidModeIsOff: "@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDMODE = ON.", - ErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty: "@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDEXECUTED is empty.", - ErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty: "@@GLOBAL.GTIDPURGED can only be set when there are no ongoing transactions (not even in other clients).", - ErrGtidPurgedWasChanged: "@@GLOBAL.GTIDPURGED was changed from '%s' to '%s'.", - ErrGtidExecutedWasChanged: "@@GLOBAL.GTIDEXECUTED was changed from '%s' to '%s'.", - ErrBinlogStmtModeAndNoReplTables: "Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT, and both replicated and non replicated tables are written to.", - ErrAlterOperationNotSupported: "%s is not supported for this operation. Try %s.", - ErrAlterOperationNotSupportedReason: "%s is not supported. Reason: %s. Try %s.", - ErrAlterOperationNotSupportedReasonCopy: "COPY algorithm requires a lock", - ErrAlterOperationNotSupportedReasonPartition: "Partition specific operations do not yet support LOCK/ALGORITHM", - ErrAlterOperationNotSupportedReasonFkRename: "Columns participating in a foreign key are renamed", - ErrAlterOperationNotSupportedReasonColumnType: "Cannot change column type INPLACE", - ErrAlterOperationNotSupportedReasonFkCheck: "Adding foreign keys needs foreignKeyChecks=OFF", - ErrAlterOperationNotSupportedReasonIgnore: "Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows", - ErrAlterOperationNotSupportedReasonNopk: "Dropping a primary key is not allowed without also adding a new primary key", - ErrAlterOperationNotSupportedReasonAutoinc: "Adding an auto-increment column requires a lock", - ErrAlterOperationNotSupportedReasonHiddenFts: "Cannot replace hidden FTSDOCID with a user-visible one", - ErrAlterOperationNotSupportedReasonChangeFts: "Cannot drop or rename FTSDOCID", - ErrAlterOperationNotSupportedReasonFts: "Fulltext index creation requires a lock", - ErrSQLSlaveSkipCounterNotSettableInGtidMode: "sqlSlaveSkipCounter can not be set when the server is running with @@GLOBAL.GTIDMODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction", - ErrDupUnknownInIndex: "Duplicate entry for key '%-.192s'", - ErrIdentCausesTooLongPath: "Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'.", - ErrAlterOperationNotSupportedReasonNotNull: "cannot silently convert NULL values, as required in this SQLMODE", - ErrMustChangePasswordLogin: "Your password has expired. To log in you must change it using a client that supports expired passwords.", - ErrRowInWrongPartition: "Found a row in wrong partition %s", -} diff --git a/vendor/github.com/pingcap/tidb/mysql/error.go b/vendor/github.com/pingcap/tidb/mysql/error.go deleted file mode 100644 index 43246a4a2..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/error.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "errors" - "fmt" -) - -// Portable analogs of some common call errors. -var ( - ErrBadConn = errors.New("connection was bad") - ErrMalformPacket = errors.New("Malform packet error") -) - -// SQLError records an error information, from executing SQL. -type SQLError struct { - Code uint16 - Message string - State string -} - -// Error prints errors, with a formatted string. -func (e *SQLError) Error() string { - return fmt.Sprintf("ERROR %d (%s): %s", e.Code, e.State, e.Message) -} - -// NewErr generates a SQL error, with an error code and default format specifier defined in MySQLErrName. -func NewErr(errCode uint16, args ...interface{}) *SQLError { - e := &SQLError{Code: errCode} - - if s, ok := MySQLState[errCode]; ok { - e.State = s - } else { - e.State = DefaultMySQLState - } - - if format, ok := MySQLErrName[errCode]; ok { - e.Message = fmt.Sprintf(format, args...) - } else { - e.Message = fmt.Sprint(args...) - } - - return e -} - -// NewErrf creates a SQL error, with an error code and a format specifier -func NewErrf(errCode uint16, format string, args ...interface{}) *SQLError { - e := &SQLError{Code: errCode} - - if s, ok := MySQLState[errCode]; ok { - e.State = s - } else { - e.State = DefaultMySQLState - } - - e.Message = fmt.Sprintf(format, args...) - - return e -} diff --git a/vendor/github.com/pingcap/tidb/mysql/fsp.go b/vendor/github.com/pingcap/tidb/mysql/fsp.go deleted file mode 100644 index 820fabb3d..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/fsp.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "math" - "strconv" - "strings" - - "github.com/juju/errors" -) - -const ( - // UnspecifiedFsp is the unspecified fractional seconds part. - UnspecifiedFsp int = -1 - // MaxFsp is the maximum digit of fractional seconds part. - MaxFsp int = 6 - // MinFsp is the minimum digit of fractional seconds part. - MinFsp int = 0 - // DefaultFsp is the default digit of fractional seconds part. - // MySQL use 0 as the default Fsp. - DefaultFsp int = 0 -) - -func checkFsp(fsp int) (int, error) { - if fsp == UnspecifiedFsp { - return DefaultFsp, nil - } - if fsp < MinFsp || fsp > MaxFsp { - return DefaultFsp, errors.Errorf("Invalid fsp %d", fsp) - } - return fsp, nil -} - -func parseFrac(s string, fsp int) (int, error) { - if len(s) == 0 { - return 0, nil - } - - var err error - fsp, err = checkFsp(fsp) - if err != nil { - return 0, errors.Trace(err) - } - - // Use float to calculate frac, e.g, "123" -> "0.123" - if !strings.HasPrefix(s, ".") && !strings.HasPrefix(s, "0.") { - s = "0." + s - } - - frac, err := strconv.ParseFloat(s, 64) - if err != nil { - return 0, errors.Trace(err) - } - - // round frac to the nearest value with FSP - var round float64 - pow := math.Pow(10, float64(fsp)) - digit := pow * frac - _, div := math.Modf(digit) - if div >= 0.5 { - round = math.Ceil(digit) - } else { - round = math.Floor(digit) - } - - // Get the final frac, with 6 digit number - // 0.1236 round 3 -> 124 -> 123000 - // 0.0312 round 2 -> 3 -> 30000 - return int(round * math.Pow10(MaxFsp-fsp)), nil -} - -// alignFrac is used to generate alignment frac, like `100` -> `100000` -func alignFrac(s string, fsp int) string { - sl := len(s) - if sl < fsp { - return s + strings.Repeat("0", fsp-sl) - } - - return s -} diff --git a/vendor/github.com/pingcap/tidb/mysql/hex.go b/vendor/github.com/pingcap/tidb/mysql/hex.go deleted file mode 100644 index 5858b5d96..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/hex.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "encoding/hex" - "fmt" - "strconv" - "strings" - - "github.com/juju/errors" -) - -// Hex is for mysql hexadecimal literal type. -type Hex struct { - // Value holds numeric value for hexadecimal literal. - Value int64 -} - -// String implements fmt.Stringer interface. -func (h Hex) String() string { - s := fmt.Sprintf("%X", h.Value) - if len(s)%2 != 0 { - return "0x0" + s - } - - return "0x" + s -} - -// ToNumber changes hexadecimal type to float64 for numeric operation. -// MySQL treats hexadecimal literal as double type. -func (h Hex) ToNumber() float64 { - return float64(h.Value) -} - -// ToString returns the string representation for hexadecimal literal. -func (h Hex) ToString() string { - s := fmt.Sprintf("%x", h.Value) - if len(s)%2 != 0 { - s = "0" + s - } - - // should never error. - b, _ := hex.DecodeString(s) - return string(b) -} - -// ParseHex parses hexadecimal literal string. -// The string format can be X'val', x'val' or 0xval. -// val must in (0...9, a...z, A...Z). -func ParseHex(s string) (Hex, error) { - if len(s) == 0 { - return Hex{}, errors.Errorf("invalid empty string for parsing hexadecimal literal") - } - - if s[0] == 'x' || s[0] == 'X' { - // format is x'val' or X'val' - s = strings.Trim(s[1:], "'") - if len(s)%2 != 0 { - return Hex{}, errors.Errorf("invalid hexadecimal format, must even numbers, but %d", len(s)) - } - s = "0x" + s - } else if !strings.HasPrefix(s, "0x") { - // here means format is not x'val', X'val' or 0xval. - return Hex{}, errors.Errorf("invalid hexadecimal format %s", s) - } - - n, err := strconv.ParseInt(s, 0, 64) - if err != nil { - return Hex{}, errors.Trace(err) - } - - return Hex{Value: n}, nil -} diff --git a/vendor/github.com/pingcap/tidb/mysql/set.go b/vendor/github.com/pingcap/tidb/mysql/set.go deleted file mode 100644 index 8c0788a61..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/set.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "strconv" - "strings" - - "github.com/juju/errors" -) - -var zeroSet = Set{Name: "", Value: 0} - -// Set is for MySQL Set type. -type Set struct { - Name string - Value uint64 -} - -// String implements fmt.Stringer interface. -func (e Set) String() string { - return e.Name -} - -// ToNumber changes Set to float64 for numeric operation. -func (e Set) ToNumber() float64 { - return float64(e.Value) -} - -// ParseSetName creates a Set with name. -func ParseSetName(elems []string, name string) (Set, error) { - if len(name) == 0 { - return zeroSet, nil - } - - seps := strings.Split(name, ",") - marked := make(map[string]struct{}, len(seps)) - for _, s := range seps { - marked[strings.ToLower(s)] = struct{}{} - } - items := make([]string, 0, len(seps)) - - value := uint64(0) - for i, n := range elems { - key := strings.ToLower(n) - if _, ok := marked[key]; ok { - value |= (1 << uint64(i)) - delete(marked, key) - items = append(items, key) - } - } - - if len(marked) == 0 { - return Set{Name: strings.Join(items, ","), Value: value}, nil - } - - // name doesn't exist, maybe an integer? - if num, err := strconv.ParseUint(name, 0, 64); err == nil { - return ParseSetValue(elems, num) - } - - return Set{}, errors.Errorf("item %s is not in Set %v", name, elems) -} - -var ( - setIndexValue []uint64 - setIndexInvertValue []uint64 -) - -func init() { - setIndexValue = make([]uint64, 64) - setIndexInvertValue = make([]uint64, 64) - - for i := 0; i < 64; i++ { - setIndexValue[i] = 1 << uint64(i) - setIndexInvertValue[i] = ^setIndexValue[i] - } -} - -// ParseSetValue creates a Set with special number. -func ParseSetValue(elems []string, number uint64) (Set, error) { - if number == 0 { - return zeroSet, nil - } - - value := number - var items []string - for i := 0; i < len(elems); i++ { - if number&setIndexValue[i] > 0 { - items = append(items, elems[i]) - number &= setIndexInvertValue[i] - } - } - - if number != 0 { - return Set{}, errors.Errorf("invalid number %d for Set %v", number, elems) - } - - return Set{Name: strings.Join(items, ","), Value: value}, nil -} diff --git a/vendor/github.com/pingcap/tidb/mysql/state.go b/vendor/github.com/pingcap/tidb/mysql/state.go deleted file mode 100644 index 67fcd0e5a..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/state.go +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -const ( - // DefaultMySQLState is default state of the mySQL - DefaultMySQLState = "HY000" -) - -// MySQLState maps error code to MySQL SQLSTATE value. -// The values are taken from ANSI SQL and ODBC and are more standardized. -var MySQLState = map[uint16]string{ - ErrDupKey: "23000", - ErrOutofmemory: "HY001", - ErrOutOfSortmemory: "HY001", - ErrConCount: "08004", - ErrBadHost: "08S01", - ErrHandshake: "08S01", - ErrDbaccessDenied: "42000", - ErrAccessDenied: "28000", - ErrNoDb: "3D000", - ErrUnknownCom: "08S01", - ErrBadNull: "23000", - ErrBadDb: "42000", - ErrTableExists: "42S01", - ErrBadTable: "42S02", - ErrNonUniq: "23000", - ErrServerShutdown: "08S01", - ErrBadField: "42S22", - ErrWrongFieldWithGroup: "42000", - ErrWrongSumSelect: "42000", - ErrWrongGroupField: "42000", - ErrWrongValueCount: "21S01", - ErrTooLongIdent: "42000", - ErrDupFieldname: "42S21", - ErrDupKeyname: "42000", - ErrDupEntry: "23000", - ErrWrongFieldSpec: "42000", - ErrParse: "42000", - ErrEmptyQuery: "42000", - ErrNonuniqTable: "42000", - ErrInvalidDefault: "42000", - ErrMultiplePriKey: "42000", - ErrTooManyKeys: "42000", - ErrTooManyKeyParts: "42000", - ErrTooLongKey: "42000", - ErrKeyColumnDoesNotExits: "42000", - ErrBlobUsedAsKey: "42000", - ErrTooBigFieldlength: "42000", - ErrWrongAutoKey: "42000", - ErrForcingClose: "08S01", - ErrIpsock: "08S01", - ErrNoSuchIndex: "42S12", - ErrWrongFieldTerminators: "42000", - ErrBlobsAndNoTerminated: "42000", - ErrCantRemoveAllFields: "42000", - ErrCantDropFieldOrKey: "42000", - ErrBlobCantHaveDefault: "42000", - ErrWrongDbName: "42000", - ErrWrongTableName: "42000", - ErrTooBigSelect: "42000", - ErrUnknownProcedure: "42000", - ErrWrongParamcountToProcedure: "42000", - ErrUnknownTable: "42S02", - ErrFieldSpecifiedTwice: "42000", - ErrUnsupportedExtension: "42000", - ErrTableMustHaveColumns: "42000", - ErrUnknownCharacterSet: "42000", - ErrTooBigRowsize: "42000", - ErrWrongOuterJoin: "42000", - ErrNullColumnInIndex: "42000", - ErrPasswordAnonymousUser: "42000", - ErrPasswordNotAllowed: "42000", - ErrPasswordNoMatch: "42000", - ErrWrongValueCountOnRow: "21S01", - ErrInvalidUseOfNull: "22004", - ErrRegexp: "42000", - ErrMixOfGroupFuncAndFields: "42000", - ErrNonexistingGrant: "42000", - ErrTableaccessDenied: "42000", - ErrColumnaccessDenied: "42000", - ErrIllegalGrantForTable: "42000", - ErrGrantWrongHostOrUser: "42000", - ErrNoSuchTable: "42S02", - ErrNonexistingTableGrant: "42000", - ErrNotAllowedCommand: "42000", - ErrSyntax: "42000", - ErrAbortingConnection: "08S01", - ErrNetPacketTooLarge: "08S01", - ErrNetReadErrorFromPipe: "08S01", - ErrNetFcntl: "08S01", - ErrNetPacketsOutOfOrder: "08S01", - ErrNetUncompress: "08S01", - ErrNetRead: "08S01", - ErrNetReadInterrupted: "08S01", - ErrNetErrorOnWrite: "08S01", - ErrNetWriteInterrupted: "08S01", - ErrTooLongString: "42000", - ErrTableCantHandleBlob: "42000", - ErrTableCantHandleAutoIncrement: "42000", - ErrWrongColumnName: "42000", - ErrWrongKeyColumn: "42000", - ErrDupUnique: "23000", - ErrBlobKeyWithoutLength: "42000", - ErrPrimaryCantHaveNull: "42000", - ErrTooManyRows: "42000", - ErrRequiresPrimaryKey: "42000", - ErrKeyDoesNotExits: "42000", - ErrCheckNoSuchTable: "42000", - ErrCheckNotImplemented: "42000", - ErrCantDoThisDuringAnTransaction: "25000", - ErrNewAbortingConnection: "08S01", - ErrMasterNetRead: "08S01", - ErrMasterNetWrite: "08S01", - ErrTooManyUserConnections: "42000", - ErrReadOnlyTransaction: "25000", - ErrNoPermissionToCreateUser: "42000", - ErrLockDeadlock: "40001", - ErrNoReferencedRow: "23000", - ErrRowIsReferenced: "23000", - ErrConnectToMaster: "08S01", - ErrWrongNumberOfColumnsInSelect: "21000", - ErrUserLimitReached: "42000", - ErrSpecificAccessDenied: "42000", - ErrNoDefault: "42000", - ErrWrongValueForVar: "42000", - ErrWrongTypeForVar: "42000", - ErrCantUseOptionHere: "42000", - ErrNotSupportedYet: "42000", - ErrWrongFkDef: "42000", - ErrOperandColumns: "21000", - ErrSubqueryNo1Row: "21000", - ErrIllegalReference: "42S22", - ErrDerivedMustHaveAlias: "42000", - ErrSelectReduced: "01000", - ErrTablenameNotAllowedHere: "42000", - ErrNotSupportedAuthMode: "08004", - ErrSpatialCantHaveNull: "42000", - ErrCollationCharsetMismatch: "42000", - ErrWarnTooFewRecords: "01000", - ErrWarnTooManyRecords: "01000", - ErrWarnNullToNotnull: "22004", - ErrWarnDataOutOfRange: "22003", - WarnDataTruncated: "01000", - ErrWrongNameForIndex: "42000", - ErrWrongNameForCatalog: "42000", - ErrUnknownStorageEngine: "42000", - ErrTruncatedWrongValue: "22007", - ErrSpNoRecursiveCreate: "2F003", - ErrSpAlreadyExists: "42000", - ErrSpDoesNotExist: "42000", - ErrSpLilabelMismatch: "42000", - ErrSpLabelRedefine: "42000", - ErrSpLabelMismatch: "42000", - ErrSpUninitVar: "01000", - ErrSpBadselect: "0A000", - ErrSpBadreturn: "42000", - ErrSpBadstatement: "0A000", - ErrUpdateLogDeprecatedIgnored: "42000", - ErrUpdateLogDeprecatedTranslated: "42000", - ErrQueryInterrupted: "70100", - ErrSpWrongNoOfArgs: "42000", - ErrSpCondMismatch: "42000", - ErrSpNoreturn: "42000", - ErrSpNoreturnend: "2F005", - ErrSpBadCursorQuery: "42000", - ErrSpBadCursorSelect: "42000", - ErrSpCursorMismatch: "42000", - ErrSpCursorAlreadyOpen: "24000", - ErrSpCursorNotOpen: "24000", - ErrSpUndeclaredVar: "42000", - ErrSpFetchNoData: "02000", - ErrSpDupParam: "42000", - ErrSpDupVar: "42000", - ErrSpDupCond: "42000", - ErrSpDupCurs: "42000", - ErrSpSubselectNyi: "0A000", - ErrStmtNotAllowedInSfOrTrg: "0A000", - ErrSpVarcondAfterCurshndlr: "42000", - ErrSpCursorAfterHandler: "42000", - ErrSpCaseNotFound: "20000", - ErrDivisionByZero: "22012", - ErrIllegalValueForType: "22007", - ErrProcaccessDenied: "42000", - ErrXaerNota: "XAE04", - ErrXaerInval: "XAE05", - ErrXaerRmfail: "XAE07", - ErrXaerOutside: "XAE09", - ErrXaerRmerr: "XAE03", - ErrXaRbrollback: "XA100", - ErrNonexistingProcGrant: "42000", - ErrDataTooLong: "22001", - ErrSpBadSQLstate: "42000", - ErrCantCreateUserWithGrant: "42000", - ErrSpDupHandler: "42000", - ErrSpNotVarArg: "42000", - ErrSpNoRetset: "0A000", - ErrCantCreateGeometryObject: "22003", - ErrTooBigScale: "42000", - ErrTooBigPrecision: "42000", - ErrMBiggerThanD: "42000", - ErrTooLongBody: "42000", - ErrTooBigDisplaywidth: "42000", - ErrXaerDupid: "XAE08", - ErrDatetimeFunctionOverflow: "22008", - ErrRowIsReferenced2: "23000", - ErrNoReferencedRow2: "23000", - ErrSpBadVarShadow: "42000", - ErrSpWrongName: "42000", - ErrSpNoAggregate: "42000", - ErrMaxPreparedStmtCountReached: "42000", - ErrNonGroupingFieldUsed: "42000", - ErrForeignDuplicateKeyOldUnused: "23000", - ErrCantChangeTxCharacteristics: "25001", - ErrWrongParamcountToNativeFct: "42000", - ErrWrongParametersToNativeFct: "42000", - ErrWrongParametersToStoredFct: "42000", - ErrDupEntryWithKeyName: "23000", - ErrXaRbtimeout: "XA106", - ErrXaRbdeadlock: "XA102", - ErrFuncInexistentNameCollision: "42000", - ErrDupSignalSet: "42000", - ErrSignalWarn: "01000", - ErrSignalNotFound: "02000", - ErrSignalException: "HY000", - ErrResignalWithoutActiveHandler: "0K000", - ErrSpatialMustHaveGeomCol: "42000", - ErrDataOutOfRange: "22003", - ErrAccessDeniedNoPassword: "28000", - ErrTruncateIllegalFk: "42000", - ErrDaInvalidConditionNumber: "35000", - ErrForeignDuplicateKeyWithChildInfo: "23000", - ErrForeignDuplicateKeyWithoutChildInfo: "23000", - ErrCantExecuteInReadOnlyTransaction: "25006", - ErrAlterOperationNotSupported: "0A000", - ErrAlterOperationNotSupportedReason: "0A000", - ErrDupUnknownInIndex: "23000", -} diff --git a/vendor/github.com/pingcap/tidb/mysql/time.go b/vendor/github.com/pingcap/tidb/mysql/time.go deleted file mode 100644 index 7f9819941..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/time.go +++ /dev/null @@ -1,1422 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - "bytes" - "fmt" - "math" - "strconv" - "strings" - "time" - "unicode" - - "github.com/juju/errors" -) - -// Portable analogs of some common call errors. -var ( - ErrInvalidTimeFormat = errors.New("invalid time format") - ErrInvalidYearFormat = errors.New("invalid year format") - ErrInvalidYear = errors.New("invalid year") -) - -// Time format without fractional seconds precision. -const ( - DateFormat = "2006-01-02" - TimeFormat = "2006-01-02 15:04:05" - // TimeFSPFormat is time format with fractional seconds precision. - TimeFSPFormat = "2006-01-02 15:04:05.000000" -) - -const ( - // MinYear is the minimum for mysql year type. - MinYear int16 = 1901 - // MaxYear is the maximum for mysql year type. - MaxYear int16 = 2155 - - // MinTime is the minimum for mysql time type. - MinTime = -time.Duration(838*3600+59*60+59) * time.Second - // MaxTime is the maximum for mysql time type. - MaxTime = time.Duration(838*3600+59*60+59) * time.Second - - zeroDatetimeStr = "0000-00-00 00:00:00" - zeroDateStr = "0000-00-00" -) - -// Zero values for different types. -var ( - // ZeroDuration is the zero value for Duration type. - ZeroDuration = Duration{Duration: time.Duration(0), Fsp: DefaultFsp} - - // ZeroTime is the zero value for time.Time type. - ZeroTime = time.Date(0, 0, 0, 0, 0, 0, 0, time.UTC) - - // ZeroDatetime is the zero value for datetime Time. - ZeroDatetime = Time{ - Time: ZeroTime, - Type: TypeDatetime, - Fsp: DefaultFsp, - } - - // ZeroTimestamp is the zero value for timestamp Time. - ZeroTimestamp = Time{ - Time: ZeroTime, - Type: TypeTimestamp, - Fsp: DefaultFsp, - } - - // ZeroDate is the zero value for date Time. - ZeroDate = Time{ - Time: ZeroTime, - Type: TypeDate, - Fsp: DefaultFsp, - } -) - -var ( - // MinDatetime is the minimum for mysql datetime type. - MinDatetime = time.Date(1000, 1, 1, 0, 0, 0, 0, time.Local) - // MaxDatetime is the maximum for mysql datetime type. - MaxDatetime = time.Date(9999, 12, 31, 23, 59, 59, 999999, time.Local) - - // MinTimestamp is the minimum for mysql timestamp type. - MinTimestamp = time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC) - // MaxTimestamp is the maximum for mysql timestamp type. - MaxTimestamp = time.Date(2038, 1, 19, 3, 14, 7, 999999, time.UTC) - - // WeekdayNames lists names of weekdays, which are used in builtin time function `dayname`. - WeekdayNames = []string{ - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - "Sunday", - } -) - -// Time is the struct for handling datetime, timestamp and date. -// TODO: check if need a NewTime function to set Fsp default value? -type Time struct { - time.Time - Type uint8 - // Fsp is short for Fractional Seconds Precision. - // See http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html - Fsp int -} - -// CurrentTime returns current time with type tp. -func CurrentTime(tp uint8) Time { - return Time{Time: time.Now(), Type: tp, Fsp: 0} -} - -func (t Time) String() string { - if t.IsZero() { - if t.Type == TypeDate { - return zeroDateStr - } - - return zeroDatetimeStr - } - - if t.Type == TypeDate { - return t.Time.Format(DateFormat) - } - - tfStr := TimeFormat - if t.Fsp > 0 { - tfStr = fmt.Sprintf("%s.%s", tfStr, strings.Repeat("0", t.Fsp)) - } - - return t.Time.Format(tfStr) -} - -// IsZero returns a boolean indicating whether the time is equal to ZeroTime. -func (t Time) IsZero() bool { - return t.Time.Equal(ZeroTime) -} - -// Marshal returns the binary encoding of time. -func (t Time) Marshal() ([]byte, error) { - var ( - b []byte - err error - ) - - switch t.Type { - case TypeDatetime, TypeDate: - // We must use t's Zone not current Now Zone, - // For EDT/EST, even we create the time with time.Local location, - // we may still have a different zone with current Now time. - _, offset := t.Zone() - // For datetime and date type, we have a trick to marshal. - // e.g, if local time is 2010-10-10T10:10:10 UTC+8 - // we will change this to 2010-10-10T10:10:10 UTC and then marshal. - b, err = t.Time.Add(time.Duration(offset) * time.Second).UTC().MarshalBinary() - case TypeTimestamp: - b, err = t.Time.UTC().MarshalBinary() - default: - err = errors.Errorf("invalid time type %d", t.Type) - } - - if err != nil { - return nil, errors.Trace(err) - } - - return b, nil -} - -// Unmarshal decodes the binary data into Time with current local time. -func (t *Time) Unmarshal(b []byte) error { - return t.UnmarshalInLocation(b, time.Local) -} - -// UnmarshalInLocation decodes the binary data -// into Time with a specific time Location. -func (t *Time) UnmarshalInLocation(b []byte, loc *time.Location) error { - if err := t.Time.UnmarshalBinary(b); err != nil { - return errors.Trace(err) - } - - if t.IsZero() { - return nil - } - - if t.Type == TypeDatetime || t.Type == TypeDate { - // e.g, for 2010-10-10T10:10:10 UTC, we will unmarshal to 2010-10-10T10:10:10 location - _, offset := t.Time.In(loc).Zone() - - t.Time = t.Time.Add(-time.Duration(offset) * time.Second).In(loc) - if t.Type == TypeDate { - // for date type ,we will only use year, month and day. - year, month, day := t.Time.Date() - t.Time = time.Date(year, month, day, 0, 0, 0, 0, loc) - } - } else if t.Type == TypeTimestamp { - t.Time = t.Time.In(loc) - } else { - return errors.Errorf("invalid time type %d", t.Type) - } - - return nil -} - -const numberFormat = "20060102150405" - -// ToNumber returns a formatted number. -// e.g, -// 2012-12-12T10:10:10 -> 20121212101010 -// 2012-12-12T10:10:10.123456 -> 20121212101010.123456 -func (t Time) ToNumber() Decimal { - if t.IsZero() { - return ZeroDecimal - } - - tfStr := numberFormat - if t.Fsp > 0 { - tfStr = fmt.Sprintf("%s.%s", tfStr, strings.Repeat("0", t.Fsp)) - } - - s := t.Time.Format(tfStr) - // We skip checking error here because time formatted string can be parsed certainly. - d, _ := ParseDecimal(s) - return d -} - -// Convert converts t with type tp. -func (t Time) Convert(tp uint8) (Time, error) { - if t.Type == tp || t.IsZero() { - return Time{Time: t.Time, Type: tp, Fsp: t.Fsp}, nil - } - - switch tp { - case TypeDatetime: - return Time{Time: t.Time, Type: TypeDatetime, Fsp: t.Fsp}, nil - case TypeTimestamp: - nt := Time{Time: t.Time, Type: TypeTimestamp, Fsp: t.Fsp} - if !checkTimestamp(nt) { - return ZeroTimestamp, errors.Trace(ErrInvalidTimeFormat) - } - return nt, nil - case TypeDate: - year, month, day := t.Time.Date() - return Time{Time: time.Date(year, month, day, 0, 0, 0, 0, time.Local), - Type: TypeDate, Fsp: 0}, nil - default: - return Time{Time: ZeroTime, Type: tp}, errors.Errorf("invalid time type %d", tp) - } -} - -// ConvertToDuration converts mysql datetime, timestamp and date to mysql time type. -// e.g, -// 2012-12-12T10:10:10 -> 10:10:10 -// 2012-12-12 -> 0 -func (t Time) ConvertToDuration() (Duration, error) { - if t.IsZero() { - return ZeroDuration, nil - } - - hour, minute, second := t.Clock() - frac := t.Nanosecond() - - d := time.Duration(hour*3600+minute*60+second)*time.Second + time.Duration(frac) - - // TODO: check convert validation - return Duration{Duration: time.Duration(d), Fsp: t.Fsp}, nil -} - -// Compare returns an integer comparing the time instant t to o. -// If t is after o, return 1, equal o, return 0, before o, return -1. -func (t Time) Compare(o Time) int { - if t.Time.After(o.Time) { - return 1 - } else if t.Time.Equal(o.Time) { - return 0 - } else { - return -1 - } -} - -// CompareString is like Compare, -// but parses string to Time then compares. -func (t Time) CompareString(str string) (int, error) { - // use MaxFsp to parse the string - o, err := ParseTime(str, t.Type, MaxFsp) - if err != nil { - return 0, errors.Trace(err) - } - - return t.Compare(o), nil -} - -// RoundFrac rounds fractional seconds precision with new fsp and returns a new one. -// We will use the “round half up” rule, e.g, >= 0.5 -> 1, < 0.5 -> 0, -// so 2011:11:11 10:10:10.888888 round 0 -> 2011:11:11 10:10:11 -// and 2011:11:11 10:10:10.111111 round 0 -> 2011:11:11 10:10:10 -func (t Time) RoundFrac(fsp int) (Time, error) { - if t.Type == TypeDate { - // date type has no fsp - return t, nil - } - - fsp, err := checkFsp(fsp) - if err != nil { - return t, errors.Trace(err) - } - - if fsp == t.Fsp { - // have same fsp - return t, nil - } - - nt := t.Time.Round(time.Duration(math.Pow10(9-fsp)) * time.Nanosecond) - return Time{Time: nt, Type: t.Type, Fsp: fsp}, nil -} - -func parseDateFormat(format string) []string { - format = strings.TrimSpace(format) - - start := 0 - seps := []string{} - for i := 0; i < len(format); i++ { - // Date fromat must start and end with number. - if i == 0 || i == len(format)-1 { - if !unicode.IsNumber(rune(format[i])) { - return nil - } - - continue - } - - // Seperator is a single none-number char. - if !unicode.IsNumber(rune(format[i])) { - if !unicode.IsNumber(rune(format[i-1])) { - return nil - } - - seps = append(seps, format[start:i]) - start = i + 1 - } - - } - - seps = append(seps, format[start:]) - return seps -} - -func parseDatetime(str string, fsp int) (Time, error) { - // Try to split str with delimiter. - // TODO: only punctuation can be the delimiter for date parts or time parts. - // But only space and T can be the delimiter between the date and time part. - var ( - year int - month int - day int - hour int - minute int - second int - frac int - fracStr string - - err error - ) - - seps := parseDateFormat(str) - - switch len(seps) { - case 1: - // No delimiter. - if len(str) == 14 { - // YYYYMMDDHHMMSS - _, err = fmt.Sscanf(str, "%4d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second) - } else if len(str) == 12 { - // YYMMDDHHMMSS - _, err = fmt.Sscanf(str, "%2d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second) - year = adjustYear(year) - } else if len(str) == 8 { - // YYYYMMDD - _, err = fmt.Sscanf(str, "%4d%2d%2d", &year, &month, &day) - } else if len(str) == 6 { - // YYMMDD - _, err = fmt.Sscanf(str, "%2d%2d%2d", &year, &month, &day) - year = adjustYear(year) - } else { - return ZeroDatetime, errors.Trace(ErrInvalidTimeFormat) - } - case 2: - s := seps[0] - fracStr = seps[1] - - if len(s) == 14 { - // YYYYMMDDHHMMSS.fraction - _, err = fmt.Sscanf(s, "%4d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second) - } else if len(s) == 12 { - // YYMMDDHHMMSS.fraction - _, err = fmt.Sscanf(s, "%2d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second) - year = adjustYear(year) - } else { - return ZeroDatetime, errors.Trace(ErrInvalidTimeFormat) - } - case 3: - // YYYY-MM-DD - err = scanTimeArgs(seps, &year, &month, &day) - case 6: - // We don't have fractional seconds part. - // YYYY-MM-DD HH-MM-SS - err = scanTimeArgs(seps, &year, &month, &day, &hour, &minute, &second) - case 7: - // We have fractional seconds part. - // YYY-MM-DD HH-MM-SS.fraction - err = scanTimeArgs(seps[0:len(seps)-1], &year, &month, &day, &hour, &minute, &second) - fracStr = seps[len(seps)-1] - default: - return ZeroDatetime, errors.Trace(ErrInvalidTimeFormat) - } - - if err != nil { - return ZeroDatetime, errors.Trace(err) - } - - // If str is sepereated by delimiters, the first one is year, and if the year is 2 digit, - // we should adjust it. - // TODO: ajust year is very complex, now we only consider the simplest way. - if len(seps[0]) == 2 { - year = adjustYear(year) - } - - frac, err = parseFrac(fracStr, fsp) - if err != nil { - return ZeroDatetime, errors.Trace(err) - } - - t, err := newTime(year, month, day, hour, minute, second, frac) - if err != nil { - return ZeroDatetime, errors.Trace(err) - } - - nt := Time{ - Time: t, - Type: TypeDatetime, - Fsp: fsp} - - return nt, nil -} - -func scanTimeArgs(seps []string, args ...*int) error { - if len(seps) != len(args) { - return errors.Trace(ErrInvalidTimeFormat) - } - - var err error - for i, s := range seps { - *args[i], err = strconv.Atoi(s) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -// ParseYear parses a formatted string and returns a year number. -func ParseYear(str string) (int16, error) { - v, err := strconv.ParseInt(str, 10, 16) - if err != nil { - return 0, errors.Trace(err) - } - y := int16(v) - - if len(str) == 4 { - // Nothing to do. - } else if len(str) == 2 || len(str) == 1 { - y = int16(adjustYear(int(y))) - } else { - return 0, errors.Trace(ErrInvalidYearFormat) - } - - if y < MinYear || y > MaxYear { - return 0, errors.Trace(ErrInvalidYearFormat) - } - - return y, nil -} - -func newTime(year int, month int, day int, hour int, minute int, second int, frac int) (time.Time, error) { - if year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0 { - // Should we check fractional fractional here? - // But go time.Time can not support zero time 0000-00-00 00:00:00. - return ZeroTime, nil - } - - if err := checkTime(year, month, day, hour, minute, second, frac); err != nil { - return ZeroTime, errors.Trace(err) - } - - return time.Date(year, time.Month(month), day, hour, minute, second, frac*1000, time.Local), nil -} - -// See https://dev.mysql.com/doc/refman/5.7/en/two-digit-years.html -func adjustYear(y int) int { - if y >= 0 && y <= 69 { - y = 2000 + y - } else if y >= 70 && y <= 99 { - y = 1900 + y - } - return y -} - -// AdjustYear is used for adjusting year and checking its validation. -func AdjustYear(y int64) (int64, error) { - y = int64(adjustYear(int(y))) - if y < int64(MinYear) || y > int64(MaxYear) { - return 0, errors.Trace(ErrInvalidYear) - } - - return y, nil -} - -// Duration is the type for MySQL time type. -type Duration struct { - time.Duration - // Fsp is short for Fractional Seconds Precision. - // See http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html - Fsp int -} - -// String returns the time formatted using default TimeFormat and fsp. -func (d Duration) String() string { - var buf bytes.Buffer - - sign, hours, minutes, seconds, fraction := splitDuration(d.Duration) - if sign < 0 { - buf.WriteByte('-') - } - - fmt.Fprintf(&buf, "%02d:%02d:%02d", hours, minutes, seconds) - if d.Fsp > 0 { - buf.WriteString(".") - buf.WriteString(d.formatFrac(fraction)) - } - - p := buf.String() - - return p -} - -func (d Duration) formatFrac(frac int) string { - format := fmt.Sprintf("%%0%dd", d.Fsp) - s := fmt.Sprintf(format, frac) - return s[0:d.Fsp] -} - -// ToNumber changes duration to number format. -// e.g, -// 10:10:10 -> 101010 -func (d Duration) ToNumber() Decimal { - sign, hours, minutes, seconds, fraction := splitDuration(time.Duration(d.Duration)) - var ( - s string - signStr string - ) - - if sign < 0 { - signStr = "-" - } - - if d.Fsp == 0 { - s = fmt.Sprintf("%s%02d%02d%02d", signStr, hours, minutes, seconds) - } else { - s = fmt.Sprintf("%s%02d%02d%02d.%s", signStr, hours, minutes, seconds, d.formatFrac(fraction)) - } - - // We skip checking error here because time formatted string can be parsed certainly. - v, _ := ParseDecimal(s) - return v -} - -// ConvertToTime converts duration to Time. -// Tp is TypeDatetime, TypeTimestamp and TypeDate. -func (d Duration) ConvertToTime(tp uint8) (Time, error) { - year, month, day := time.Now().Date() - // just use current year, month and day. - n := time.Date(year, month, day, 0, 0, 0, 0, time.Local) - n = n.Add(d.Duration) - - t := Time{ - Time: n, - Type: TypeDatetime, - Fsp: d.Fsp, - } - - return t.Convert(tp) -} - -// RoundFrac rounds fractional seconds precision with new fsp and returns a new one. -// We will use the “round half up” rule, e.g, >= 0.5 -> 1, < 0.5 -> 0, -// so 10:10:10.999999 round 0 -> 10:10:11 -// and 10:10:10.000000 round 0 -> 10:10:10 -func (d Duration) RoundFrac(fsp int) (Duration, error) { - fsp, err := checkFsp(fsp) - if err != nil { - return d, errors.Trace(err) - } - - if fsp == d.Fsp { - return d, nil - } - - n := ZeroTime - nd := n.Add(d.Duration).Round(time.Duration(math.Pow10(9-fsp)) * time.Nanosecond).Sub(n) - return Duration{Duration: nd, Fsp: fsp}, nil -} - -// Compare returns an integer comparing the Duration instant t to o. -// If d is after o, return 1, equal o, return 0, before o, return -1. -func (d Duration) Compare(o Duration) int { - if d.Duration > o.Duration { - return 1 - } else if d.Duration == o.Duration { - return 0 - } else { - return -1 - } -} - -// CompareString is like Compare, -// but parses str to Duration then compares. -func (d Duration) CompareString(str string) (int, error) { - // use MaxFsp to parse the string - o, err := ParseDuration(str, MaxFsp) - if err != nil { - return 0, err - } - - return d.Compare(o), nil -} - -// Hour returns current hour. -// e.g, hour("11:11:11") -> 11 -func (d Duration) Hour() int { - _, hour, _, _, _ := splitDuration(d.Duration) - return hour -} - -// Minute returns current minute. -// e.g, hour("11:11:11") -> 11 -func (d Duration) Minute() int { - _, _, minute, _, _ := splitDuration(d.Duration) - return minute -} - -// Second returns current second. -// e.g, hour("11:11:11") -> 11 -func (d Duration) Second() int { - _, _, _, second, _ := splitDuration(d.Duration) - return second -} - -// MicroSecond returns current microsecond. -// e.g, hour("11:11:11.11") -> 110000 -func (d Duration) MicroSecond() int { - _, _, _, _, frac := splitDuration(d.Duration) - return frac -} - -// ParseDuration parses the time form a formatted string with a fractional seconds part, -// returns the duration type Time value. -// See: http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html -func ParseDuration(str string, fsp int) (Duration, error) { - var ( - day int - hour int - minute int - second int - frac int - - err error - sign = 0 - dayExists = false - ) - - fsp, err = checkFsp(fsp) - if err != nil { - return ZeroDuration, errors.Trace(err) - } - - if len(str) == 0 { - return ZeroDuration, nil - } else if str[0] == '-' { - str = str[1:] - sign = -1 - } - - // Time format may has day. - if n := strings.IndexByte(str, ' '); n >= 0 { - if day, err = strconv.Atoi(str[:n]); err == nil { - dayExists = true - } - str = str[n+1:] - } - - if n := strings.IndexByte(str, '.'); n >= 0 { - // It has fractional precesion parts. - fracStr := str[n+1:] - frac, err = parseFrac(fracStr, fsp) - if err != nil { - return ZeroDuration, errors.Trace(err) - } - str = str[0:n] - } - - // It tries to split str with delimiter, time delimiter must be : - seps := strings.Split(str, ":") - - switch len(seps) { - case 1: - if dayExists { - hour, err = strconv.Atoi(seps[0]) - } else { - // No delimiter. - if len(str) == 6 { - // HHMMSS - _, err = fmt.Sscanf(str, "%2d%2d%2d", &hour, &minute, &second) - } else if len(str) == 4 { - // MMSS - _, err = fmt.Sscanf(str, "%2d%2d", &minute, &second) - } else if len(str) == 2 { - // SS - _, err = fmt.Sscanf(str, "%2d", &second) - } else { - // Maybe only contains date. - _, err = ParseDate(str) - if err == nil { - return ZeroDuration, nil - } - return ZeroDuration, errors.Trace(ErrInvalidTimeFormat) - } - } - case 2: - // HH:MM - _, err = fmt.Sscanf(str, "%2d:%2d", &hour, &minute) - case 3: - // Time format maybe HH:MM:SS or HHH:MM:SS. - // See: https://dev.mysql.com/doc/refman/5.7/en/time.html - if !dayExists && len(seps[0]) == 3 { - _, err = fmt.Sscanf(str, "%3d:%2d:%2d", &hour, &minute, &second) - } else { - _, err = fmt.Sscanf(str, "%2d:%2d:%2d", &hour, &minute, &second) - } - default: - return ZeroDuration, errors.Trace(ErrInvalidTimeFormat) - } - - if err != nil { - return ZeroDuration, errors.Trace(err) - } - - d := time.Duration(day*24*3600+hour*3600+minute*60+second)*time.Second + time.Duration(frac)*time.Microsecond - if sign == -1 { - d = -d - } - - if d > MaxTime { - d = MaxTime - err = ErrInvalidTimeFormat - } else if d < MinTime { - d = MinTime - err = ErrInvalidTimeFormat - } - return Duration{Duration: d, Fsp: fsp}, errors.Trace(err) -} - -func splitDuration(t time.Duration) (int, int, int, int, int) { - sign := 1 - if t < 0 { - t = -t - sign = -1 - } - - hours := t / time.Hour - t -= hours * time.Hour - minutes := t / time.Minute - t -= minutes * time.Minute - seconds := t / time.Second - t -= seconds * time.Second - fraction := t / time.Microsecond - - return sign, int(hours), int(minutes), int(seconds), int(fraction) -} - -func checkTime(year int, month int, day int, hour int, minute int, second int, frac int) error { - // Notes: for datetime type, `insert t values("0001-01-01 00:00:00");` is valid - // so here only check year from 0~9999. - if (year < 0 || year > 9999) || - (month <= 0 || month > 12) || - (day <= 0 || day > 31) || - (hour < 0 || hour >= 24) || - (minute < 0 || minute >= 60) || - (second < 0 || second >= 60) || - (frac < 0) { - return errors.Trace(ErrInvalidTimeFormat) - } - - return nil -} - -func getTime(num int64, tp byte) (Time, error) { - s1 := num / 1000000 - s2 := num - s1*1000000 - - year := int(s1 / 10000) - s1 %= 10000 - month := int(s1 / 100) - day := int(s1 % 100) - - hour := int(s2 / 10000) - s2 %= 10000 - minute := int(s2 / 100) - second := int(s2 % 100) - - if err := checkTime(year, month, day, hour, minute, second, 0); err != nil { - return Time{ - Time: ZeroTime, - Type: tp, - Fsp: DefaultFsp, - }, err - } - - t, err := newTime(year, month, day, hour, minute, second, 0) - return Time{ - Time: t, - Type: tp, - Fsp: DefaultFsp, - }, errors.Trace(err) -} - -// See number_to_datetime function. -// https://github.com/mysql/mysql-server/blob/5.7/sql-common/my_time.c -func parseDateTimeFromNum(num int64) (Time, error) { - t := ZeroDate - // Check zero. - if num == 0 { - return t, nil - } - - // Check datetime type. - if num >= 10000101000000 { - return getTime(num, t.Type) - } - - // Check MMDD. - if num < 101 { - return t, errors.Trace(ErrInvalidTimeFormat) - } - - // Adjust year - // YYMMDD, year: 2000-2069 - if num <= (70-1)*10000+1231 { - num = (num + 20000000) * 1000000 - return getTime(num, t.Type) - } - - // Check YYMMDD. - if num < 70*10000+101 { - return t, errors.Trace(ErrInvalidTimeFormat) - } - - // Adjust year - // YYMMDD, year: 1970-1999 - if num < 991231 { - num = (num + 19000000) * 1000000 - return getTime(num, t.Type) - } - - // Check YYYYMMDD. - if num < 10000101 { - return t, errors.Trace(ErrInvalidTimeFormat) - } - - // Adjust hour/min/second. - if num < 99991231 { - num = num * 1000000 - return getTime(num, t.Type) - } - - // Check MMDDHHMMSS. - if num < 101000000 { - return t, errors.Trace(ErrInvalidTimeFormat) - } - - // Set TypeDatetime type. - t.Type = TypeDatetime - - // Adjust year - // YYMMDDHHMMSS, 2000-2069 - if num <= 69*10000000000+1231235959 { - num = num + 20000000000000 - return getTime(num, t.Type) - } - - // Check YYYYMMDDHHMMSS. - if num < 70*10000000000+101000000 { - return t, errors.Trace(ErrInvalidTimeFormat) - } - - // Adjust year - // YYMMDDHHMMSS, 1970-1999 - if num <= 991231235959 { - num = num + 19000000000000 - return getTime(num, t.Type) - } - - return getTime(num, t.Type) -} - -// ParseTime parses a formatted string with type tp and specific fsp. -// Type is TypeDatetime, TypeTimestamp and TypeDate. -// Fsp is in range [0, 6]. -// MySQL supports many valid datatime format, but still has some limitation. -// If delimiter exists, the date part and time part is seperated by a space or T, -// other punctuation character can be used as the delimiter between date parts or time parts. -// If no delimiter, the format must be YYYYMMDDHHMMSS or YYMMDDHHMMSS -// If we have fractional seconds part, we must use decimal points as the delimiter. -// The valid datetime range is from '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'. -// The valid timestamp range is from '1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999'. -// The valid date range is from '1000-01-01' to '9999-12-31' -func ParseTime(str string, tp byte, fsp int) (Time, error) { - fsp, err := checkFsp(fsp) - if err != nil { - return Time{Time: ZeroTime, Type: tp}, errors.Trace(err) - } - - t, err := parseDatetime(str, fsp) - if err != nil { - return Time{Time: ZeroTime, Type: tp}, errors.Trace(err) - } - - return t.Convert(tp) -} - -// ParseDatetime is a helper function wrapping ParseTime with datetime type and default fsp. -func ParseDatetime(str string) (Time, error) { - return ParseTime(str, TypeDatetime, DefaultFsp) -} - -// ParseTimestamp is a helper function wrapping ParseTime with timestamp type and default fsp. -func ParseTimestamp(str string) (Time, error) { - return ParseTime(str, TypeTimestamp, DefaultFsp) -} - -// ParseDate is a helper function wrapping ParseTime with date type. -func ParseDate(str string) (Time, error) { - // date has no fractional seconds precision - return ParseTime(str, TypeDate, MinFsp) -} - -// ParseTimeFromNum parses a formatted int64, -// returns the value which type is tp. -func ParseTimeFromNum(num int64, tp byte, fsp int) (Time, error) { - fsp, err := checkFsp(fsp) - if err != nil { - return Time{Time: ZeroTime, Type: tp}, errors.Trace(err) - } - - t, err := parseDateTimeFromNum(num) - if err != nil { - return Time{Time: ZeroTime, Type: tp}, errors.Trace(err) - } - - if !checkDatetime(t) { - return Time{Time: ZeroTime, Type: tp}, ErrInvalidTimeFormat - } - - t.Fsp = fsp - return t.Convert(tp) -} - -// ParseDatetimeFromNum is a helper function wrapping ParseTimeFromNum with datetime type and default fsp. -func ParseDatetimeFromNum(num int64) (Time, error) { - return ParseTimeFromNum(num, TypeDatetime, DefaultFsp) -} - -// ParseTimestampFromNum is a helper function wrapping ParseTimeFromNum with timestamp type and default fsp. -func ParseTimestampFromNum(num int64) (Time, error) { - return ParseTimeFromNum(num, TypeTimestamp, DefaultFsp) -} - -// ParseDateFromNum is a helper function wrapping ParseTimeFromNum with date type. -func ParseDateFromNum(num int64) (Time, error) { - // date has no fractional seconds precision - return ParseTimeFromNum(num, TypeDate, MinFsp) -} - -func checkDatetime(t Time) bool { - if t.IsZero() { - return true - } - - if t.Time.After(MaxDatetime) || t.Time.Before(MinDatetime) { - return false - } - - return true -} - -func checkTimestamp(t Time) bool { - if t.IsZero() { - return true - } - - if t.Time.After(MaxTimestamp) || t.Time.Before(MinTimestamp) { - return false - } - - return true -} - -// ExtractTimeNum extracts time value number from time unit and format. -func ExtractTimeNum(unit string, t Time) (int64, error) { - switch strings.ToUpper(unit) { - case "MICROSECOND": - return int64(t.Nanosecond() / 1000), nil - case "SECOND": - return int64(t.Second()), nil - case "MINUTE": - return int64(t.Minute()), nil - case "HOUR": - return int64(t.Hour()), nil - case "DAY": - return int64(t.Day()), nil - case "WEEK": - _, week := t.ISOWeek() - return int64(week), nil - case "MONTH": - return int64(t.Month()), nil - case "QUARTER": - m := int64(t.Month()) - // 1 - 3 -> 1 - // 4 - 6 -> 2 - // 7 - 9 -> 3 - // 10 - 12 -> 4 - return (m + 2) / 3, nil - case "YEAR": - return int64(t.Year()), nil - case "SECOND_MICROSECOND": - return int64(t.Second())*1000000 + int64(t.Nanosecond())/1000, nil - case "MINUTE_MICROSECOND": - _, m, s := t.Clock() - return int64(m)*100000000 + int64(s)*1000000 + int64(t.Nanosecond())/1000, nil - case "MINUTE_SECOND": - _, m, s := t.Clock() - return int64(m*100 + s), nil - case "HOUR_MICROSECOND": - h, m, s := t.Clock() - return int64(h)*10000000000 + int64(m)*100000000 + int64(s)*1000000 + int64(t.Nanosecond())/1000, nil - case "HOUR_SECOND": - h, m, s := t.Clock() - return int64(h)*10000 + int64(m)*100 + int64(s), nil - case "HOUR_MINUTE": - h, m, _ := t.Clock() - return int64(h)*100 + int64(m), nil - case "DAY_MICROSECOND": - h, m, s := t.Clock() - d := t.Day() - return int64(d*1000000+h*10000+m*100+s)*1000000 + int64(t.Nanosecond())/1000, nil - case "DAY_SECOND": - h, m, s := t.Clock() - d := t.Day() - return int64(d)*1000000 + int64(h)*10000 + int64(m)*100 + int64(s), nil - case "DAY_MINUTE": - h, m, _ := t.Clock() - d := t.Day() - return int64(d)*10000 + int64(h)*100 + int64(m), nil - case "DAY_HOUR": - h, _, _ := t.Clock() - d := t.Day() - return int64(d)*100 + int64(h), nil - case "YEAR_MONTH": - y, m, _ := t.Date() - return int64(y)*100 + int64(m), nil - default: - return 0, errors.Errorf("invalid unit %s", unit) - } -} - -func extractSingleTimeValue(unit string, format string) (int64, int64, int64, time.Duration, error) { - iv, err := strconv.ParseInt(format, 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - v := time.Duration(iv) - switch strings.ToUpper(unit) { - case "MICROSECOND": - return 0, 0, 0, v * time.Microsecond, nil - case "SECOND": - return 0, 0, 0, v * time.Second, nil - case "MINUTE": - return 0, 0, 0, v * time.Minute, nil - case "HOUR": - return 0, 0, 0, v * time.Hour, nil - case "DAY": - return 0, 0, iv, 0, nil - case "WEEK": - return 0, 0, 7 * iv, 0, nil - case "MONTH": - return 0, iv, 0, 0, nil - case "QUARTER": - return 0, 3 * iv, 0, 0, nil - case "YEAR": - return iv, 0, 0, 0, nil - } - - return 0, 0, 0, 0, errors.Errorf("invalid singel timeunit - %s", unit) -} - -// Format is `SS.FFFFFF`. -func extractSecondMicrosecond(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, ".") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - seconds, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - microseconds, err := strconv.ParseInt(alignFrac(fields[1], MaxFsp), 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return 0, 0, 0, time.Duration(seconds)*time.Second + time.Duration(microseconds)*time.Microsecond, nil -} - -// Format is `MM:SS.FFFFFF`. -func extractMinuteMicrosecond(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, ":") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - minutes, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - _, _, _, value, err := extractSecondMicrosecond(fields[1]) - if err != nil { - return 0, 0, 0, 0, errors.Trace(err) - } - - return 0, 0, 0, time.Duration(minutes)*time.Minute + value, nil -} - -// Format is `MM:SS`. -func extractMinuteSecond(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, ":") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - minutes, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - seconds, err := strconv.ParseInt(fields[1], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return 0, 0, 0, time.Duration(minutes)*time.Minute + time.Duration(seconds)*time.Second, nil -} - -// Format is `HH:MM:SS.FFFFFF`. -func extractHourMicrosecond(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, ":") - if len(fields) != 3 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - hours, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - minutes, err := strconv.ParseInt(fields[1], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - _, _, _, value, err := extractSecondMicrosecond(fields[2]) - if err != nil { - return 0, 0, 0, 0, errors.Trace(err) - } - - return 0, 0, 0, time.Duration(hours)*time.Hour + time.Duration(minutes)*time.Minute + value, nil -} - -// Format is `HH:MM:SS`. -func extractHourSecond(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, ":") - if len(fields) != 3 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - hours, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - minutes, err := strconv.ParseInt(fields[1], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - seconds, err := strconv.ParseInt(fields[2], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return 0, 0, 0, time.Duration(hours)*time.Hour + time.Duration(minutes)*time.Minute + time.Duration(seconds)*time.Second, nil -} - -// Format is `HH:MM`. -func extractHourMinute(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, ":") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - hours, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - minutes, err := strconv.ParseInt(fields[1], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return 0, 0, 0, time.Duration(hours)*time.Hour + time.Duration(minutes)*time.Minute, nil -} - -// Format is `DD HH:MM:SS.FFFFFF`. -func extractDayMicrosecond(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, " ") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - days, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - _, _, _, value, err := extractHourMicrosecond(fields[1]) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return 0, 0, days, value, nil -} - -// Format is `DD HH:MM:SS`. -func extractDaySecond(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, " ") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - days, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - _, _, _, value, err := extractHourSecond(fields[1]) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return 0, 0, days, value, nil -} - -// Format is `DD HH:MM`. -func extractDayMinute(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, " ") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - days, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - _, _, _, value, err := extractHourMinute(fields[1]) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return 0, 0, days, value, nil -} - -// Format is `DD HH`. -func extractDayHour(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, " ") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - days, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - hours, err := strconv.ParseInt(fields[1], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return 0, 0, days, time.Duration(hours) * time.Hour, nil -} - -// Format is `YYYY-MM`. -func extractYearMonth(format string) (int64, int64, int64, time.Duration, error) { - fields := strings.Split(format, "-") - if len(fields) != 2 { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - years, err := strconv.ParseInt(fields[0], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - months, err := strconv.ParseInt(fields[1], 10, 64) - if err != nil { - return 0, 0, 0, 0, errors.Errorf("invalid time format - %s", format) - } - - return years, months, 0, 0, nil -} - -// ExtractTimeValue extracts time value from time unit and format. -func ExtractTimeValue(unit string, format string) (int64, int64, int64, time.Duration, error) { - switch strings.ToUpper(unit) { - case "MICROSECOND", "SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR": - return extractSingleTimeValue(unit, format) - case "SECOND_MICROSECOND": - return extractSecondMicrosecond(format) - case "MINUTE_MICROSECOND": - return extractMinuteMicrosecond(format) - case "MINUTE_SECOND": - return extractMinuteSecond(format) - case "HOUR_MICROSECOND": - return extractHourMicrosecond(format) - case "HOUR_SECOND": - return extractHourSecond(format) - case "HOUR_MINUTE": - return extractHourMinute(format) - case "DAY_MICROSECOND": - return extractDayMicrosecond(format) - case "DAY_SECOND": - return extractDaySecond(format) - case "DAY_MINUTE": - return extractDayMinute(format) - case "DAY_HOUR": - return extractDayHour(format) - case "YEAR_MONTH": - return extractYearMonth(format) - default: - return 0, 0, 0, 0, errors.Errorf("invalid singel timeunit - %s", unit) - } -} - -// IsClockUnit returns true when unit is interval unit with hour, minute or second. -func IsClockUnit(unit string) bool { - switch strings.ToUpper(unit) { - case "MICROSECOND", "SECOND", "MINUTE", "HOUR", - "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "MINUTE_SECOND", - "HOUR_MICROSECOND", "HOUR_SECOND", "HOUR_MINUTE", - "DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", "DAY_HOUR": - return true - default: - return false - } -} - -// IsDateFormat returns true when the specified time format could contain only date. -func IsDateFormat(format string) bool { - format = strings.TrimSpace(format) - seps := parseDateFormat(format) - length := len(format) - switch len(seps) { - case 1: - if (length == 8) || (length == 6) { - return true - } - case 3: - return true - } - return false -} - -// ParseTimeFromInt64 parses mysql time value from int64. -func ParseTimeFromInt64(num int64) (Time, error) { - return parseDateTimeFromNum(num) -} diff --git a/vendor/github.com/pingcap/tidb/mysql/type.go b/vendor/github.com/pingcap/tidb/mysql/type.go deleted file mode 100644 index c80b0c5e5..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/type.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -// MySQL type informations. -const ( - TypeDecimal byte = iota - TypeTiny - TypeShort - TypeLong - TypeFloat - TypeDouble - TypeNull - TypeTimestamp - TypeLonglong - TypeInt24 - TypeDate - TypeDuration /* Original name was TypeTime, renamed to Duration to resolve the conflict with Go type Time.*/ - TypeDatetime - TypeYear - TypeNewDate - TypeVarchar - TypeBit -) - -// TypeUnspecified is an uninitialized type. TypeDecimal is not used in MySQL. -var TypeUnspecified = TypeDecimal - -// MySQL type informations. -const ( - TypeNewDecimal byte = iota + 0xf6 - TypeEnum - TypeSet - TypeTinyBlob - TypeMediumBlob - TypeLongBlob - TypeBlob - TypeVarString - TypeString - TypeGeometry -) - -// IsUninitializedType check if a type code is uninitialized. -// TypeDecimal is the old type code for decimal and not be used in the new mysql version. -func IsUninitializedType(tp byte) bool { - return tp == TypeDecimal -} - -// Flag informations. -const ( - NotNullFlag = 1 /* Field can't be NULL */ - PriKeyFlag = 2 /* Field is part of a primary key */ - UniqueKeyFlag = 4 /* Field is part of a unique key */ - MultipleKeyFlag = 8 /* Field is part of a key */ - BlobFlag = 16 /* Field is a blob */ - UnsignedFlag = 32 /* Field is unsigned */ - ZerofillFlag = 64 /* Field is zerofill */ - BinaryFlag = 128 /* Field is binary */ - - EnumFlag = 256 /* Field is an enum */ - AutoIncrementFlag = 512 /* Field is an auto increment field */ - TimestampFlag = 1024 /* Field is a timestamp */ - SetFlag = 2048 /* Field is a set */ - NoDefaultValueFlag = 4096 /* Field doesn't have a default value */ - OnUpdateNowFlag = 8192 /* Field is set to NOW on UPDATE */ - NumFlag = 32768 /* Field is a num (for clients) */ - PartKeyFlag = 16384 /* Intern: Part of some keys */ - GroupFlag = 32768 /* Intern: Group field */ - UniqueFlag = 65536 /* Intern: Used by sql_yacc */ - BinCmpFlag = 131072 /* Intern: Used by sql_yacc */ -) - -// TypeInt24 bounds. -const ( - MaxUint24 = 1<<24 - 1 - MaxInt24 = 1<<23 - 1 - MinInt24 = -1 << 23 -) - -// HasNotNullFlag checks if NotNullFlag is set. -func HasNotNullFlag(flag uint) bool { - return (flag & NotNullFlag) > 0 -} - -// HasNoDefaultValueFlag checks if NoDefaultValueFlag is set. -func HasNoDefaultValueFlag(flag uint) bool { - return (flag & NoDefaultValueFlag) > 0 -} - -// HasAutoIncrementFlag checks if AutoIncrementFlag is set. -func HasAutoIncrementFlag(flag uint) bool { - return (flag & AutoIncrementFlag) > 0 -} - -// HasUnsignedFlag checks if UnsignedFlag is set. -func HasUnsignedFlag(flag uint) bool { - return (flag & UnsignedFlag) > 0 -} - -// HasZerofillFlag checks if ZerofillFlag is set. -func HasZerofillFlag(flag uint) bool { - return (flag & ZerofillFlag) > 0 -} - -// HasBinaryFlag checks if BinaryFlag is set. -func HasBinaryFlag(flag uint) bool { - return (flag & BinaryFlag) > 0 -} - -// HasPriKeyFlag checks if PriKeyFlag is set. -func HasPriKeyFlag(flag uint) bool { - return (flag & PriKeyFlag) > 0 -} - -// HasUniKeyFlag checks if UniqueKeyFlag is set. -func HasUniKeyFlag(flag uint) bool { - return (flag & UniqueKeyFlag) > 0 -} - -// HasMultipleKeyFlag checks if MultipleKeyFlag is set. -func HasMultipleKeyFlag(flag uint) bool { - return (flag & MultipleKeyFlag) > 0 -} - -// HasTimestampFlag checks if HasTimestampFlag is set. -func HasTimestampFlag(flag uint) bool { - return (flag & TimestampFlag) > 0 -} - -// HasOnUpdateNowFlag checks if OnUpdateNowFlag is set. -func HasOnUpdateNowFlag(flag uint) bool { - return (flag & OnUpdateNowFlag) > 0 -} diff --git a/vendor/github.com/pingcap/tidb/mysql/util.go b/vendor/github.com/pingcap/tidb/mysql/util.go deleted file mode 100644 index 7a5cf72e1..000000000 --- a/vendor/github.com/pingcap/tidb/mysql/util.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -// GetDefaultFieldLength is used for Interger Types, Flen is the display length. -// Call this when no Flen assigned in ddl. -// or column value is calculated from an expression. -// For example: "select count(*) from t;", the column type is int64 and Flen in ResultField will be 21. -// See: https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html -func GetDefaultFieldLength(tp byte) int { - switch tp { - case TypeTiny: - return 4 - case TypeShort: - return 6 - case TypeInt24: - return 9 - case TypeLong: - return 11 - case TypeLonglong: - return 21 - case TypeDecimal: - // See: https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html - return 10 - case TypeBit, TypeBlob: - return -1 - default: - //TODO: add more types - return -1 - } -} - -// GetDefaultDecimal returns the default decimal length for column. -func GetDefaultDecimal(tp byte) int { - switch tp { - case TypeDecimal: - // See: https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html - return 0 - default: - //TODO: add more types - return -1 - } -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/logic.go b/vendor/github.com/pingcap/tidb/optimizer/logic.go deleted file mode 100644 index 36070dbf7..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/logic.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package optimizer - -import ( - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/evaluator" -) - -// logicOptimize does logic optimization works on AST. -func logicOptimize(ctx context.Context, node ast.Node) error { - return preEvaluate(ctx, node) -} - -// preEvaluate evaluates preEvaluable expression and rewrites constant expression to value expression. -func preEvaluate(ctx context.Context, node ast.Node) error { - pe := preEvaluator{ctx: ctx} - node.Accept(&pe) - return pe.err -} - -type preEvaluator struct { - ctx context.Context - err error -} - -func (r *preEvaluator) Enter(in ast.Node) (ast.Node, bool) { - return in, false -} - -func (r *preEvaluator) Leave(in ast.Node) (ast.Node, bool) { - if expr, ok := in.(ast.ExprNode); ok { - if _, ok = expr.(*ast.ValueExpr); ok { - return in, true - } else if ast.IsPreEvaluable(expr) { - val, err := evaluator.Eval(r.ctx, expr) - if err != nil { - r.err = err - return in, false - } - if ast.IsConstant(expr) { - // The expression is constant, rewrite the expression to value expression. - valExpr := &ast.ValueExpr{} - valExpr.SetText(expr.Text()) - valExpr.SetType(expr.GetType()) - valExpr.SetValue(val) - return valExpr, true - } - expr.SetValue(val) - } - } - return in, true -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/optimizer.go b/vendor/github.com/pingcap/tidb/optimizer/optimizer.go deleted file mode 100644 index 04bf74868..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/optimizer.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package optimizer - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/optimizer/plan" - "github.com/pingcap/tidb/terror" -) - -// Optimize does optimization and creates a Plan. -// The node must be prepared first. -func Optimize(ctx context.Context, node ast.Node, sb plan.SubQueryBuilder) (plan.Plan, error) { - // We have to infer type again because after parameter is set, the expression type may change. - if err := InferType(node); err != nil { - return nil, errors.Trace(err) - } - if err := logicOptimize(ctx, node); err != nil { - return nil, errors.Trace(err) - } - p, err := plan.BuildPlan(node, sb) - if err != nil { - return nil, errors.Trace(err) - } - err = plan.Refine(p) - if err != nil { - return nil, errors.Trace(err) - } - return p, nil -} - -// Prepare prepares a raw statement parsed from parser. -// The statement must be prepared before it can be passed to optimize function. -// We pass InfoSchema instead of getting from Context in case it is changed after resolving name. -func Prepare(is infoschema.InfoSchema, ctx context.Context, node ast.Node) error { - ast.SetFlag(node) - if err := Preprocess(node, is, ctx); err != nil { - return errors.Trace(err) - } - if err := Validate(node, true); err != nil { - return errors.Trace(err) - } - return nil -} - -// Optimizer error codes. -const ( - CodeOneColumn terror.ErrCode = 1 - CodeSameColumns terror.ErrCode = 2 - CodeMultiWildCard terror.ErrCode = 3 - CodeUnsupported terror.ErrCode = 4 - CodeInvalidGroupFuncUse terror.ErrCode = 5 - CodeIllegalReference terror.ErrCode = 6 -) - -// Optimizer base errors. -var ( - ErrOneColumn = terror.ClassOptimizer.New(CodeOneColumn, "Operand should contain 1 column(s)") - ErrSameColumns = terror.ClassOptimizer.New(CodeSameColumns, "Operands should contain same columns") - ErrMultiWildCard = terror.ClassOptimizer.New(CodeMultiWildCard, "wildcard field exist more than once") - ErrUnSupported = terror.ClassOptimizer.New(CodeUnsupported, "unsupported") - ErrInvalidGroupFuncUse = terror.ClassOptimizer.New(CodeInvalidGroupFuncUse, "Invalid use of group function") - ErrIllegalReference = terror.ClassOptimizer.New(CodeIllegalReference, "Illegal reference") -) - -func init() { - mySQLErrCodes := map[terror.ErrCode]uint16{ - CodeOneColumn: mysql.ErrOperandColumns, - CodeSameColumns: mysql.ErrOperandColumns, - CodeMultiWildCard: mysql.ErrParse, - CodeInvalidGroupFuncUse: mysql.ErrInvalidGroupFuncUse, - CodeIllegalReference: mysql.ErrIllegalReference, - } - terror.ErrClassToMySQLCodes[terror.ClassOptimizer] = mySQLErrCodes -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/cost.go b/vendor/github.com/pingcap/tidb/optimizer/plan/cost.go deleted file mode 100644 index 88f80ce04..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/cost.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "math" -) - -// Pre-defined cost factors. -const ( - FullRangeCount = 10000 - HalfRangeCount = 4000 - MiddleRangeCount = 100 - RowCost = 1.0 - IndexCost = 2.0 - SortCost = 2.0 - FilterRate = 0.5 -) - -// CostEstimator estimates the cost of a plan. -type costEstimator struct { -} - -// Enter implements Visitor Enter interface. -func (c *costEstimator) Enter(p Plan) (Plan, bool) { - return p, false -} - -// Leave implements Visitor Leave interface. -func (c *costEstimator) Leave(p Plan) (Plan, bool) { - switch v := p.(type) { - case *IndexScan: - c.indexScan(v) - case *Limit: - v.rowCount = v.Src().RowCount() - v.startupCost = v.Src().StartupCost() - v.totalCost = v.Src().TotalCost() - case *SelectFields: - if v.Src() != nil { - v.startupCost = v.Src().StartupCost() - v.rowCount = v.Src().RowCount() - v.totalCost = v.Src().TotalCost() - } - case *SelectLock: - v.startupCost = v.Src().StartupCost() - v.rowCount = v.Src().RowCount() - v.totalCost = v.Src().TotalCost() - case *Sort: - // Sort plan must retrieve all the rows before returns the first row. - v.startupCost = v.Src().TotalCost() + v.Src().RowCount()*SortCost - if v.limit == 0 { - v.rowCount = v.Src().RowCount() - } else { - v.rowCount = math.Min(v.Src().RowCount(), v.limit) - } - v.totalCost = v.startupCost + v.rowCount*RowCost - case *TableScan: - c.tableScan(v) - } - return p, true -} - -func (c *costEstimator) tableScan(v *TableScan) { - var rowCount float64 = FullRangeCount - for _, con := range v.AccessConditions { - rowCount *= guesstimateFilterRate(con) - } - v.startupCost = 0 - if v.limit == 0 { - // limit is zero means no limit. - v.rowCount = rowCount - } else { - v.rowCount = math.Min(rowCount, v.limit) - } - v.totalCost = v.rowCount * RowCost -} - -func (c *costEstimator) indexScan(v *IndexScan) { - var rowCount float64 = FullRangeCount - for _, con := range v.AccessConditions { - rowCount *= guesstimateFilterRate(con) - } - v.startupCost = 0 - if v.limit == 0 { - // limit is zero means no limit. - v.rowCount = rowCount - } else { - v.rowCount = math.Min(rowCount, v.limit) - } - v.totalCost = v.rowCount * RowCost -} - -// EstimateCost estimates the cost of the plan. -func EstimateCost(p Plan) float64 { - var estimator costEstimator - p.Accept(&estimator) - return p.TotalCost() -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/filterrate.go b/vendor/github.com/pingcap/tidb/optimizer/plan/filterrate.go deleted file mode 100644 index 244309a46..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/filterrate.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/parser/opcode" -) - -const ( - rateFull float64 = 1 - rateEqual float64 = 0.01 - rateNotEqual float64 = 0.99 - rateBetween float64 = 0.1 - rateGreaterOrLess float64 = 0.33 - rateIsFalse float64 = 0.1 - rateIsNull float64 = 0.1 - rateLike float64 = 0.1 -) - -// guesstimateFilterRate guesstimates the filter rate for an expression. -// For example: a table has 100 rows, after filter expression 'a between 0 and 9', -// 10 rows returned, then the filter rate is '0.1'. -// It only depends on the expression type, not the expression value. -// The expr parameter should contain only one column name. -func guesstimateFilterRate(expr ast.ExprNode) float64 { - switch x := expr.(type) { - case *ast.BetweenExpr: - return rateBetween - case *ast.BinaryOperationExpr: - return guesstimateBinop(x) - case *ast.ColumnNameExpr: - return rateFull - case *ast.IsNullExpr: - return guesstimateIsNull(x) - case *ast.IsTruthExpr: - return guesstimateIsTrue(x) - case *ast.ParenthesesExpr: - return guesstimateFilterRate(x.Expr) - case *ast.PatternInExpr: - return guesstimatePatternIn(x) - case *ast.PatternLikeExpr: - return guesstimatePatternLike(x) - } - return rateFull -} - -func guesstimateBinop(expr *ast.BinaryOperationExpr) float64 { - switch expr.Op { - case opcode.AndAnd: - // P(A and B) = P(A) * P(B) - return guesstimateFilterRate(expr.L) * guesstimateFilterRate(expr.R) - case opcode.OrOr: - // P(A or B) = P(A) + P(B) – P(A and B) - rateL := guesstimateFilterRate(expr.L) - rateR := guesstimateFilterRate(expr.R) - return rateL + rateR - rateL*rateR - case opcode.EQ: - return rateEqual - case opcode.GT, opcode.GE, opcode.LT, opcode.LE: - return rateGreaterOrLess - case opcode.NE: - return rateNotEqual - } - return rateFull -} - -func guesstimateIsNull(expr *ast.IsNullExpr) float64 { - if expr.Not { - return rateFull - rateIsNull - } - return rateIsNull -} - -func guesstimateIsTrue(expr *ast.IsTruthExpr) float64 { - if expr.True == 0 { - if expr.Not { - return rateFull - rateIsFalse - } - return rateIsFalse - } - if expr.Not { - return rateIsFalse + rateIsNull - } - return rateFull - rateIsFalse - rateIsNull -} - -func guesstimatePatternIn(expr *ast.PatternInExpr) float64 { - if len(expr.List) > 0 { - rate := rateEqual * float64(len(expr.List)) - if expr.Not { - return rateFull - rate - } - return rate - } - return rateFull -} - -func guesstimatePatternLike(expr *ast.PatternLikeExpr) float64 { - if expr.Not { - return rateFull - rateLike - } - return rateLike -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/plan.go b/vendor/github.com/pingcap/tidb/optimizer/plan/plan.go deleted file mode 100644 index 02ac6369a..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/plan.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "math" - - "github.com/pingcap/tidb/ast" -) - -// Plan is a description of an execution flow. -// It is created from ast.Node first, then optimized by optimizer, -// then used by executor to create a Cursor which executes the statement. -type Plan interface { - // Accept a visitor, implementation should call Visitor.Enter first, - // then call children Accept methods, finally call Visitor.Leave. - Accept(v Visitor) (out Plan, ok bool) - // Fields returns the result fields of the plan. - Fields() []*ast.ResultField - // SetFields sets the results fields of the plan. - SetFields(fields []*ast.ResultField) - // The cost before returning fhe first row. - StartupCost() float64 - // The cost after returning all the rows. - TotalCost() float64 - // The expected row count. - RowCount() float64 - // SetLimit is used to push limit to upstream to estimate the cost. - SetLimit(limit float64) -} - -// WithSrcPlan is a Plan has a source Plan. -type WithSrcPlan interface { - Plan - Src() Plan - SetSrc(src Plan) -} - -// Visitor visits a Plan. -type Visitor interface { - // Enter is called before visit children. - // The out plan should be of exactly the same type as the in plan. - // if skipChildren is true, the children should not be visited. - Enter(in Plan) (out Plan, skipChildren bool) - - // Leave is called after children has been visited, the out Plan can - // be another type, this is different than ast.Visitor Leave, because - // Plans only contain children plans as Plan interface type, so it is safe - // to return a different type of plan. - Leave(in Plan) (out Plan, ok bool) -} - -// basePlan implements base Plan interface. -// Should be used as embedded struct in Plan implementations. -type basePlan struct { - fields []*ast.ResultField - startupCost float64 - totalCost float64 - rowCount float64 - limit float64 -} - -// StartupCost implements Plan StartupCost interface. -func (p *basePlan) StartupCost() float64 { - return p.startupCost -} - -// TotalCost implements Plan TotalCost interface. -func (p *basePlan) TotalCost() float64 { - return p.totalCost -} - -// RowCount implements Plan RowCount interface. -func (p *basePlan) RowCount() float64 { - if p.limit == 0 { - return p.rowCount - } - return math.Min(p.rowCount, p.limit) -} - -// SetLimit implements Plan SetLimit interface. -func (p *basePlan) SetLimit(limit float64) { - p.limit = limit -} - -// Fields implements Plan Fields interface. -func (p *basePlan) Fields() []*ast.ResultField { - return p.fields -} - -// SetFields implements Plan SetFields interface. -func (p *basePlan) SetFields(fields []*ast.ResultField) { - p.fields = fields -} - -// srcPlan implements base PlanWithSrc interface. -type planWithSrc struct { - basePlan - src Plan -} - -// Src implements PlanWithSrc interface. -func (p *planWithSrc) Src() Plan { - return p.src -} - -// SetSrc implements PlanWithSrc interface. -func (p *planWithSrc) SetSrc(src Plan) { - p.src = src -} - -// SetLimit implements Plan interface. -func (p *planWithSrc) SetLimit(limit float64) { - p.limit = limit - p.src.SetLimit(limit) -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/planbuilder.go b/vendor/github.com/pingcap/tidb/optimizer/plan/planbuilder.go deleted file mode 100644 index 74f4da7b6..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/planbuilder.go +++ /dev/null @@ -1,926 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/types" -) - -// Error instances. -var ( - ErrUnsupportedType = terror.ClassOptimizerPlan.New(CodeUnsupportedType, "Unsupported type") -) - -// Error codes. -const ( - CodeUnsupportedType terror.ErrCode = 1 -) - -// BuildPlan builds a plan from a node. -// It returns ErrUnsupportedType if ast.Node type is not supported yet. -func BuildPlan(node ast.Node, sb SubQueryBuilder) (Plan, error) { - builder := planBuilder{sb: sb} - p := builder.build(node) - return p, builder.err -} - -// planBuilder builds Plan from an ast.Node. -// It just builds the ast node straightforwardly. -type planBuilder struct { - err error - hasAgg bool - sb SubQueryBuilder - obj interface{} -} - -func (b *planBuilder) build(node ast.Node) Plan { - switch x := node.(type) { - case *ast.AdminStmt: - return b.buildAdmin(x) - case *ast.AlterTableStmt: - return b.buildDDL(x) - case *ast.CreateDatabaseStmt: - return b.buildDDL(x) - case *ast.CreateIndexStmt: - return b.buildDDL(x) - case *ast.CreateTableStmt: - return b.buildDDL(x) - case *ast.DeallocateStmt: - return &Deallocate{Name: x.Name} - case *ast.DeleteStmt: - return b.buildDelete(x) - case *ast.DropDatabaseStmt: - return b.buildDDL(x) - case *ast.DropIndexStmt: - return b.buildDDL(x) - case *ast.DropTableStmt: - return b.buildDDL(x) - case *ast.ExecuteStmt: - return &Execute{Name: x.Name, UsingVars: x.UsingVars} - case *ast.ExplainStmt: - return b.buildExplain(x) - case *ast.InsertStmt: - return b.buildInsert(x) - case *ast.PrepareStmt: - return b.buildPrepare(x) - case *ast.SelectStmt: - return b.buildSelect(x) - case *ast.UnionStmt: - return b.buildUnion(x) - case *ast.UpdateStmt: - return b.buildUpdate(x) - case *ast.UseStmt: - return b.buildSimple(x) - case *ast.SetCharsetStmt: - return b.buildSimple(x) - case *ast.SetStmt: - return b.buildSimple(x) - case *ast.ShowStmt: - return b.buildShow(x) - case *ast.DoStmt: - return b.buildSimple(x) - case *ast.BeginStmt: - return b.buildSimple(x) - case *ast.CommitStmt: - return b.buildSimple(x) - case *ast.RollbackStmt: - return b.buildSimple(x) - case *ast.CreateUserStmt: - return b.buildSimple(x) - case *ast.SetPwdStmt: - return b.buildSimple(x) - case *ast.GrantStmt: - return b.buildSimple(x) - case *ast.TruncateTableStmt: - return b.buildDDL(x) - } - b.err = ErrUnsupportedType.Gen("Unsupported type %T", node) - return nil -} - -// Detect aggregate function or groupby clause. -func (b *planBuilder) detectSelectAgg(sel *ast.SelectStmt) bool { - if sel.GroupBy != nil { - return true - } - for _, f := range sel.GetResultFields() { - if ast.HasAggFlag(f.Expr) { - return true - } - } - if sel.Having != nil { - if ast.HasAggFlag(sel.Having.Expr) { - return true - } - } - if sel.OrderBy != nil { - for _, item := range sel.OrderBy.Items { - if ast.HasAggFlag(item.Expr) { - return true - } - } - } - return false -} - -// extractSelectAgg extracts aggregate functions and converts ColumnNameExpr to aggregate function. -func (b *planBuilder) extractSelectAgg(sel *ast.SelectStmt) []*ast.AggregateFuncExpr { - extractor := &ast.AggregateFuncExtractor{AggFuncs: make([]*ast.AggregateFuncExpr, 0)} - for _, f := range sel.GetResultFields() { - n, ok := f.Expr.Accept(extractor) - if !ok { - b.err = errors.New("Failed to extract agg expr!") - return nil - } - ve, ok := f.Expr.(*ast.ValueExpr) - if ok && len(f.Column.Name.O) > 0 { - agg := &ast.AggregateFuncExpr{ - F: ast.AggFuncFirstRow, - Args: []ast.ExprNode{ve}, - } - extractor.AggFuncs = append(extractor.AggFuncs, agg) - n = agg - } - f.Expr = n.(ast.ExprNode) - } - // Extract agg funcs from having clause. - if sel.Having != nil { - n, ok := sel.Having.Expr.Accept(extractor) - if !ok { - b.err = errors.New("Failed to extract agg expr from having clause") - return nil - } - sel.Having.Expr = n.(ast.ExprNode) - } - // Extract agg funcs from orderby clause. - if sel.OrderBy != nil { - for _, item := range sel.OrderBy.Items { - n, ok := item.Expr.Accept(extractor) - if !ok { - b.err = errors.New("Failed to extract agg expr from orderby clause") - return nil - } - item.Expr = n.(ast.ExprNode) - // If item is PositionExpr, we need to rebind it. - // For PositionExpr will refer to a ResultField in fieldlist. - // After extract AggExpr from fieldlist, it may be changed (See the code above). - if pe, ok := item.Expr.(*ast.PositionExpr); ok { - pe.Refer = sel.GetResultFields()[pe.N-1] - } - } - } - return extractor.AggFuncs -} - -func (b *planBuilder) buildSubquery(n ast.Node) { - sv := &subqueryVisitor{ - builder: b, - } - _, ok := n.Accept(sv) - if !ok { - log.Errorf("Extract subquery error") - } -} - -func (b *planBuilder) buildSelect(sel *ast.SelectStmt) Plan { - var aggFuncs []*ast.AggregateFuncExpr - hasAgg := b.detectSelectAgg(sel) - if hasAgg { - aggFuncs = b.extractSelectAgg(sel) - } - // Build subquery - // Convert subquery to expr with plan - b.buildSubquery(sel) - var p Plan - if sel.From != nil { - p = b.buildFrom(sel) - if b.err != nil { - return nil - } - if sel.LockTp != ast.SelectLockNone { - p = b.buildSelectLock(p, sel.LockTp) - if b.err != nil { - return nil - } - } - if hasAgg { - p = b.buildAggregate(p, aggFuncs, sel.GroupBy) - } - p = b.buildSelectFields(p, sel.GetResultFields()) - if b.err != nil { - return nil - } - } else { - if hasAgg { - p = b.buildAggregate(p, aggFuncs, nil) - } - p = b.buildSelectFields(p, sel.GetResultFields()) - if b.err != nil { - return nil - } - } - if sel.Having != nil { - p = b.buildHaving(p, sel.Having) - if b.err != nil { - return nil - } - } - if sel.Distinct { - p = b.buildDistinct(p) - if b.err != nil { - return nil - } - } - if sel.OrderBy != nil && !matchOrder(p, sel.OrderBy.Items) { - p = b.buildSort(p, sel.OrderBy.Items) - if b.err != nil { - return nil - } - } - if sel.Limit != nil { - p = b.buildLimit(p, sel.Limit) - if b.err != nil { - return nil - } - } - return p -} - -func (b *planBuilder) buildFrom(sel *ast.SelectStmt) Plan { - from := sel.From.TableRefs - if from.Right == nil { - return b.buildSingleTable(sel) - } - return b.buildJoin(sel) -} - -func (b *planBuilder) buildSingleTable(sel *ast.SelectStmt) Plan { - from := sel.From.TableRefs - ts, ok := from.Left.(*ast.TableSource) - if !ok { - b.err = ErrUnsupportedType.Gen("Unsupported type %T", from.Left) - return nil - } - var bestPlan Plan - switch v := ts.Source.(type) { - case *ast.TableName: - case *ast.SelectStmt: - bestPlan = b.buildSelect(v) - } - if bestPlan != nil { - return bestPlan - } - tn, ok := ts.Source.(*ast.TableName) - if !ok { - b.err = ErrUnsupportedType.Gen("Unsupported type %T", ts.Source) - return nil - } - conditions := splitWhere(sel.Where) - path := &joinPath{table: tn, conditions: conditions} - candidates := b.buildAllAccessMethodsPlan(path) - var lowestCost float64 - for _, v := range candidates { - cost := EstimateCost(b.buildPseudoSelectPlan(v, sel)) - if bestPlan == nil { - bestPlan = v - lowestCost = cost - } - if cost < lowestCost { - bestPlan = v - lowestCost = cost - } - } - return bestPlan -} - -func (b *planBuilder) buildAllAccessMethodsPlan(path *joinPath) []Plan { - var candidates []Plan - p := b.buildTableScanPlan(path) - candidates = append(candidates, p) - for _, index := range path.table.TableInfo.Indices { - ip := b.buildIndexScanPlan(index, path) - candidates = append(candidates, ip) - } - return candidates -} - -func (b *planBuilder) buildTableScanPlan(path *joinPath) Plan { - tn := path.table - p := &TableScan{ - Table: tn.TableInfo, - } - // Equal condition contains a column from previous joined table. - p.RefAccess = len(path.eqConds) > 0 - p.SetFields(tn.GetResultFields()) - var pkName model.CIStr - if p.Table.PKIsHandle { - for _, colInfo := range p.Table.Columns { - if mysql.HasPriKeyFlag(colInfo.Flag) { - pkName = colInfo.Name - } - } - } - for _, con := range path.conditions { - if pkName.L != "" { - checker := conditionChecker{tableName: tn.TableInfo.Name, pkName: pkName} - if checker.check(con) { - p.AccessConditions = append(p.AccessConditions, con) - } else { - p.FilterConditions = append(p.FilterConditions, con) - } - } else { - p.FilterConditions = append(p.FilterConditions, con) - } - } - return p -} - -func (b *planBuilder) buildIndexScanPlan(index *model.IndexInfo, path *joinPath) Plan { - tn := path.table - ip := &IndexScan{Table: tn.TableInfo, Index: index} - ip.RefAccess = len(path.eqConds) > 0 - ip.SetFields(tn.GetResultFields()) - - condMap := map[ast.ExprNode]bool{} - for _, con := range path.conditions { - condMap[con] = true - } -out: - // Build equal access conditions first. - // Starts from the first index column, if equal condition is found, add it to access conditions, - // proceed to the next index column. until we can't find any equal condition for the column. - for ip.AccessEqualCount < len(index.Columns) { - for con := range condMap { - binop, ok := con.(*ast.BinaryOperationExpr) - if !ok || binop.Op != opcode.EQ { - continue - } - if ast.IsPreEvaluable(binop.L) { - binop.L, binop.R = binop.R, binop.L - } - if !ast.IsPreEvaluable(binop.R) { - continue - } - cn, ok2 := binop.L.(*ast.ColumnNameExpr) - if !ok2 || cn.Refer.Column.Name.L != index.Columns[ip.AccessEqualCount].Name.L { - continue - } - ip.AccessConditions = append(ip.AccessConditions, con) - delete(condMap, con) - ip.AccessEqualCount++ - continue out - } - break - } - - for con := range condMap { - if ip.AccessEqualCount < len(ip.Index.Columns) { - // Try to add non-equal access condition for index column at AccessEqualCount. - checker := conditionChecker{tableName: tn.TableInfo.Name, idx: index, columnOffset: ip.AccessEqualCount} - if checker.check(con) { - ip.AccessConditions = append(ip.AccessConditions, con) - } else { - ip.FilterConditions = append(ip.FilterConditions, con) - } - } else { - ip.FilterConditions = append(ip.FilterConditions, con) - } - } - return ip -} - -// buildPseudoSelectPlan pre-builds more complete plans that may affect total cost. -func (b *planBuilder) buildPseudoSelectPlan(p Plan, sel *ast.SelectStmt) Plan { - if sel.OrderBy == nil { - return p - } - if sel.GroupBy != nil { - return p - } - if !matchOrder(p, sel.OrderBy.Items) { - np := &Sort{ByItems: sel.OrderBy.Items} - np.SetSrc(p) - p = np - } - if sel.Limit != nil { - np := &Limit{Offset: sel.Limit.Offset, Count: sel.Limit.Count} - np.SetSrc(p) - np.SetLimit(0) - p = np - } - return p -} - -func (b *planBuilder) buildSelectLock(src Plan, lock ast.SelectLockType) *SelectLock { - selectLock := &SelectLock{ - Lock: lock, - } - selectLock.SetSrc(src) - selectLock.SetFields(src.Fields()) - return selectLock -} - -func (b *planBuilder) buildSelectFields(src Plan, fields []*ast.ResultField) Plan { - selectFields := &SelectFields{} - selectFields.SetSrc(src) - selectFields.SetFields(fields) - return selectFields -} - -func (b *planBuilder) buildAggregate(src Plan, aggFuncs []*ast.AggregateFuncExpr, groupby *ast.GroupByClause) Plan { - // Add aggregate plan. - aggPlan := &Aggregate{ - AggFuncs: aggFuncs, - } - aggPlan.SetSrc(src) - if src != nil { - aggPlan.SetFields(src.Fields()) - } - if groupby != nil { - aggPlan.GroupByItems = groupby.Items - } - return aggPlan -} - -func (b *planBuilder) buildHaving(src Plan, having *ast.HavingClause) Plan { - p := &Having{ - Conditions: splitWhere(having.Expr), - } - p.SetSrc(src) - p.SetFields(src.Fields()) - return p -} - -func (b *planBuilder) buildSort(src Plan, byItems []*ast.ByItem) Plan { - sort := &Sort{ - ByItems: byItems, - } - sort.SetSrc(src) - sort.SetFields(src.Fields()) - return sort -} - -func (b *planBuilder) buildLimit(src Plan, limit *ast.Limit) Plan { - li := &Limit{ - Offset: limit.Offset, - Count: limit.Count, - } - li.SetSrc(src) - li.SetFields(src.Fields()) - return li -} - -func (b *planBuilder) buildPrepare(x *ast.PrepareStmt) Plan { - p := &Prepare{ - Name: x.Name, - } - if x.SQLVar != nil { - p.SQLText, _ = x.SQLVar.GetValue().(string) - } else { - p.SQLText = x.SQLText - } - return p -} - -func (b *planBuilder) buildAdmin(as *ast.AdminStmt) Plan { - var p Plan - - switch as.Tp { - case ast.AdminCheckTable: - p = &CheckTable{Tables: as.Tables} - case ast.AdminShowDDL: - p = &ShowDDL{} - p.SetFields(buildShowDDLFields()) - default: - b.err = ErrUnsupportedType.Gen("Unsupported type %T", as) - } - - return p -} - -func buildShowDDLFields() []*ast.ResultField { - rfs := make([]*ast.ResultField, 0, 6) - rfs = append(rfs, buildResultField("", "SCHEMA_VER", mysql.TypeLonglong, 4)) - rfs = append(rfs, buildResultField("", "OWNER", mysql.TypeVarchar, 64)) - rfs = append(rfs, buildResultField("", "JOB", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "BG_SCHEMA_VER", mysql.TypeLonglong, 4)) - rfs = append(rfs, buildResultField("", "BG_OWNER", mysql.TypeVarchar, 64)) - rfs = append(rfs, buildResultField("", "BG_JOB", mysql.TypeVarchar, 128)) - - return rfs -} - -func buildResultField(tableName, name string, tp byte, size int) *ast.ResultField { - cs := charset.CharsetBin - cl := charset.CharsetBin - flag := mysql.UnsignedFlag - if tp == mysql.TypeVarchar || tp == mysql.TypeBlob { - cs = mysql.DefaultCharset - cl = mysql.DefaultCollationName - flag = 0 - } - - fieldType := types.FieldType{ - Charset: cs, - Collate: cl, - Tp: tp, - Flen: size, - Flag: uint(flag), - } - colInfo := &model.ColumnInfo{ - Name: model.NewCIStr(name), - FieldType: fieldType, - } - expr := &ast.ValueExpr{} - expr.SetType(&fieldType) - - return &ast.ResultField{ - Column: colInfo, - ColumnAsName: colInfo.Name, - TableAsName: model.NewCIStr(tableName), - DBName: model.NewCIStr(infoschema.Name), - Expr: expr, - } -} - -// matchOrder checks if the plan has the same ordering as items. -func matchOrder(p Plan, items []*ast.ByItem) bool { - switch x := p.(type) { - case *Aggregate: - return false - case *IndexScan: - if len(items) > len(x.Index.Columns) { - return false - } - for i, item := range items { - if item.Desc { - return false - } - var rf *ast.ResultField - switch y := item.Expr.(type) { - case *ast.ColumnNameExpr: - rf = y.Refer - case *ast.PositionExpr: - rf = y.Refer - default: - return false - } - if rf.Table.Name.L != x.Table.Name.L || rf.Column.Name.L != x.Index.Columns[i].Name.L { - return false - } - } - return true - case *TableScan: - if len(items) != 1 || !x.Table.PKIsHandle { - return false - } - if items[0].Desc { - return false - } - var refer *ast.ResultField - switch x := items[0].Expr.(type) { - case *ast.ColumnNameExpr: - refer = x.Refer - case *ast.PositionExpr: - refer = x.Refer - default: - return false - } - if mysql.HasPriKeyFlag(refer.Column.Flag) { - return true - } - return false - case *JoinOuter: - return false - case *JoinInner: - return false - case *Sort: - // Sort plan should not be checked here as there should only be one sort plan in a plan tree. - return false - case WithSrcPlan: - return matchOrder(x.Src(), items) - } - return true -} - -// splitWhere split a where expression to a list of AND conditions. -func splitWhere(where ast.ExprNode) []ast.ExprNode { - var conditions []ast.ExprNode - switch x := where.(type) { - case nil: - case *ast.BinaryOperationExpr: - if x.Op == opcode.AndAnd { - conditions = append(conditions, splitWhere(x.L)...) - conditions = append(conditions, splitWhere(x.R)...) - } else { - conditions = append(conditions, x) - } - case *ast.ParenthesesExpr: - conditions = append(conditions, splitWhere(x.Expr)...) - default: - conditions = append(conditions, where) - } - return conditions -} - -// SubQueryBuilder is the interface for building SubQuery executor. -type SubQueryBuilder interface { - Build(p Plan) ast.SubqueryExec -} - -// subqueryVisitor visits AST and handles SubqueryExpr. -type subqueryVisitor struct { - builder *planBuilder -} - -func (se *subqueryVisitor) Enter(in ast.Node) (out ast.Node, skipChildren bool) { - switch x := in.(type) { - case *ast.SubqueryExpr: - p := se.builder.build(x.Query) - // The expr pointor is copyed into ResultField when running name resolver. - // So we can not just replace the expr node in AST. We need to put SubQuery into the expr. - // See: optimizer.nameResolver.createResultFields() - x.SubqueryExec = se.builder.sb.Build(p) - return in, true - case *ast.Join: - // SubSelect in from clause will be handled in buildJoin(). - return in, true - } - return in, false -} - -func (se *subqueryVisitor) Leave(in ast.Node) (out ast.Node, ok bool) { - return in, true -} - -func (b *planBuilder) buildUnion(union *ast.UnionStmt) Plan { - sels := make([]Plan, len(union.SelectList.Selects)) - for i, sel := range union.SelectList.Selects { - sels[i] = b.buildSelect(sel) - } - var p Plan - p = &Union{ - Selects: sels, - } - unionFields := union.GetResultFields() - for _, sel := range sels { - for i, f := range sel.Fields() { - if i == len(unionFields) { - b.err = errors.New("The used SELECT statements have a different number of columns") - return nil - } - uField := unionFields[i] - /* - * The lengths of the columns in the UNION result take into account the values retrieved by all of the SELECT statements - * SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10); - * +---------------+ - * | REPEAT('a',1) | - * +---------------+ - * | a | - * | bbbbbbbbbb | - * +---------------+ - */ - if f.Column.Flen > uField.Column.Flen { - uField.Column.Flen = f.Column.Flen - } - // For select nul union select "abc", we should not convert "abc" to nil. - // And the result field type should be VARCHAR. - if uField.Column.Tp == 0 || uField.Column.Tp == mysql.TypeNull { - uField.Column.Tp = f.Column.Tp - } - } - } - for _, v := range unionFields { - v.Expr.SetType(&v.Column.FieldType) - } - - p.SetFields(unionFields) - if union.Distinct { - p = b.buildDistinct(p) - } - if union.OrderBy != nil { - p = b.buildSort(p, union.OrderBy.Items) - } - if union.Limit != nil { - p = b.buildLimit(p, union.Limit) - } - return p -} - -func (b *planBuilder) buildDistinct(src Plan) Plan { - d := &Distinct{} - d.src = src - d.SetFields(src.Fields()) - return d -} - -func (b *planBuilder) buildUpdate(update *ast.UpdateStmt) Plan { - sel := &ast.SelectStmt{From: update.TableRefs, Where: update.Where, OrderBy: update.Order, Limit: update.Limit} - p := b.buildFrom(sel) - if sel.OrderBy != nil && !matchOrder(p, sel.OrderBy.Items) { - p = b.buildSort(p, sel.OrderBy.Items) - if b.err != nil { - return nil - } - } - if sel.Limit != nil { - p = b.buildLimit(p, sel.Limit) - if b.err != nil { - return nil - } - } - orderedList := b.buildUpdateLists(update.List, p.Fields()) - if b.err != nil { - return nil - } - return &Update{OrderedList: orderedList, SelectPlan: p} -} - -func (b *planBuilder) buildUpdateLists(list []*ast.Assignment, fields []*ast.ResultField) []*ast.Assignment { - newList := make([]*ast.Assignment, len(fields)) - for _, assign := range list { - offset, err := columnOffsetInFields(assign.Column, fields) - if err != nil { - b.err = errors.Trace(err) - return nil - } - newList[offset] = assign - } - return newList -} - -func (b *planBuilder) buildDelete(del *ast.DeleteStmt) Plan { - sel := &ast.SelectStmt{From: del.TableRefs, Where: del.Where, OrderBy: del.Order, Limit: del.Limit} - p := b.buildFrom(sel) - if sel.OrderBy != nil && !matchOrder(p, sel.OrderBy.Items) { - p = b.buildSort(p, sel.OrderBy.Items) - if b.err != nil { - return nil - } - } - if sel.Limit != nil { - p = b.buildLimit(p, sel.Limit) - if b.err != nil { - return nil - } - } - var tables []*ast.TableName - if del.Tables != nil { - tables = del.Tables.Tables - } - return &Delete{ - Tables: tables, - IsMultiTable: del.IsMultiTable, - SelectPlan: p, - } -} - -func columnOffsetInFields(cn *ast.ColumnName, fields []*ast.ResultField) (int, error) { - offset := -1 - tableNameL := cn.Table.L - columnNameL := cn.Name.L - if tableNameL != "" { - for i, f := range fields { - // Check table name. - if f.TableAsName.L != "" { - if tableNameL != f.TableAsName.L { - continue - } - } else { - if tableNameL != f.Table.Name.L { - continue - } - } - // Check column name. - if f.ColumnAsName.L != "" { - if columnNameL != f.ColumnAsName.L { - continue - } - } else { - if columnNameL != f.Column.Name.L { - continue - } - } - - offset = i - } - } else { - for i, f := range fields { - matchAsName := f.ColumnAsName.L != "" && f.ColumnAsName.L == columnNameL - matchColumnName := f.ColumnAsName.L == "" && f.Column.Name.L == columnNameL - if matchAsName || matchColumnName { - if offset != -1 { - return -1, errors.Errorf("column %s is ambiguous.", cn.Name.O) - } - offset = i - } - } - } - if offset == -1 { - return -1, errors.Errorf("column %s not found", cn.Name.O) - } - return offset, nil -} - -func (b *planBuilder) buildShow(show *ast.ShowStmt) Plan { - var p Plan - p = &Show{ - Tp: show.Tp, - DBName: show.DBName, - Table: show.Table, - Column: show.Column, - Flag: show.Flag, - Full: show.Full, - User: show.User, - } - p.SetFields(show.GetResultFields()) - var conditions []ast.ExprNode - if show.Pattern != nil { - conditions = append(conditions, show.Pattern) - } - if show.Where != nil { - conditions = append(conditions, show.Where) - } - if len(conditions) != 0 { - filter := &Filter{Conditions: conditions} - filter.SetSrc(p) - p = filter - } - return p -} - -func (b *planBuilder) buildSimple(node ast.StmtNode) Plan { - return &Simple{Statement: node} -} - -func (b *planBuilder) buildInsert(insert *ast.InsertStmt) Plan { - insertPlan := &Insert{ - Table: insert.Table, - Columns: insert.Columns, - Lists: insert.Lists, - Setlist: insert.Setlist, - OnDuplicate: insert.OnDuplicate, - IsReplace: insert.IsReplace, - Priority: insert.Priority, - } - if insert.Select != nil { - insertPlan.SelectPlan = b.build(insert.Select) - if b.err != nil { - return nil - } - } - return insertPlan -} - -func (b *planBuilder) buildDDL(node ast.DDLNode) Plan { - return &DDL{Statement: node} -} - -func (b *planBuilder) buildExplain(explain *ast.ExplainStmt) Plan { - if show, ok := explain.Stmt.(*ast.ShowStmt); ok { - return b.buildShow(show) - } - targetPlan := b.build(explain.Stmt) - if b.err != nil { - return nil - } - p := &Explain{StmtPlan: targetPlan} - p.SetFields(buildExplainFields()) - return p -} - -// See: https://dev.mysql.com/doc/refman/5.7/en/explain-output.html -func buildExplainFields() []*ast.ResultField { - rfs := make([]*ast.ResultField, 0, 10) - rfs = append(rfs, buildResultField("", "id", mysql.TypeLonglong, 4)) - rfs = append(rfs, buildResultField("", "select_type", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "table", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "type", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "possible_keys", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "key", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "key_len", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "ref", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "rows", mysql.TypeVarchar, 128)) - rfs = append(rfs, buildResultField("", "Extra", mysql.TypeVarchar, 128)) - return rfs -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/planbuilder_join.go b/vendor/github.com/pingcap/tidb/optimizer/plan/planbuilder_join.go deleted file mode 100644 index 964cb850d..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/planbuilder_join.go +++ /dev/null @@ -1,795 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "strings" - - "github.com/ngaut/log" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" -) - -// equalCond represents an equivalent join condition, like "t1.c1 = t2.c1". -type equalCond struct { - left *ast.ResultField - leftIdx bool - right *ast.ResultField - rightIdx bool -} - -func newEqualCond(left, right *ast.ResultField) *equalCond { - eq := &equalCond{left: left, right: right} - eq.leftIdx = equivHasIndex(eq.left) - eq.rightIdx = equivHasIndex(eq.right) - return eq -} - -func equivHasIndex(rf *ast.ResultField) bool { - if rf.Table.PKIsHandle && mysql.HasPriKeyFlag(rf.Column.Flag) { - return true - } - for _, idx := range rf.Table.Indices { - if len(idx.Columns) == 1 && idx.Columns[0].Name.L == rf.Column.Name.L { - return true - } - } - return false -} - -// joinPath can be a single table path, inner join or outer join. -type joinPath struct { - // for table path - table *ast.TableName - totalFilterRate float64 - - // for subquery - subquery ast.Node - asName model.CIStr - - neighborCount int // number of neighbor table. - idxDepCount int // number of paths this table depends on. - ordering *ast.ResultField - orderingDesc bool - - // for outer join path - outer *joinPath - inner *joinPath - rightJoin bool - - // for inner join path - inners []*joinPath - - // common - parent *joinPath - filterRate float64 - conditions []ast.ExprNode - eqConds []*equalCond - // The joinPaths that this path's index depends on. - idxDeps map[*joinPath]bool - neighbors map[*joinPath]bool -} - -// newTablePath creates a new table join path. -func newTablePath(table *ast.TableName) *joinPath { - return &joinPath{ - table: table, - filterRate: rateFull, - } -} - -// newSubqueryPath creates a new subquery join path. -func newSubqueryPath(node ast.Node, asName model.CIStr) *joinPath { - return &joinPath{ - subquery: node, - asName: asName, - filterRate: rateFull, - } -} - -// newOuterJoinPath creates a new outer join path and pushes on condition to children paths. -// The returned joinPath slice has one element. -func newOuterJoinPath(isRightJoin bool, leftPath, rightPath *joinPath, on *ast.OnCondition) *joinPath { - outerJoin := &joinPath{rightJoin: isRightJoin, outer: leftPath, inner: rightPath, filterRate: 1} - leftPath.parent = outerJoin - rightPath.parent = outerJoin - if isRightJoin { - outerJoin.outer, outerJoin.inner = outerJoin.inner, outerJoin.outer - } - if on != nil { - conditions := splitWhere(on.Expr) - availablePaths := []*joinPath{outerJoin.outer} - for _, con := range conditions { - if !outerJoin.inner.attachCondition(con, availablePaths) { - log.Errorf("Inner failed to attach ON condition") - } - } - } - return outerJoin -} - -// newInnerJoinPath creates inner join path and pushes on condition to children paths. -// If left path or right path is also inner join, it will be merged. -func newInnerJoinPath(leftPath, rightPath *joinPath, on *ast.OnCondition) *joinPath { - var innerJoin *joinPath - if len(leftPath.inners) != 0 { - innerJoin = leftPath - } else { - innerJoin = &joinPath{filterRate: leftPath.filterRate} - innerJoin.inners = append(innerJoin.inners, leftPath) - } - if len(rightPath.inners) != 0 { - innerJoin.inners = append(innerJoin.inners, rightPath.inners...) - innerJoin.conditions = append(innerJoin.conditions, rightPath.conditions...) - } else { - innerJoin.inners = append(innerJoin.inners, rightPath) - } - innerJoin.filterRate *= rightPath.filterRate - - for _, in := range innerJoin.inners { - in.parent = innerJoin - } - - if on != nil { - conditions := splitWhere(on.Expr) - for _, con := range conditions { - if !innerJoin.attachCondition(con, nil) { - innerJoin.conditions = append(innerJoin.conditions, con) - } - } - } - return innerJoin -} - -func (p *joinPath) resultFields() []*ast.ResultField { - if p.table != nil { - return p.table.GetResultFields() - } - if p.outer != nil { - if p.rightJoin { - return append(p.inner.resultFields(), p.outer.resultFields()...) - } - return append(p.outer.resultFields(), p.inner.resultFields()...) - } - var rfs []*ast.ResultField - for _, in := range p.inners { - rfs = append(rfs, in.resultFields()...) - } - return rfs -} - -// attachCondition tries to attach a condition as deep as possible. -// availablePaths are paths join before this path. -func (p *joinPath) attachCondition(condition ast.ExprNode, availablePaths []*joinPath) (attached bool) { - filterRate := guesstimateFilterRate(condition) - // table - if p.table != nil || p.subquery != nil { - attacher := conditionAttachChecker{targetPath: p, availablePaths: availablePaths} - condition.Accept(&attacher) - if attacher.invalid { - return false - } - p.conditions = append(p.conditions, condition) - p.filterRate *= filterRate - return true - } - // inner join - if len(p.inners) > 0 { - for _, in := range p.inners { - if in.attachCondition(condition, availablePaths) { - p.filterRate *= filterRate - return true - } - } - attacher := &conditionAttachChecker{targetPath: p, availablePaths: availablePaths} - condition.Accept(attacher) - if attacher.invalid { - return false - } - p.conditions = append(p.conditions, condition) - p.filterRate *= filterRate - return true - } - - // outer join - if p.outer.attachCondition(condition, availablePaths) { - p.filterRate *= filterRate - return true - } - if p.inner.attachCondition(condition, append(availablePaths, p.outer)) { - p.filterRate *= filterRate - return true - } - return false -} - -func (p *joinPath) containsTable(table *ast.TableName) bool { - if p.table != nil { - return p.table == table - } - if p.subquery != nil { - return p.asName.L == table.Name.L - } - if len(p.inners) != 0 { - for _, in := range p.inners { - if in.containsTable(table) { - return true - } - } - return false - } - - return p.outer.containsTable(table) || p.inner.containsTable(table) -} - -// attachEqualCond tries to attach an equalCond deep into a table path if applicable. -func (p *joinPath) attachEqualCond(eqCon *equalCond, availablePaths []*joinPath) (attached bool) { - // table - if p.table != nil { - var prevTable *ast.TableName - var needSwap bool - if eqCon.left.TableName == p.table { - prevTable = eqCon.right.TableName - } else if eqCon.right.TableName == p.table { - prevTable = eqCon.left.TableName - needSwap = true - } - if prevTable != nil { - for _, prev := range availablePaths { - if prev.containsTable(prevTable) { - if needSwap { - eqCon.left, eqCon.right = eqCon.right, eqCon.left - eqCon.leftIdx, eqCon.rightIdx = eqCon.rightIdx, eqCon.leftIdx - } - p.eqConds = append(p.eqConds, eqCon) - return true - } - } - } - return false - } - - // inner join - if len(p.inners) > 0 { - for _, in := range p.inners { - if in.attachEqualCond(eqCon, availablePaths) { - p.filterRate *= rateEqual - return true - } - } - return false - } - // outer join - if p.outer.attachEqualCond(eqCon, availablePaths) { - p.filterRate *= rateEqual - return true - } - if p.inner.attachEqualCond(eqCon, append(availablePaths, p.outer)) { - p.filterRate *= rateEqual - return true - } - return false -} - -func (p *joinPath) extractEqualConditon() { - var equivs []*equalCond - var cons []ast.ExprNode - for _, con := range p.conditions { - eq := equivFromExpr(con) - if eq != nil { - equivs = append(equivs, eq) - if p.table != nil { - if eq.right.TableName == p.table { - eq.left, eq.right = eq.right, eq.left - eq.leftIdx, eq.rightIdx = eq.rightIdx, eq.leftIdx - } - } - } else { - cons = append(cons, con) - } - } - p.eqConds = equivs - p.conditions = cons - for _, in := range p.inners { - in.extractEqualConditon() - } - if p.outer != nil { - p.outer.extractEqualConditon() - p.inner.extractEqualConditon() - } -} - -func (p *joinPath) addIndexDependency() { - if p.outer != nil { - p.outer.addIndexDependency() - p.inner.addIndexDependency() - return - } - if p.table != nil { - return - } - for _, eq := range p.eqConds { - if !eq.leftIdx && !eq.rightIdx { - continue - } - pathLeft := p.findInnerContains(eq.left.TableName) - if pathLeft == nil { - continue - } - pathRight := p.findInnerContains(eq.right.TableName) - if pathRight == nil { - continue - } - if eq.leftIdx && eq.rightIdx { - pathLeft.addNeighbor(pathRight) - pathRight.addNeighbor(pathLeft) - } else if eq.leftIdx { - if !pathLeft.hasOuterIdxEqualCond() { - pathLeft.addIndexDep(pathRight) - } - } else if eq.rightIdx { - if !pathRight.hasOuterIdxEqualCond() { - pathRight.addIndexDep(pathLeft) - } - } - } - for _, in := range p.inners { - in.removeIndexDepCycle(in) - in.addIndexDependency() - } -} - -func (p *joinPath) hasOuterIdxEqualCond() bool { - if p.table != nil { - for _, eq := range p.eqConds { - if eq.leftIdx { - return true - } - } - return false - } - if p.outer != nil { - return p.outer.hasOuterIdxEqualCond() - } - for _, in := range p.inners { - if in.hasOuterIdxEqualCond() { - return true - } - } - return false -} - -func (p *joinPath) findInnerContains(table *ast.TableName) *joinPath { - for _, in := range p.inners { - if in.containsTable(table) { - return in - } - } - return nil -} - -func (p *joinPath) addNeighbor(neighbor *joinPath) { - if p.neighbors == nil { - p.neighbors = map[*joinPath]bool{} - } - p.neighbors[neighbor] = true - p.neighborCount++ -} - -func (p *joinPath) addIndexDep(dep *joinPath) { - if p.idxDeps == nil { - p.idxDeps = map[*joinPath]bool{} - } - p.idxDeps[dep] = true - p.idxDepCount++ -} - -func (p *joinPath) removeIndexDepCycle(origin *joinPath) { - if p.idxDeps == nil { - return - } - for dep := range p.idxDeps { - if dep == origin { - delete(p.idxDeps, origin) - continue - } - dep.removeIndexDepCycle(origin) - } -} - -func (p *joinPath) score() float64 { - return 1 / p.filterRate -} - -func (p *joinPath) String() string { - if p.table != nil { - return p.table.TableInfo.Name.L - } - if p.outer != nil { - return "outer{" + p.outer.String() + "," + p.inner.String() + "}" - } - var innerStrs []string - for _, in := range p.inners { - innerStrs = append(innerStrs, in.String()) - } - return "inner{" + strings.Join(innerStrs, ",") + "}" -} - -func (p *joinPath) optimizeJoinOrder(availablePaths []*joinPath) { - if p.table != nil { - return - } - if p.outer != nil { - p.outer.optimizeJoinOrder(availablePaths) - p.inner.optimizeJoinOrder(append(availablePaths, p.outer)) - return - } - var ordered []*joinPath - pathMap := map[*joinPath]bool{} - for _, in := range p.inners { - pathMap[in] = true - } - for len(pathMap) > 0 { - next := p.nextPath(pathMap, availablePaths) - next.optimizeJoinOrder(availablePaths) - ordered = append(ordered, next) - delete(pathMap, next) - availablePaths = append(availablePaths, next) - for path := range pathMap { - if path.idxDeps != nil { - delete(path.idxDeps, next) - } - if path.neighbors != nil { - delete(path.neighbors, next) - } - } - p.reattach(pathMap, availablePaths) - } - p.inners = ordered -} - -// reattach is called by inner joinPath to retry attach conditions to inner paths -// after an inner path has been added to available paths. -func (p *joinPath) reattach(pathMap map[*joinPath]bool, availablePaths []*joinPath) { - if len(p.conditions) != 0 { - remainedConds := make([]ast.ExprNode, 0, len(p.conditions)) - for _, con := range p.conditions { - var attached bool - for path := range pathMap { - if path.attachCondition(con, availablePaths) { - attached = true - break - } - } - if !attached { - remainedConds = append(remainedConds, con) - } - } - p.conditions = remainedConds - } - if len(p.eqConds) != 0 { - remainedEqConds := make([]*equalCond, 0, len(p.eqConds)) - for _, eq := range p.eqConds { - var attached bool - for path := range pathMap { - if path.attachEqualCond(eq, availablePaths) { - attached = true - break - } - } - if !attached { - remainedEqConds = append(remainedEqConds, eq) - } - } - p.eqConds = remainedEqConds - } -} - -func (p *joinPath) nextPath(pathMap map[*joinPath]bool, availablePaths []*joinPath) *joinPath { - cans := p.candidates(pathMap) - if len(cans) == 0 { - var v *joinPath - for v = range pathMap { - log.Errorf("index dep %v, prevs %v\n", v.idxDeps, len(availablePaths)) - } - return v - } - indexPath := p.nextIndexPath(cans) - if indexPath != nil { - return indexPath - } - return p.pickPath(cans) -} - -func (p *joinPath) candidates(pathMap map[*joinPath]bool) []*joinPath { - var cans []*joinPath - for t := range pathMap { - if len(t.idxDeps) > 0 { - continue - } - cans = append(cans, t) - } - return cans -} - -func (p *joinPath) nextIndexPath(candidates []*joinPath) *joinPath { - var best *joinPath - for _, can := range candidates { - // Since we may not have equal conditions attached on the path, we - // need to check neighborCount and idxDepCount to see if this path - // can be joined with index. - neighborIsAvailable := len(can.neighbors) < can.neighborCount - idxDepIsAvailable := can.idxDepCount > 0 - if can.hasOuterIdxEqualCond() || neighborIsAvailable || idxDepIsAvailable { - if best == nil { - best = can - } - if can.score() > best.score() { - best = can - } - } - } - return best -} - -func (p *joinPath) pickPath(candidates []*joinPath) *joinPath { - var best *joinPath - for _, path := range candidates { - if best == nil { - best = path - } - if path.score() > best.score() { - best = path - } - } - return best -} - -// conditionAttachChecker checks if an expression is valid to -// attach to a path. attach is valid only if all the referenced tables in the -// expression are available. -type conditionAttachChecker struct { - targetPath *joinPath - availablePaths []*joinPath - invalid bool -} - -func (c *conditionAttachChecker) Enter(in ast.Node) (ast.Node, bool) { - switch x := in.(type) { - case *ast.ColumnNameExpr: - table := x.Refer.TableName - if c.targetPath.containsTable(table) { - return in, false - } - c.invalid = true - for _, path := range c.availablePaths { - if path.containsTable(table) { - c.invalid = false - return in, false - } - } - } - return in, false -} - -func (c *conditionAttachChecker) Leave(in ast.Node) (ast.Node, bool) { - return in, !c.invalid -} - -func (b *planBuilder) buildJoin(sel *ast.SelectStmt) Plan { - nrfinder := &nullRejectFinder{nullRejectTables: map[*ast.TableName]bool{}} - if sel.Where != nil { - sel.Where.Accept(nrfinder) - } - path := b.buildBasicJoinPath(sel.From.TableRefs, nrfinder.nullRejectTables) - rfs := path.resultFields() - - whereConditions := splitWhere(sel.Where) - for _, whereCond := range whereConditions { - if !path.attachCondition(whereCond, nil) { - // TODO: Find a better way to handle this condition. - path.conditions = append(path.conditions, whereCond) - log.Errorf("Failed to attach where condtion.") - } - } - path.extractEqualConditon() - path.addIndexDependency() - path.optimizeJoinOrder(nil) - p := b.buildPlanFromJoinPath(path) - p.SetFields(rfs) - return p -} - -type nullRejectFinder struct { - nullRejectTables map[*ast.TableName]bool -} - -func (n *nullRejectFinder) Enter(in ast.Node) (ast.Node, bool) { - switch x := in.(type) { - case *ast.BinaryOperationExpr: - if x.Op == opcode.NullEQ || x.Op == opcode.OrOr { - return in, true - } - case *ast.IsNullExpr: - if !x.Not { - return in, true - } - case *ast.IsTruthExpr: - if x.Not { - return in, true - } - } - return in, false -} - -func (n *nullRejectFinder) Leave(in ast.Node) (ast.Node, bool) { - switch x := in.(type) { - case *ast.ColumnNameExpr: - n.nullRejectTables[x.Refer.TableName] = true - } - return in, true -} - -func (b *planBuilder) buildBasicJoinPath(node ast.ResultSetNode, nullRejectTables map[*ast.TableName]bool) *joinPath { - switch x := node.(type) { - case nil: - return nil - case *ast.Join: - leftPath := b.buildBasicJoinPath(x.Left, nullRejectTables) - if x.Right == nil { - return leftPath - } - righPath := b.buildBasicJoinPath(x.Right, nullRejectTables) - isOuter := b.isOuterJoin(x.Tp, leftPath, righPath, nullRejectTables) - if isOuter { - return newOuterJoinPath(x.Tp == ast.RightJoin, leftPath, righPath, x.On) - } - return newInnerJoinPath(leftPath, righPath, x.On) - case *ast.TableSource: - switch v := x.Source.(type) { - case *ast.TableName: - return newTablePath(v) - case *ast.SelectStmt, *ast.UnionStmt: - return newSubqueryPath(v, x.AsName) - default: - b.err = ErrUnsupportedType.Gen("unsupported table source type %T", x) - return nil - } - default: - b.err = ErrUnsupportedType.Gen("unsupported table source type %T", x) - return nil - } -} - -func (b *planBuilder) isOuterJoin(tp ast.JoinType, leftPaths, rightPaths *joinPath, - nullRejectTables map[*ast.TableName]bool) bool { - var innerPath *joinPath - switch tp { - case ast.LeftJoin: - innerPath = rightPaths - case ast.RightJoin: - innerPath = leftPaths - default: - return false - } - for table := range nullRejectTables { - if innerPath.containsTable(table) { - return false - } - } - return true -} - -func equivFromExpr(expr ast.ExprNode) *equalCond { - binop, ok := expr.(*ast.BinaryOperationExpr) - if !ok || binop.Op != opcode.EQ { - return nil - } - ln, lOK := binop.L.(*ast.ColumnNameExpr) - rn, rOK := binop.R.(*ast.ColumnNameExpr) - if !lOK || !rOK { - return nil - } - if ln.Name.Table.L == "" || rn.Name.Table.L == "" { - return nil - } - if ln.Name.Schema.L == rn.Name.Schema.L && ln.Name.Table.L == rn.Name.Table.L { - return nil - } - return newEqualCond(ln.Refer, rn.Refer) -} - -func (b *planBuilder) buildPlanFromJoinPath(path *joinPath) Plan { - if path.table != nil { - return b.buildTablePlanFromJoinPath(path) - } - if path.subquery != nil { - return b.buildSubqueryJoinPath(path) - } - if path.outer != nil { - join := &JoinOuter{ - Outer: b.buildPlanFromJoinPath(path.outer), - Inner: b.buildPlanFromJoinPath(path.inner), - } - if path.rightJoin { - join.SetFields(append(join.Inner.Fields(), join.Outer.Fields()...)) - } else { - join.SetFields(append(join.Outer.Fields(), join.Inner.Fields()...)) - } - return join - } - join := &JoinInner{} - for _, in := range path.inners { - join.Inners = append(join.Inners, b.buildPlanFromJoinPath(in)) - join.fields = append(join.fields, in.resultFields()...) - } - join.Conditions = path.conditions - for _, equiv := range path.eqConds { - cond := &ast.BinaryOperationExpr{L: equiv.left.Expr, R: equiv.right.Expr, Op: opcode.EQ} - join.Conditions = append(join.Conditions, cond) - } - return join -} - -func (b *planBuilder) buildTablePlanFromJoinPath(path *joinPath) Plan { - for _, equiv := range path.eqConds { - columnNameExpr := &ast.ColumnNameExpr{} - columnNameExpr.Name = &ast.ColumnName{} - columnNameExpr.Name.Name = equiv.left.Column.Name - columnNameExpr.Name.Table = equiv.left.Table.Name - columnNameExpr.Refer = equiv.left - condition := &ast.BinaryOperationExpr{L: columnNameExpr, R: equiv.right.Expr, Op: opcode.EQ} - ast.SetFlag(condition) - path.conditions = append(path.conditions, condition) - } - candidates := b.buildAllAccessMethodsPlan(path) - var p Plan - var lowestCost float64 - for _, can := range candidates { - cost := EstimateCost(can) - if p == nil { - p = can - lowestCost = cost - } - if cost < lowestCost { - p = can - lowestCost = cost - } - } - return p -} - -// Build subquery join path plan -func (b *planBuilder) buildSubqueryJoinPath(path *joinPath) Plan { - for _, equiv := range path.eqConds { - columnNameExpr := &ast.ColumnNameExpr{} - columnNameExpr.Name = &ast.ColumnName{} - columnNameExpr.Name.Name = equiv.left.Column.Name - columnNameExpr.Name.Table = equiv.left.Table.Name - columnNameExpr.Refer = equiv.left - condition := &ast.BinaryOperationExpr{L: columnNameExpr, R: equiv.right.Expr, Op: opcode.EQ} - ast.SetFlag(condition) - path.conditions = append(path.conditions, condition) - } - p := b.build(path.subquery) - if len(path.conditions) == 0 { - return p - } - filterPlan := &Filter{Conditions: path.conditions} - filterPlan.SetSrc(p) - filterPlan.SetFields(p.Fields()) - return filterPlan -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/plans.go b/vendor/github.com/pingcap/tidb/optimizer/plan/plans.go deleted file mode 100644 index 7a1a7e5d4..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/plans.go +++ /dev/null @@ -1,677 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "fmt" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/util/types" -) - -// TableRange represents a range of row handle. -type TableRange struct { - LowVal int64 - HighVal int64 -} - -// TableScan represents a table scan plan. -type TableScan struct { - basePlan - - Table *model.TableInfo - Desc bool - Ranges []TableRange - - // RefAccess indicates it references a previous joined table, used in explain. - RefAccess bool - - // AccessConditions can be used to build index range. - AccessConditions []ast.ExprNode - - // FilterConditions can be used to filter result. - FilterConditions []ast.ExprNode -} - -// Accept implements Plan Accept interface. -func (p *TableScan) Accept(v Visitor) (Plan, bool) { - np, _ := v.Enter(p) - return v.Leave(np) -} - -// ShowDDL is for showing DDL information. -type ShowDDL struct { - basePlan -} - -// Accept implements Plan Accept interface. -func (p *ShowDDL) Accept(v Visitor) (Plan, bool) { - np, _ := v.Enter(p) - return v.Leave(np) -} - -// CheckTable is for checking table data. -type CheckTable struct { - basePlan - - Tables []*ast.TableName -} - -// Accept implements Plan Accept interface. -func (p *CheckTable) Accept(v Visitor) (Plan, bool) { - np, _ := v.Enter(p) - return v.Leave(np) - -} - -// IndexRange represents an index range to be scanned. -type IndexRange struct { - LowVal []types.Datum - LowExclude bool - HighVal []types.Datum - HighExclude bool -} - -// IsPoint returns if the index range is a point. -func (ir *IndexRange) IsPoint() bool { - if len(ir.LowVal) != len(ir.HighVal) { - return false - } - for i := range ir.LowVal { - a := ir.LowVal[i] - b := ir.HighVal[i] - if a.Kind() == types.KindMinNotNull || b.Kind() == types.KindMaxValue { - return false - } - cmp, err := a.CompareDatum(b) - if err != nil { - return false - } - if cmp != 0 { - return false - } - } - return !ir.LowExclude && !ir.HighExclude -} - -// IndexScan represents an index scan plan. -type IndexScan struct { - basePlan - - // The index used. - Index *model.IndexInfo - - // The table to lookup. - Table *model.TableInfo - - // Ordered and non-overlapping ranges to be scanned. - Ranges []*IndexRange - - // Desc indicates whether the index should be scanned in descending order. - Desc bool - - // RefAccess indicates it references a previous joined table, used in explain. - RefAccess bool - - // AccessConditions can be used to build index range. - AccessConditions []ast.ExprNode - - // Number of leading equal access condition. - // The offset of each equal condition correspond to the offset of index column. - // For example, an index has column (a, b, c), condition is 'a = 0 and b = 0 and c > 0' - // AccessEqualCount would be 2. - AccessEqualCount int - - // FilterConditions can be used to filter result. - FilterConditions []ast.ExprNode -} - -// Accept implements Plan Accept interface. -func (p *IndexScan) Accept(v Visitor) (Plan, bool) { - np, _ := v.Enter(p) - return v.Leave(np) -} - -// JoinOuter represents outer join plan. -type JoinOuter struct { - basePlan - - Outer Plan - Inner Plan -} - -// Accept implements Plan interface. -func (p *JoinOuter) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*JoinOuter) - var ok bool - p.Outer, ok = p.Outer.Accept(v) - if !ok { - return p, false - } - p.Inner, ok = p.Inner.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// JoinInner represents inner join plan. -type JoinInner struct { - basePlan - - Inners []Plan - Conditions []ast.ExprNode -} - -func (p *JoinInner) String() string { - return fmt.Sprintf("JoinInner()") -} - -// Accept implements Plan interface. -func (p *JoinInner) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*JoinInner) - for i, in := range p.Inners { - x, ok := in.Accept(v) - if !ok { - return p, false - } - p.Inners[i] = x - } - return v.Leave(p) -} - -// SelectLock represents a select lock plan. -type SelectLock struct { - planWithSrc - - Lock ast.SelectLockType -} - -// Accept implements Plan Accept interface. -func (p *SelectLock) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*SelectLock) - var ok bool - p.src, ok = p.src.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// SetLimit implements Plan SetLimit interface. -func (p *SelectLock) SetLimit(limit float64) { - p.limit = limit - p.src.SetLimit(p.limit) -} - -// SelectFields represents a select fields plan. -type SelectFields struct { - planWithSrc -} - -// Accept implements Plan Accept interface. -func (p *SelectFields) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*SelectFields) - if p.src != nil { - var ok bool - p.src, ok = p.src.Accept(v) - if !ok { - return p, false - } - } - return v.Leave(p) -} - -// SetLimit implements Plan SetLimit interface. -func (p *SelectFields) SetLimit(limit float64) { - p.limit = limit - if p.src != nil { - p.src.SetLimit(limit) - } -} - -// Sort represents a sorting plan. -type Sort struct { - planWithSrc - - ByItems []*ast.ByItem -} - -// Accept implements Plan Accept interface. -func (p *Sort) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Sort) - var ok bool - p.src, ok = p.src.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// SetLimit implements Plan SetLimit interface. -// It set the Src limit only if it is bypassed. -// Bypass has to be determined before this get called. -func (p *Sort) SetLimit(limit float64) { - p.limit = limit -} - -// Limit represents offset and limit plan. -type Limit struct { - planWithSrc - - Offset uint64 - Count uint64 -} - -// Accept implements Plan Accept interface. -func (p *Limit) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Limit) - var ok bool - p.src, ok = p.src.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// SetLimit implements Plan SetLimit interface. -// As Limit itself determine the real limit, -// We just ignore the input, and set the real limit. -func (p *Limit) SetLimit(limit float64) { - p.limit = float64(p.Offset + p.Count) - p.src.SetLimit(p.limit) -} - -// Union represents Union plan. -type Union struct { - basePlan - - Selects []Plan -} - -// Accept implements Plan Accept interface. -func (p *Union) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(p) - } - p = np.(*Union) - for i, sel := range p.Selects { - var ok bool - p.Selects[i], ok = sel.Accept(v) - if !ok { - return p, false - } - } - return v.Leave(p) -} - -// Distinct represents Distinct plan. -type Distinct struct { - planWithSrc -} - -// Accept implements Plan Accept interface. -func (p *Distinct) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(p) - } - p = np.(*Distinct) - var ok bool - p.src, ok = p.src.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// SetLimit implements Plan SetLimit interface. -func (p *Distinct) SetLimit(limit float64) { - p.limit = limit - if p.src != nil { - p.src.SetLimit(limit) - } -} - -// Prepare represents prepare plan. -type Prepare struct { - basePlan - - Name string - SQLText string -} - -// Accept implements Plan Accept interface. -func (p *Prepare) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Prepare) - return v.Leave(p) -} - -// Execute represents prepare plan. -type Execute struct { - basePlan - - Name string - UsingVars []ast.ExprNode - ID uint32 -} - -// Accept implements Plan Accept interface. -func (p *Execute) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Execute) - return v.Leave(p) -} - -// Deallocate represents deallocate plan. -type Deallocate struct { - basePlan - - Name string -} - -// Accept implements Plan Accept interface. -func (p *Deallocate) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Deallocate) - return v.Leave(p) -} - -// Aggregate represents a select fields plan. -type Aggregate struct { - planWithSrc - AggFuncs []*ast.AggregateFuncExpr - GroupByItems []*ast.ByItem -} - -// Accept implements Plan Accept interface. -func (p *Aggregate) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Aggregate) - if p.src != nil { - var ok bool - p.src, ok = p.src.Accept(v) - if !ok { - return p, false - } - } - return v.Leave(p) -} - -// SetLimit implements Plan SetLimit interface. -func (p *Aggregate) SetLimit(limit float64) { - p.limit = limit - if p.src != nil { - p.src.SetLimit(limit) - } -} - -// Having represents a having plan. -// The having plan should after aggregate plan. -type Having struct { - planWithSrc - - // Originally the WHERE or ON condition is parsed into a single expression, - // but after we converted to CNF(Conjunctive normal form), it can be - // split into a list of AND conditions. - Conditions []ast.ExprNode -} - -// Accept implements Plan Accept interface. -func (p *Having) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Having) - var ok bool - p.src, ok = p.src.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// SetLimit implements Plan SetLimit interface. -func (p *Having) SetLimit(limit float64) { - p.limit = limit - // We assume 50% of the src row is filtered out. - p.src.SetLimit(limit * 2) -} - -// Update represents an update plan. -type Update struct { - basePlan - - OrderedList []*ast.Assignment // OrderedList has the same offset as TablePlan's result fields. - SelectPlan Plan -} - -// Accept implements Plan Accept interface. -func (p *Update) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Update) - var ok bool - p.SelectPlan, ok = p.SelectPlan.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// Delete represents a delete plan. -type Delete struct { - basePlan - - SelectPlan Plan - Tables []*ast.TableName - IsMultiTable bool -} - -// Accept implements Plan Accept interface. -func (p *Delete) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Delete) - var ok bool - p.SelectPlan, ok = p.SelectPlan.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// Filter represents a plan that filter srcplan result. -type Filter struct { - planWithSrc - - // Originally the WHERE or ON condition is parsed into a single expression, - // but after we converted to CNF(Conjunctive normal form), it can be - // split into a list of AND conditions. - Conditions []ast.ExprNode -} - -// Accept implements Plan Accept interface. -func (p *Filter) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Filter) - var ok bool - p.src, ok = p.src.Accept(v) - if !ok { - return p, false - } - return v.Leave(p) -} - -// SetLimit implements Plan SetLimit interface. -func (p *Filter) SetLimit(limit float64) { - p.limit = limit - // We assume 50% of the src row is filtered out. - p.src.SetLimit(limit * 2) -} - -// Show represents a show plan. -type Show struct { - basePlan - - Tp ast.ShowStmtType // Databases/Tables/Columns/.... - DBName string - Table *ast.TableName // Used for showing columns. - Column *ast.ColumnName // Used for `desc table column`. - Flag int // Some flag parsed from sql, such as FULL. - Full bool - User string // Used for show grants. - - // Used by show variables - GlobalScope bool -} - -// Accept implements Plan Accept interface. -func (p *Show) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Show) - return v.Leave(p) -} - -// Simple represents a simple statement plan which doesn't need any optimization. -type Simple struct { - basePlan - - Statement ast.StmtNode -} - -// Accept implements Plan Accept interface. -func (p *Simple) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Simple) - return v.Leave(p) -} - -// Insert represents an insert plan. -type Insert struct { - basePlan - - Table *ast.TableRefsClause - Columns []*ast.ColumnName - Lists [][]ast.ExprNode - Setlist []*ast.Assignment - OnDuplicate []*ast.Assignment - SelectPlan Plan - - IsReplace bool - Priority int -} - -// Accept implements Plan Accept interface. -func (p *Insert) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*Insert) - if p.SelectPlan != nil { - var ok bool - p.SelectPlan, ok = p.SelectPlan.Accept(v) - if !ok { - return p, false - } - } - return v.Leave(p) -} - -// DDL represents a DDL statement plan. -type DDL struct { - basePlan - - Statement ast.DDLNode -} - -// Accept implements Plan Accept interface. -func (p *DDL) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - return v.Leave(np) - } - p = np.(*DDL) - return v.Leave(p) -} - -// Explain represents a explain plan. -type Explain struct { - basePlan - - StmtPlan Plan -} - -// Accept implements Plan Accept interface. -func (p *Explain) Accept(v Visitor) (Plan, bool) { - np, skip := v.Enter(p) - if skip { - v.Leave(np) - } - p = np.(*Explain) - return v.Leave(p) -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/range.go b/vendor/github.com/pingcap/tidb/optimizer/plan/range.go deleted file mode 100644 index 5278b6566..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/range.go +++ /dev/null @@ -1,505 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "fmt" - "math" - "sort" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/util/types" -) - -type rangePoint struct { - value types.Datum - excl bool // exclude - start bool -} - -func (rp rangePoint) String() string { - val := rp.value.GetValue() - if rp.value.Kind() == types.KindMinNotNull { - val = "-inf" - } else if rp.value.Kind() == types.KindMaxValue { - val = "+inf" - } - if rp.start { - symbol := "[" - if rp.excl { - symbol = "(" - } - return fmt.Sprintf("%s%v", symbol, val) - } - symbol := "]" - if rp.excl { - symbol = ")" - } - return fmt.Sprintf("%v%s", val, symbol) -} - -type rangePointSorter struct { - points []rangePoint - err error -} - -func (r *rangePointSorter) Len() int { - return len(r.points) -} - -func (r *rangePointSorter) Less(i, j int) bool { - a := r.points[i] - b := r.points[j] - cmp, err := a.value.CompareDatum(b.value) - if err != nil { - r.err = err - return true - } - if cmp == 0 { - return r.equalValueLess(a, b) - } - return cmp < 0 -} - -func (r *rangePointSorter) equalValueLess(a, b rangePoint) bool { - if a.start && b.start { - return !a.excl && b.excl - } else if a.start { - return !b.excl - } else if b.start { - return a.excl || b.excl - } - return a.excl && !b.excl -} - -func (r *rangePointSorter) Swap(i, j int) { - r.points[i], r.points[j] = r.points[j], r.points[i] -} - -type rangeBuilder struct { - err error -} - -func (r *rangeBuilder) build(expr ast.ExprNode) []rangePoint { - switch x := expr.(type) { - case *ast.BinaryOperationExpr: - return r.buildFromBinop(x) - case *ast.PatternInExpr: - return r.buildFromIn(x) - case *ast.ParenthesesExpr: - return r.build(x.Expr) - case *ast.BetweenExpr: - return r.buildFromBetween(x) - case *ast.IsNullExpr: - return r.buildFromIsNull(x) - case *ast.IsTruthExpr: - return r.buildFromIsTruth(x) - case *ast.PatternLikeExpr: - rans := r.buildFromPatternLike(x) - return rans - case *ast.ColumnNameExpr: - return r.buildFromColumnName(x) - } - return fullRange -} - -func (r *rangeBuilder) buildFromBinop(x *ast.BinaryOperationExpr) []rangePoint { - if x.Op == opcode.OrOr { - return r.union(r.build(x.L), r.build(x.R)) - } else if x.Op == opcode.AndAnd { - return r.intersection(r.build(x.L), r.build(x.R)) - } - // This has been checked that the binary operation is comparison operation, and one of - // the operand is column name expression. - var value types.Datum - var op opcode.Op - if _, ok := x.L.(*ast.ValueExpr); ok { - value = types.NewDatum(x.L.GetValue()) - switch x.Op { - case opcode.GE: - op = opcode.LE - case opcode.GT: - op = opcode.LT - case opcode.LT: - op = opcode.GT - case opcode.LE: - op = opcode.GE - default: - op = x.Op - } - } else { - value = types.NewDatum(x.R.GetValue()) - op = x.Op - } - if value.Kind() == types.KindNull { - return nil - } - switch op { - case opcode.EQ: - startPoint := rangePoint{value: value, start: true} - endPoint := rangePoint{value: value} - return []rangePoint{startPoint, endPoint} - case opcode.NE: - startPoint1 := rangePoint{value: types.MinNotNullDatum(), start: true} - endPoint1 := rangePoint{value: value, excl: true} - startPoint2 := rangePoint{value: value, start: true, excl: true} - endPoint2 := rangePoint{value: types.MaxValueDatum()} - return []rangePoint{startPoint1, endPoint1, startPoint2, endPoint2} - case opcode.LT: - startPoint := rangePoint{value: types.MinNotNullDatum(), start: true} - endPoint := rangePoint{value: value, excl: true} - return []rangePoint{startPoint, endPoint} - case opcode.LE: - startPoint := rangePoint{value: types.MinNotNullDatum(), start: true} - endPoint := rangePoint{value: value} - return []rangePoint{startPoint, endPoint} - case opcode.GT: - startPoint := rangePoint{value: value, start: true, excl: true} - endPoint := rangePoint{value: types.MaxValueDatum()} - return []rangePoint{startPoint, endPoint} - case opcode.GE: - startPoint := rangePoint{value: value, start: true} - endPoint := rangePoint{value: types.MaxValueDatum()} - return []rangePoint{startPoint, endPoint} - } - return nil -} - -func (r *rangeBuilder) buildFromIn(x *ast.PatternInExpr) []rangePoint { - if x.Not { - r.err = ErrUnsupportedType.Gen("NOT IN is not supported") - return fullRange - } - var rangePoints []rangePoint - for _, v := range x.List { - startPoint := rangePoint{value: types.NewDatum(v.GetValue()), start: true} - endPoint := rangePoint{value: types.NewDatum(v.GetValue())} - rangePoints = append(rangePoints, startPoint, endPoint) - } - sorter := rangePointSorter{points: rangePoints} - sort.Sort(&sorter) - if sorter.err != nil { - r.err = sorter.err - } - // check duplicates - hasDuplicate := false - isStart := false - for _, v := range rangePoints { - if isStart == v.start { - hasDuplicate = true - break - } - isStart = v.start - } - if !hasDuplicate { - return rangePoints - } - // remove duplicates - distinctRangePoints := make([]rangePoint, 0, len(rangePoints)) - isStart = false - for i := 0; i < len(rangePoints); i++ { - current := rangePoints[i] - if isStart == current.start { - continue - } - distinctRangePoints = append(distinctRangePoints, current) - isStart = current.start - } - return distinctRangePoints -} - -func (r *rangeBuilder) buildFromBetween(x *ast.BetweenExpr) []rangePoint { - if x.Not { - binop1 := &ast.BinaryOperationExpr{Op: opcode.LT, L: x.Expr, R: x.Left} - binop2 := &ast.BinaryOperationExpr{Op: opcode.GT, L: x.Expr, R: x.Right} - range1 := r.buildFromBinop(binop1) - range2 := r.buildFromBinop(binop2) - return r.union(range1, range2) - } - binop1 := &ast.BinaryOperationExpr{Op: opcode.GE, L: x.Expr, R: x.Left} - binop2 := &ast.BinaryOperationExpr{Op: opcode.LE, L: x.Expr, R: x.Right} - range1 := r.buildFromBinop(binop1) - range2 := r.buildFromBinop(binop2) - return r.intersection(range1, range2) -} - -func (r *rangeBuilder) buildFromIsNull(x *ast.IsNullExpr) []rangePoint { - if x.Not { - startPoint := rangePoint{value: types.MinNotNullDatum(), start: true} - endPoint := rangePoint{value: types.MaxValueDatum()} - return []rangePoint{startPoint, endPoint} - } - startPoint := rangePoint{start: true} - endPoint := rangePoint{} - return []rangePoint{startPoint, endPoint} -} - -func (r *rangeBuilder) buildFromIsTruth(x *ast.IsTruthExpr) []rangePoint { - if x.True != 0 { - if x.Not { - // NOT TRUE range is {[null null] [0, 0]} - startPoint1 := rangePoint{start: true} - endPoint1 := rangePoint{} - startPoint2 := rangePoint{start: true} - startPoint2.value.SetInt64(0) - endPoint2 := rangePoint{} - endPoint2.value.SetInt64(0) - return []rangePoint{startPoint1, endPoint1, startPoint2, endPoint2} - } - // TRUE range is {[-inf 0) (0 +inf]} - startPoint1 := rangePoint{value: types.MinNotNullDatum(), start: true} - endPoint1 := rangePoint{excl: true} - endPoint1.value.SetInt64(0) - startPoint2 := rangePoint{excl: true, start: true} - startPoint2.value.SetInt64(0) - endPoint2 := rangePoint{value: types.MaxValueDatum()} - return []rangePoint{startPoint1, endPoint1, startPoint2, endPoint2} - } - if x.Not { - startPoint1 := rangePoint{start: true} - endPoint1 := rangePoint{excl: true} - endPoint1.value.SetInt64(0) - startPoint2 := rangePoint{start: true, excl: true} - startPoint2.value.SetInt64(0) - endPoint2 := rangePoint{value: types.MaxValueDatum()} - return []rangePoint{startPoint1, endPoint1, startPoint2, endPoint2} - } - startPoint := rangePoint{start: true} - startPoint.value.SetInt64(0) - endPoint := rangePoint{} - endPoint.value.SetInt64(0) - return []rangePoint{startPoint, endPoint} -} - -func (r *rangeBuilder) buildFromPatternLike(x *ast.PatternLikeExpr) []rangePoint { - if x.Not { - // Pattern not like is not supported. - r.err = ErrUnsupportedType.Gen("NOT LIKE is not supported.") - return fullRange - } - pattern, err := types.ToString(x.Pattern.GetValue()) - if err != nil { - r.err = errors.Trace(err) - return fullRange - } - lowValue := make([]byte, 0, len(pattern)) - // unscape the pattern - var exclude bool - for i := 0; i < len(pattern); i++ { - if pattern[i] == x.Escape { - i++ - if i < len(pattern) { - lowValue = append(lowValue, pattern[i]) - } else { - lowValue = append(lowValue, x.Escape) - } - continue - } - if pattern[i] == '%' { - break - } else if pattern[i] == '_' { - exclude = true - break - } - lowValue = append(lowValue, pattern[i]) - } - if len(lowValue) == 0 { - return []rangePoint{{value: types.MinNotNullDatum(), start: true}, {value: types.MaxValueDatum()}} - } - startPoint := rangePoint{start: true, excl: exclude} - startPoint.value.SetBytesAsString(lowValue) - highValue := make([]byte, len(lowValue)) - copy(highValue, lowValue) - endPoint := rangePoint{excl: true} - for i := len(highValue) - 1; i >= 0; i-- { - highValue[i]++ - if highValue[i] != 0 { - endPoint.value.SetBytesAsString(highValue) - break - } - if i == 0 { - endPoint.value = types.MaxValueDatum() - break - } - } - ranges := make([]rangePoint, 2) - ranges[0] = startPoint - ranges[1] = endPoint - return ranges -} - -func (r *rangeBuilder) buildFromColumnName(x *ast.ColumnNameExpr) []rangePoint { - // column name expression is equivalent to column name is true. - startPoint1 := rangePoint{value: types.MinNotNullDatum(), start: true} - endPoint1 := rangePoint{excl: true} - endPoint1.value.SetInt64(0) - startPoint2 := rangePoint{excl: true, start: true} - startPoint2.value.SetInt64(0) - endPoint2 := rangePoint{value: types.MaxValueDatum()} - return []rangePoint{startPoint1, endPoint1, startPoint2, endPoint2} -} - -func (r *rangeBuilder) intersection(a, b []rangePoint) []rangePoint { - return r.merge(a, b, false) -} - -func (r *rangeBuilder) union(a, b []rangePoint) []rangePoint { - return r.merge(a, b, true) -} - -func (r *rangeBuilder) merge(a, b []rangePoint, union bool) []rangePoint { - sorter := rangePointSorter{points: append(a, b...)} - sort.Sort(&sorter) - if sorter.err != nil { - r.err = sorter.err - return nil - } - var ( - merged []rangePoint - inRangeCount int - requiredInRangeCount int - ) - if union { - requiredInRangeCount = 1 - } else { - requiredInRangeCount = 2 - } - for _, val := range sorter.points { - if val.start { - inRangeCount++ - if inRangeCount == requiredInRangeCount { - // just reached the required in range count, a new range started. - merged = append(merged, val) - } - } else { - if inRangeCount == requiredInRangeCount { - // just about to leave the required in range count, the range is ended. - merged = append(merged, val) - } - inRangeCount-- - } - } - return merged -} - -// buildIndexRanges build index ranges from range points. -// Only the first column in the index is built, extra column ranges will be appended by -// appendIndexRanges. -func (r *rangeBuilder) buildIndexRanges(rangePoints []rangePoint) []*IndexRange { - indexRanges := make([]*IndexRange, 0, len(rangePoints)/2) - for i := 0; i < len(rangePoints); i += 2 { - startPoint := rangePoints[i] - endPoint := rangePoints[i+1] - ir := &IndexRange{ - LowVal: []types.Datum{startPoint.value}, - LowExclude: startPoint.excl, - HighVal: []types.Datum{endPoint.value}, - HighExclude: endPoint.excl, - } - indexRanges = append(indexRanges, ir) - } - return indexRanges -} - -// appendIndexRanges appends additional column ranges for multi-column index. -// The additional column ranges can only be appended to point ranges. -// for example we have an index (a, b), if the condition is (a > 1 and b = 2) -// then we can not build a conjunctive ranges for this index. -func (r *rangeBuilder) appendIndexRanges(origin []*IndexRange, rangePoints []rangePoint) []*IndexRange { - var newIndexRanges []*IndexRange - for i := 0; i < len(origin); i++ { - oRange := origin[i] - if !oRange.IsPoint() { - newIndexRanges = append(newIndexRanges, oRange) - } else { - newIndexRanges = append(newIndexRanges, r.appendIndexRange(oRange, rangePoints)...) - } - } - return newIndexRanges -} - -func (r *rangeBuilder) appendIndexRange(origin *IndexRange, rangePoints []rangePoint) []*IndexRange { - newRanges := make([]*IndexRange, 0, len(rangePoints)/2) - for i := 0; i < len(rangePoints); i += 2 { - startPoint := rangePoints[i] - lowVal := make([]types.Datum, len(origin.LowVal)+1) - copy(lowVal, origin.LowVal) - lowVal[len(origin.LowVal)] = startPoint.value - - endPoint := rangePoints[i+1] - highVal := make([]types.Datum, len(origin.HighVal)+1) - copy(highVal, origin.HighVal) - highVal[len(origin.HighVal)] = endPoint.value - - ir := &IndexRange{ - LowVal: lowVal, - LowExclude: startPoint.excl, - HighVal: highVal, - HighExclude: endPoint.excl, - } - newRanges = append(newRanges, ir) - } - return newRanges -} - -func (r *rangeBuilder) buildTableRanges(rangePoints []rangePoint) []TableRange { - tableRanges := make([]TableRange, 0, len(rangePoints)/2) - for i := 0; i < len(rangePoints); i += 2 { - startPoint := rangePoints[i] - if startPoint.value.Kind() == types.KindNull || startPoint.value.Kind() == types.KindMinNotNull { - startPoint.value.SetInt64(math.MinInt64) - } - startInt, err := types.ToInt64(startPoint.value.GetValue()) - if err != nil { - r.err = errors.Trace(err) - return tableRanges - } - startDatum := types.NewDatum(startInt) - cmp, err := startDatum.CompareDatum(startPoint.value) - if err != nil { - r.err = errors.Trace(err) - return tableRanges - } - if cmp < 0 || (cmp == 0 && startPoint.excl) { - startInt++ - } - endPoint := rangePoints[i+1] - if endPoint.value.Kind() == types.KindNull { - endPoint.value.SetInt64(math.MinInt64) - } else if endPoint.value.Kind() == types.KindMaxValue { - endPoint.value.SetInt64(math.MaxInt64) - } - endInt, err := types.ToInt64(endPoint.value.GetValue()) - if err != nil { - r.err = errors.Trace(err) - return tableRanges - } - endDatum := types.NewDatum(endInt) - cmp, err = endDatum.CompareDatum(endPoint.value) - if err != nil { - r.err = errors.Trace(err) - return tableRanges - } - if cmp > 0 || (cmp == 0 && endPoint.excl) { - endInt-- - } - if startInt > endInt { - continue - } - tableRanges = append(tableRanges, TableRange{LowVal: startInt, HighVal: endInt}) - } - return tableRanges -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/refiner.go b/vendor/github.com/pingcap/tidb/optimizer/plan/refiner.go deleted file mode 100644 index 7ca3f3bd8..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/refiner.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "math" - - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/util/types" -) - -// Refine tries to build index or table range. -func Refine(p Plan) error { - r := refiner{} - p.Accept(&r) - return r.err -} - -type refiner struct { - err error -} - -func (r *refiner) Enter(in Plan) (Plan, bool) { - return in, false -} - -func (r *refiner) Leave(in Plan) (Plan, bool) { - switch x := in.(type) { - case *IndexScan: - r.buildIndexRange(x) - case *Limit: - x.SetLimit(0) - case *TableScan: - r.buildTableRange(x) - } - return in, r.err == nil -} - -var fullRange = []rangePoint{ - {start: true}, - {value: types.MaxValueDatum()}, -} - -func (r *refiner) buildIndexRange(p *IndexScan) { - rb := rangeBuilder{} - if p.AccessEqualCount > 0 { - // Build ranges for equal access conditions. - point := rb.build(p.AccessConditions[0]) - p.Ranges = rb.buildIndexRanges(point) - for i := 1; i < p.AccessEqualCount; i++ { - point = rb.build(p.AccessConditions[i]) - p.Ranges = rb.appendIndexRanges(p.Ranges, point) - } - } - rangePoints := fullRange - // Build rangePoints for non-equal access condtions. - for i := p.AccessEqualCount; i < len(p.AccessConditions); i++ { - rangePoints = rb.intersection(rangePoints, rb.build(p.AccessConditions[i])) - } - if p.AccessEqualCount == 0 { - p.Ranges = rb.buildIndexRanges(rangePoints) - } else if p.AccessEqualCount < len(p.AccessConditions) { - p.Ranges = rb.appendIndexRanges(p.Ranges, rangePoints) - } - r.err = rb.err - return -} - -func (r *refiner) buildTableRange(p *TableScan) { - if len(p.AccessConditions) == 0 { - p.Ranges = []TableRange{{math.MinInt64, math.MaxInt64}} - return - } - rb := rangeBuilder{} - rangePoints := fullRange - for _, cond := range p.AccessConditions { - rangePoints = rb.intersection(rangePoints, rb.build(cond)) - } - p.Ranges = rb.buildTableRanges(rangePoints) - r.err = rb.err -} - -// conditionChecker checks if this condition can be pushed to index plan. -type conditionChecker struct { - tableName model.CIStr - idx *model.IndexInfo - // the offset of the indexed column to be checked. - columnOffset int - pkName model.CIStr -} - -func (c *conditionChecker) check(condition ast.ExprNode) bool { - switch x := condition.(type) { - case *ast.BinaryOperationExpr: - return c.checkBinaryOperation(x) - case *ast.BetweenExpr: - if ast.IsPreEvaluable(x.Left) && ast.IsPreEvaluable(x.Right) && c.checkColumnExpr(x.Expr) { - return true - } - case *ast.ColumnNameExpr: - return c.checkColumnExpr(x) - case *ast.IsNullExpr: - if c.checkColumnExpr(x.Expr) { - return true - } - case *ast.IsTruthExpr: - if c.checkColumnExpr(x.Expr) { - return true - } - case *ast.ParenthesesExpr: - return c.check(x.Expr) - case *ast.PatternInExpr: - if x.Sel != nil || x.Not { - return false - } - if !c.checkColumnExpr(x.Expr) { - return false - } - for _, val := range x.List { - if !ast.IsPreEvaluable(val) { - return false - } - } - return true - case *ast.PatternLikeExpr: - if x.Not { - return false - } - if !c.checkColumnExpr(x.Expr) { - return false - } - if !ast.IsPreEvaluable(x.Pattern) { - return false - } - patternVal := x.Pattern.GetValue() - if patternVal == nil { - return false - } - patternStr, err := types.ToString(patternVal) - if err != nil { - return false - } - firstChar := patternStr[0] - return firstChar != '%' && firstChar != '.' - } - return false -} - -func (c *conditionChecker) checkBinaryOperation(b *ast.BinaryOperationExpr) bool { - switch b.Op { - case opcode.OrOr: - return c.check(b.L) && c.check(b.R) - case opcode.AndAnd: - return c.check(b.L) && c.check(b.R) - case opcode.EQ, opcode.NE, opcode.GE, opcode.GT, opcode.LE, opcode.LT: - if ast.IsPreEvaluable(b.L) { - return c.checkColumnExpr(b.R) - } else if ast.IsPreEvaluable(b.R) { - return c.checkColumnExpr(b.L) - } - } - return false -} - -func (c *conditionChecker) checkColumnExpr(expr ast.ExprNode) bool { - cn, ok := expr.(*ast.ColumnNameExpr) - if !ok { - return false - } - if cn.Refer.Table.Name.L != c.tableName.L { - return false - } - if c.pkName.L != "" { - return c.pkName.L == cn.Refer.Column.Name.L - } - if c.idx != nil { - return cn.Refer.Column.Name.L == c.idx.Columns[c.columnOffset].Name.L - } - return true -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/plan/stringer.go b/vendor/github.com/pingcap/tidb/optimizer/plan/stringer.go deleted file mode 100644 index 9b2c8ed3c..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/plan/stringer.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plan - -import ( - "fmt" - "math" - "strings" -) - -// ToString explains a Plan, returns description string. -func ToString(p Plan) string { - var e stringer - p.Accept(&e) - return strings.Join(e.strs, "->") -} - -type stringer struct { - strs []string - idxs []int -} - -func (e *stringer) Enter(in Plan) (Plan, bool) { - switch in.(type) { - case *JoinOuter, *JoinInner: - e.idxs = append(e.idxs, len(e.strs)) - } - return in, false -} - -func (e *stringer) Leave(in Plan) (Plan, bool) { - var str string - switch x := in.(type) { - case *CheckTable: - str = "CheckTable" - case *IndexScan: - str = fmt.Sprintf("Index(%s.%s)", x.Table.Name.L, x.Index.Name.L) - case *Limit: - str = "Limit" - case *SelectFields: - str = "Fields" - case *SelectLock: - str = "Lock" - case *ShowDDL: - str = "ShowDDL" - case *Sort: - str = "Sort" - case *TableScan: - if len(x.Ranges) > 0 { - ran := x.Ranges[0] - if ran.LowVal != math.MinInt64 || ran.HighVal != math.MaxInt64 { - str = fmt.Sprintf("Range(%s)", x.Table.Name.L) - } else { - str = fmt.Sprintf("Table(%s)", x.Table.Name.L) - } - } else { - str = fmt.Sprintf("Table(%s)", x.Table.Name.L) - } - case *JoinOuter: - last := len(e.idxs) - 1 - idx := e.idxs[last] - chilrden := e.strs[idx:] - e.strs = e.strs[:idx] - str = "OuterJoin{" + strings.Join(chilrden, "->") + "}" - e.idxs = e.idxs[:last] - case *JoinInner: - last := len(e.idxs) - 1 - idx := e.idxs[last] - chilrden := e.strs[idx:] - e.strs = e.strs[:idx] - str = "InnerJoin{" + strings.Join(chilrden, "->") + "}" - e.idxs = e.idxs[:last] - default: - str = fmt.Sprintf("%T", in) - } - e.strs = append(e.strs, str) - return in, true -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/preprocess.go b/vendor/github.com/pingcap/tidb/optimizer/preprocess.go deleted file mode 100644 index d5b2337e4..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/preprocess.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package optimizer - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" -) - -// Preprocess does preprocess work for optimizer. -func Preprocess(node ast.Node, info infoschema.InfoSchema, ctx context.Context) error { - if err := ResolveName(node, info, ctx); err != nil { - return errors.Trace(err) - } - return nil -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/resolver.go b/vendor/github.com/pingcap/tidb/optimizer/resolver.go deleted file mode 100644 index bad755b26..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/resolver.go +++ /dev/null @@ -1,924 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package optimizer - -import ( - "fmt" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx/db" - "github.com/pingcap/tidb/util/types" -) - -// ResolveName resolves table name and column name. -// It generates ResultFields for ResultSetNode and resolves ColumnNameExpr to a ResultField. -func ResolveName(node ast.Node, info infoschema.InfoSchema, ctx context.Context) error { - defaultSchema := db.GetCurrentSchema(ctx) - resolver := nameResolver{Info: info, Ctx: ctx, DefaultSchema: model.NewCIStr(defaultSchema)} - node.Accept(&resolver) - return errors.Trace(resolver.Err) -} - -// nameResolver is the visitor to resolve table name and column name. -// In general, a reference can only refer to information that are available for it. -// So children elements are visited in the order that previous elements make information -// available for following elements. -// -// During visiting, information are collected and stored in resolverContext. -// When we enter a subquery, a new resolverContext is pushed to the contextStack, so subquery -// information can overwrite outer query information. When we look up for a column reference, -// we look up from top to bottom in the contextStack. -type nameResolver struct { - Info infoschema.InfoSchema - Ctx context.Context - DefaultSchema model.CIStr - Err error - useOuterContext bool - - contextStack []*resolverContext -} - -// resolverContext stores information in a single level of select statement -// that table name and column name can be resolved. -type resolverContext struct { - /* For Select Statement. */ - // table map to lookup and check table name conflict. - tableMap map[string]int - // table map to lookup and check derived-table(subselect) name conflict. - derivedTableMap map[string]int - // tableSources collected in from clause. - tables []*ast.TableSource - // result fields collected in select field list. - fieldList []*ast.ResultField - // result fields collected in group by clause. - groupBy []*ast.ResultField - - // The join node stack is used by on condition to find out - // available tables to reference. On condition can only - // refer to tables involved in current join. - joinNodeStack []*ast.Join - - // When visiting TableRefs, tables in this context are not available - // because it is being collected. - inTableRefs bool - // When visiting on conditon only tables in current join node are available. - inOnCondition bool - // When visiting field list, fieldList in this context are not available. - inFieldList bool - // When visiting group by, groupBy fields are not available. - inGroupBy bool - // When visiting having, only fieldList and groupBy fields are available. - inHaving bool - // When visiting having, checks if the expr is an aggregate function expr. - inHavingAgg bool - // OrderBy clause has different resolving rule than group by. - inOrderBy bool - // When visiting column name in ByItem, we should know if the column name is in an expression. - inByItemExpression bool - // If subquery use outer context. - useOuterContext bool - // When visiting multi-table delete stmt table list. - inDeleteTableList bool - // When visiting create/drop table statement. - inCreateOrDropTable bool - // When visiting show statement. - inShow bool -} - -// currentContext gets the current resolverContext. -func (nr *nameResolver) currentContext() *resolverContext { - stackLen := len(nr.contextStack) - if stackLen == 0 { - return nil - } - return nr.contextStack[stackLen-1] -} - -// pushContext is called when we enter a statement. -func (nr *nameResolver) pushContext() { - nr.contextStack = append(nr.contextStack, &resolverContext{ - tableMap: map[string]int{}, - derivedTableMap: map[string]int{}, - }) -} - -// popContext is called when we leave a statement. -func (nr *nameResolver) popContext() { - nr.contextStack = nr.contextStack[:len(nr.contextStack)-1] -} - -// pushJoin is called when we enter a join node. -func (nr *nameResolver) pushJoin(j *ast.Join) { - ctx := nr.currentContext() - ctx.joinNodeStack = append(ctx.joinNodeStack, j) -} - -// popJoin is called when we leave a join node. -func (nr *nameResolver) popJoin() { - ctx := nr.currentContext() - ctx.joinNodeStack = ctx.joinNodeStack[:len(ctx.joinNodeStack)-1] -} - -// Enter implements ast.Visitor interface. -func (nr *nameResolver) Enter(inNode ast.Node) (outNode ast.Node, skipChildren bool) { - switch v := inNode.(type) { - case *ast.AdminStmt: - nr.pushContext() - case *ast.AggregateFuncExpr: - ctx := nr.currentContext() - if ctx.inHaving { - ctx.inHavingAgg = true - } - case *ast.AlterTableStmt: - nr.pushContext() - case *ast.ByItem: - if _, ok := v.Expr.(*ast.ColumnNameExpr); !ok { - // If ByItem is not a single column name expression, - // the resolving rule is different from order by clause. - nr.currentContext().inByItemExpression = true - } - if nr.currentContext().inGroupBy { - // make sure item is not aggregate function - if ast.HasAggFlag(v.Expr) { - nr.Err = ErrInvalidGroupFuncUse - return inNode, true - } - } - case *ast.CreateIndexStmt: - nr.pushContext() - case *ast.CreateTableStmt: - nr.pushContext() - nr.currentContext().inCreateOrDropTable = true - case *ast.DeleteStmt: - nr.pushContext() - case *ast.DeleteTableList: - nr.currentContext().inDeleteTableList = true - case *ast.DoStmt: - nr.pushContext() - case *ast.DropTableStmt: - nr.pushContext() - nr.currentContext().inCreateOrDropTable = true - case *ast.DropIndexStmt: - nr.pushContext() - case *ast.FieldList: - nr.currentContext().inFieldList = true - case *ast.GroupByClause: - nr.currentContext().inGroupBy = true - case *ast.HavingClause: - nr.currentContext().inHaving = true - case *ast.InsertStmt: - nr.pushContext() - case *ast.Join: - nr.pushJoin(v) - case *ast.OnCondition: - nr.currentContext().inOnCondition = true - case *ast.OrderByClause: - nr.currentContext().inOrderBy = true - case *ast.SelectStmt: - nr.pushContext() - case *ast.SetStmt: - for _, assign := range v.Variables { - if cn, ok := assign.Value.(*ast.ColumnNameExpr); ok && cn.Name.Table.L == "" { - // Convert column name expression to string value expression. - assign.Value = ast.NewValueExpr(cn.Name.Name.O) - } - } - nr.pushContext() - case *ast.ShowStmt: - nr.pushContext() - nr.currentContext().inShow = true - nr.fillShowFields(v) - case *ast.TableRefsClause: - nr.currentContext().inTableRefs = true - case *ast.TruncateTableStmt: - nr.pushContext() - case *ast.UnionStmt: - nr.pushContext() - case *ast.UpdateStmt: - nr.pushContext() - } - return inNode, false -} - -// Leave implements ast.Visitor interface. -func (nr *nameResolver) Leave(inNode ast.Node) (node ast.Node, ok bool) { - switch v := inNode.(type) { - case *ast.AdminStmt: - nr.popContext() - case *ast.AggregateFuncExpr: - ctx := nr.currentContext() - if ctx.inHaving { - ctx.inHavingAgg = false - } - case *ast.AlterTableStmt: - nr.popContext() - case *ast.TableName: - nr.handleTableName(v) - case *ast.ColumnNameExpr: - nr.handleColumnName(v) - case *ast.CreateIndexStmt: - nr.popContext() - case *ast.CreateTableStmt: - nr.popContext() - case *ast.DeleteTableList: - nr.currentContext().inDeleteTableList = false - case *ast.DoStmt: - nr.popContext() - case *ast.DropIndexStmt: - nr.popContext() - case *ast.DropTableStmt: - nr.popContext() - case *ast.TableSource: - nr.handleTableSource(v) - case *ast.OnCondition: - nr.currentContext().inOnCondition = false - case *ast.Join: - nr.handleJoin(v) - nr.popJoin() - case *ast.TableRefsClause: - nr.currentContext().inTableRefs = false - case *ast.FieldList: - nr.handleFieldList(v) - nr.currentContext().inFieldList = false - case *ast.GroupByClause: - ctx := nr.currentContext() - ctx.inGroupBy = false - for _, item := range v.Items { - switch x := item.Expr.(type) { - case *ast.ColumnNameExpr: - ctx.groupBy = append(ctx.groupBy, x.Refer) - } - } - case *ast.HavingClause: - nr.currentContext().inHaving = false - case *ast.OrderByClause: - nr.currentContext().inOrderBy = false - case *ast.ByItem: - nr.currentContext().inByItemExpression = false - case *ast.PositionExpr: - nr.handlePosition(v) - case *ast.SelectStmt: - ctx := nr.currentContext() - v.SetResultFields(ctx.fieldList) - if ctx.useOuterContext { - nr.useOuterContext = true - } - nr.popContext() - case *ast.SetStmt: - nr.popContext() - case *ast.ShowStmt: - nr.popContext() - case *ast.SubqueryExpr: - if nr.useOuterContext { - // TODO: check this - // If there is a deep nest of subquery, there may be something wrong. - v.UseOuterContext = true - nr.useOuterContext = false - } - case *ast.TruncateTableStmt: - nr.popContext() - case *ast.UnionStmt: - ctx := nr.currentContext() - v.SetResultFields(ctx.fieldList) - if ctx.useOuterContext { - nr.useOuterContext = true - } - nr.popContext() - case *ast.UnionSelectList: - nr.handleUnionSelectList(v) - case *ast.InsertStmt: - nr.popContext() - case *ast.DeleteStmt: - nr.popContext() - case *ast.UpdateStmt: - nr.popContext() - } - return inNode, nr.Err == nil -} - -// handleTableName looks up and sets the schema information and result fields for table name. -func (nr *nameResolver) handleTableName(tn *ast.TableName) { - if tn.Schema.L == "" { - tn.Schema = nr.DefaultSchema - } - ctx := nr.currentContext() - if ctx.inCreateOrDropTable { - // The table may not exist in create table or drop table statement. - // Skip resolving the table to avoid error. - return - } - if ctx.inDeleteTableList { - idx, ok := ctx.tableMap[nr.tableUniqueName(tn.Schema, tn.Name)] - if !ok { - nr.Err = errors.Errorf("Unknown table %s", tn.Name.O) - return - } - ts := ctx.tables[idx] - tableName := ts.Source.(*ast.TableName) - tn.DBInfo = tableName.DBInfo - tn.TableInfo = tableName.TableInfo - tn.SetResultFields(tableName.GetResultFields()) - return - } - table, err := nr.Info.TableByName(tn.Schema, tn.Name) - if err != nil { - nr.Err = errors.Trace(err) - return - } - tn.TableInfo = table.Meta() - dbInfo, _ := nr.Info.SchemaByName(tn.Schema) - tn.DBInfo = dbInfo - - rfs := make([]*ast.ResultField, 0, len(tn.TableInfo.Columns)) - for _, v := range tn.TableInfo.Columns { - if v.State != model.StatePublic { - continue - } - expr := &ast.ValueExpr{} - expr.SetType(&v.FieldType) - rf := &ast.ResultField{ - Column: v, - Table: tn.TableInfo, - DBName: tn.Schema, - Expr: expr, - TableName: tn, - } - rfs = append(rfs, rf) - } - tn.SetResultFields(rfs) - return -} - -// handleTableSources checks name duplication -// and puts the table source in current resolverContext. -// Note: -// "select * from t as a join (select 1) as a;" is not duplicate. -// "select * from t as a join t as a;" is duplicate. -// "select * from (select 1) as a join (select 1) as a;" is duplicate. -func (nr *nameResolver) handleTableSource(ts *ast.TableSource) { - for _, v := range ts.GetResultFields() { - v.TableAsName = ts.AsName - } - ctx := nr.currentContext() - switch ts.Source.(type) { - case *ast.TableName: - var name string - if ts.AsName.L != "" { - name = ts.AsName.L - } else { - tableName := ts.Source.(*ast.TableName) - name = nr.tableUniqueName(tableName.Schema, tableName.Name) - } - if _, ok := ctx.tableMap[name]; ok { - nr.Err = errors.Errorf("duplicated table/alias name %s", name) - return - } - ctx.tableMap[name] = len(ctx.tables) - case *ast.SelectStmt: - name := ts.AsName.L - if _, ok := ctx.derivedTableMap[name]; ok { - nr.Err = errors.Errorf("duplicated table/alias name %s", name) - return - } - ctx.derivedTableMap[name] = len(ctx.tables) - } - dupNames := make(map[string]struct{}, len(ts.GetResultFields())) - for _, f := range ts.GetResultFields() { - // duplicate column name in one table is not allowed. - // "select * from (select 1, 1) as a;" is duplicate. - name := f.ColumnAsName.L - if name == "" { - name = f.Column.Name.L - } - if _, ok := dupNames[name]; ok { - nr.Err = errors.Errorf("Duplicate column name '%s'", name) - return - } - dupNames[name] = struct{}{} - } - ctx.tables = append(ctx.tables, ts) - return -} - -// handleJoin sets result fields for join. -func (nr *nameResolver) handleJoin(j *ast.Join) { - if j.Right == nil { - j.SetResultFields(j.Left.GetResultFields()) - return - } - leftLen := len(j.Left.GetResultFields()) - rightLen := len(j.Right.GetResultFields()) - rfs := make([]*ast.ResultField, leftLen+rightLen) - copy(rfs, j.Left.GetResultFields()) - copy(rfs[leftLen:], j.Right.GetResultFields()) - j.SetResultFields(rfs) -} - -// handleColumnName looks up and sets ResultField for -// the column name. -func (nr *nameResolver) handleColumnName(cn *ast.ColumnNameExpr) { - ctx := nr.currentContext() - if ctx.inOnCondition { - // In on condition, only tables within current join is available. - nr.resolveColumnNameInOnCondition(cn) - return - } - - // Try to resolve the column name form top to bottom in the context stack. - for i := len(nr.contextStack) - 1; i >= 0; i-- { - if nr.resolveColumnNameInContext(nr.contextStack[i], cn) { - // Column is already resolved or encountered an error. - if i < len(nr.contextStack)-1 { - // If in subselect, the query use outer query. - nr.currentContext().useOuterContext = true - } - return - } - } - nr.Err = errors.Errorf("unknown column %s", cn.Name.Name.L) -} - -// resolveColumnNameInContext looks up and sets ResultField for a column with the ctx. -func (nr *nameResolver) resolveColumnNameInContext(ctx *resolverContext, cn *ast.ColumnNameExpr) bool { - if ctx.inTableRefs { - // In TableRefsClause, column reference only in join on condition which is handled before. - return false - } - if ctx.inFieldList { - // only resolve column using tables. - return nr.resolveColumnInTableSources(cn, ctx.tables) - } - if ctx.inGroupBy { - // From tables first, then field list. - // If ctx.InByItemExpression is true, the item is not an identifier. - // Otherwise it is an identifier. - if ctx.inByItemExpression { - // From table first, then field list. - if nr.resolveColumnInTableSources(cn, ctx.tables) { - return true - } - found := nr.resolveColumnInResultFields(ctx, cn, ctx.fieldList) - if nr.Err == nil && found { - // Check if resolved refer is an aggregate function expr. - if _, ok := cn.Refer.Expr.(*ast.AggregateFuncExpr); ok { - nr.Err = ErrIllegalReference.Gen("Reference '%s' not supported (reference to group function)", cn.Name.Name.O) - } - } - return found - } - // Resolve from table first, then from select list. - found := nr.resolveColumnInTableSources(cn, ctx.tables) - if nr.Err != nil { - return found - } - // We should copy the refer here. - // Because if the ByItem is an identifier, we should check if it - // is ambiguous even it is already resolved from table source. - // If the ByItem is not an identifier, we do not need the second check. - r := cn.Refer - if nr.resolveColumnInResultFields(ctx, cn, ctx.fieldList) { - if nr.Err != nil { - return true - } - if r != nil { - // It is not ambiguous and already resolved from table source. - // We should restore its Refer. - cn.Refer = r - } - if _, ok := cn.Refer.Expr.(*ast.AggregateFuncExpr); ok { - nr.Err = ErrIllegalReference.Gen("Reference '%s' not supported (reference to group function)", cn.Name.Name.O) - } - return true - } - return found - } - if ctx.inHaving { - // First group by, then field list. - if nr.resolveColumnInResultFields(ctx, cn, ctx.groupBy) { - return true - } - if ctx.inHavingAgg { - // If cn is in an aggregate function in having clause, check tablesource first. - if nr.resolveColumnInTableSources(cn, ctx.tables) { - return true - } - } - return nr.resolveColumnInResultFields(ctx, cn, ctx.fieldList) - } - if ctx.inOrderBy { - if nr.resolveColumnInResultFields(ctx, cn, ctx.groupBy) { - return true - } - if ctx.inByItemExpression { - // From table first, then field list. - if nr.resolveColumnInTableSources(cn, ctx.tables) { - return true - } - return nr.resolveColumnInResultFields(ctx, cn, ctx.fieldList) - } - // Field list first, then from table. - if nr.resolveColumnInResultFields(ctx, cn, ctx.fieldList) { - return true - } - return nr.resolveColumnInTableSources(cn, ctx.tables) - } - if ctx.inShow { - return nr.resolveColumnInResultFields(ctx, cn, ctx.fieldList) - } - // In where clause. - return nr.resolveColumnInTableSources(cn, ctx.tables) -} - -// resolveColumnNameInOnCondition resolves the column name in current join. -func (nr *nameResolver) resolveColumnNameInOnCondition(cn *ast.ColumnNameExpr) { - ctx := nr.currentContext() - join := ctx.joinNodeStack[len(ctx.joinNodeStack)-1] - tableSources := appendTableSources(nil, join) - if !nr.resolveColumnInTableSources(cn, tableSources) { - nr.Err = errors.Errorf("unkown column name %s", cn.Name.Name.O) - } -} - -func (nr *nameResolver) resolveColumnInTableSources(cn *ast.ColumnNameExpr, tableSources []*ast.TableSource) (done bool) { - var matchedResultField *ast.ResultField - tableNameL := cn.Name.Table.L - columnNameL := cn.Name.Name.L - if tableNameL != "" { - var matchedTable ast.ResultSetNode - for _, ts := range tableSources { - if tableNameL == ts.AsName.L { - // different table name. - matchedTable = ts - break - } else if ts.AsName.L != "" { - // Table as name shadows table real name. - continue - } - if tn, ok := ts.Source.(*ast.TableName); ok { - if cn.Name.Schema.L != "" && cn.Name.Schema.L != tn.Schema.L { - continue - } - if tableNameL == tn.Name.L { - matchedTable = ts - } - } - } - if matchedTable != nil { - resultFields := matchedTable.GetResultFields() - for _, rf := range resultFields { - if rf.ColumnAsName.L == columnNameL || rf.Column.Name.L == columnNameL { - // resolve column. - matchedResultField = rf - break - } - } - } - } else { - for _, ts := range tableSources { - rfs := ts.GetResultFields() - for _, rf := range rfs { - matchAsName := rf.ColumnAsName.L != "" && rf.ColumnAsName.L == columnNameL - matchColumnName := rf.ColumnAsName.L == "" && rf.Column.Name.L == columnNameL - if matchAsName || matchColumnName { - if matchedResultField != nil { - nr.Err = errors.Errorf("column %s is ambiguous.", cn.Name.Name.O) - return true - } - matchedResultField = rf - } - } - } - } - if matchedResultField != nil { - // Bind column. - cn.Refer = matchedResultField - return true - } - return false -} - -func (nr *nameResolver) resolveColumnInResultFields(ctx *resolverContext, cn *ast.ColumnNameExpr, rfs []*ast.ResultField) bool { - var matched *ast.ResultField - for _, rf := range rfs { - if cn.Name.Table.L != "" { - // Check table name - if rf.TableAsName.L != "" { - if cn.Name.Table.L != rf.TableAsName.L { - continue - } - } else if cn.Name.Table.L != rf.Table.Name.L { - continue - } - } - matchAsName := cn.Name.Name.L == rf.ColumnAsName.L - var matchColumnName bool - if ctx.inHaving { - matchColumnName = cn.Name.Name.L == rf.Column.Name.L - } else { - matchColumnName = rf.ColumnAsName.L == "" && cn.Name.Name.L == rf.Column.Name.L - } - if matchAsName || matchColumnName { - if rf.Column.Name.L == "" { - // This is not a real table column, resolve it directly. - cn.Refer = rf - return true - } - if matched == nil { - matched = rf - } else { - sameColumn := matched.TableName == rf.TableName && matched.Column.Name.L == rf.Column.Name.L - if !sameColumn { - nr.Err = errors.Errorf("column %s is ambiguous.", cn.Name.Name.O) - return true - } - } - } - } - if matched != nil { - // If in GroupBy, we clone the ResultField - if ctx.inGroupBy || ctx.inHaving || ctx.inOrderBy { - nf := *matched - expr := matched.Expr - if cexpr, ok := expr.(*ast.ColumnNameExpr); ok { - expr = cexpr.Refer.Expr - } - nf.Expr = expr - matched = &nf - } - // Bind column. - cn.Refer = matched - return true - } - return false -} - -// handleFieldList expands wild card field and sets fieldList in current context. -func (nr *nameResolver) handleFieldList(fieldList *ast.FieldList) { - var resultFields []*ast.ResultField - for _, v := range fieldList.Fields { - resultFields = append(resultFields, nr.createResultFields(v)...) - } - nr.currentContext().fieldList = resultFields -} - -func getInnerFromParentheses(expr ast.ExprNode) ast.ExprNode { - if pexpr, ok := expr.(*ast.ParenthesesExpr); ok { - return getInnerFromParentheses(pexpr.Expr) - } - return expr -} - -// createResultFields creates result field list for a single select field. -func (nr *nameResolver) createResultFields(field *ast.SelectField) (rfs []*ast.ResultField) { - ctx := nr.currentContext() - if field.WildCard != nil { - if len(ctx.tables) == 0 { - nr.Err = errors.New("No table used.") - return - } - tableRfs := []*ast.ResultField{} - if field.WildCard.Table.L == "" { - for _, v := range ctx.tables { - tableRfs = append(tableRfs, v.GetResultFields()...) - } - } else { - name := nr.tableUniqueName(field.WildCard.Schema, field.WildCard.Table) - tableIdx, ok1 := ctx.tableMap[name] - derivedTableIdx, ok2 := ctx.derivedTableMap[name] - if !ok1 && !ok2 { - nr.Err = errors.Errorf("unknown table %s.", field.WildCard.Table.O) - } - if ok1 { - tableRfs = ctx.tables[tableIdx].GetResultFields() - } - if ok2 { - tableRfs = append(tableRfs, ctx.tables[derivedTableIdx].GetResultFields()...) - } - - } - for _, trf := range tableRfs { - // Convert it to ColumnNameExpr - cn := &ast.ColumnName{ - Schema: trf.DBName, - Table: trf.Table.Name, - Name: trf.ColumnAsName, - } - cnExpr := &ast.ColumnNameExpr{ - Name: cn, - Refer: trf, - } - ast.SetFlag(cnExpr) - cnExpr.SetType(trf.Expr.GetType()) - rf := *trf - rf.Expr = cnExpr - rfs = append(rfs, &rf) - } - return - } - // The column is visited before so it must has been resolved already. - rf := &ast.ResultField{ColumnAsName: field.AsName} - innerExpr := getInnerFromParentheses(field.Expr) - switch v := innerExpr.(type) { - case *ast.ColumnNameExpr: - rf.Column = v.Refer.Column - rf.Table = v.Refer.Table - rf.DBName = v.Refer.DBName - rf.TableName = v.Refer.TableName - rf.Expr = v - default: - rf.Column = &model.ColumnInfo{} // Empty column info. - rf.Table = &model.TableInfo{} // Empty table info. - rf.Expr = v - } - if field.AsName.L == "" { - switch x := innerExpr.(type) { - case *ast.ColumnNameExpr: - rf.ColumnAsName = model.NewCIStr(x.Name.Name.O) - case *ast.ValueExpr: - if innerExpr.Text() != "" { - rf.ColumnAsName = model.NewCIStr(innerExpr.Text()) - } else { - rf.ColumnAsName = model.NewCIStr(field.Text()) - } - default: - rf.ColumnAsName = model.NewCIStr(field.Text()) - } - } - rfs = append(rfs, rf) - return -} - -func appendTableSources(in []*ast.TableSource, resultSetNode ast.ResultSetNode) (out []*ast.TableSource) { - switch v := resultSetNode.(type) { - case *ast.TableSource: - out = append(in, v) - case *ast.Join: - out = appendTableSources(in, v.Left) - if v.Right != nil { - out = appendTableSources(out, v.Right) - } - } - return -} - -func (nr *nameResolver) tableUniqueName(schema, table model.CIStr) string { - if schema.L != "" && schema.L != nr.DefaultSchema.L { - return schema.L + "." + table.L - } - return table.L -} - -func (nr *nameResolver) handlePosition(pos *ast.PositionExpr) { - ctx := nr.currentContext() - if pos.N < 1 || pos.N > len(ctx.fieldList) { - nr.Err = errors.Errorf("Unknown column '%d'", pos.N) - return - } - matched := ctx.fieldList[pos.N-1] - nf := *matched - expr := matched.Expr - if cexpr, ok := expr.(*ast.ColumnNameExpr); ok { - expr = cexpr.Refer.Expr - } - nf.Expr = expr - pos.Refer = &nf - if nr.currentContext().inGroupBy { - // make sure item is not aggregate function - if ast.HasAggFlag(pos.Refer.Expr) { - nr.Err = errors.New("group by cannot contain aggregate function") - } - } -} - -func (nr *nameResolver) handleUnionSelectList(u *ast.UnionSelectList) { - firstSelFields := u.Selects[0].GetResultFields() - unionFields := make([]*ast.ResultField, len(firstSelFields)) - // Copy first result fields, because we may change the result field type. - for i, v := range firstSelFields { - rf := *v - col := *v.Column - rf.Column = &col - if rf.Column.Flen == 0 { - rf.Column.Flen = types.UnspecifiedLength - } - rf.Expr = &ast.ValueExpr{} - unionFields[i] = &rf - } - nr.currentContext().fieldList = unionFields -} - -func (nr *nameResolver) fillShowFields(s *ast.ShowStmt) { - if s.DBName == "" { - if s.Table != nil && s.Table.Schema.L != "" { - s.DBName = s.Table.Schema.O - } else { - s.DBName = nr.DefaultSchema.O - } - } else if s.Table != nil && s.Table.Schema.L == "" { - s.Table.Schema = model.NewCIStr(s.DBName) - } - var fields []*ast.ResultField - var ( - names []string - ftypes []byte - ) - switch s.Tp { - case ast.ShowEngines: - names = []string{"Engine", "Support", "Comment", "Transactions", "XA", "Savepoints"} - case ast.ShowDatabases: - names = []string{"Database"} - case ast.ShowTables: - names = []string{fmt.Sprintf("Tables_in_%s", s.DBName)} - if s.Full { - names = append(names, "Table_type") - } - case ast.ShowTableStatus: - names = []string{"Name", "Engine", "Version", "Row_format", "Rows", "Avg_row_length", - "Data_length", "Max_data_length", "Index_length", "Data_free", "Auto_increment", - "Create_time", "Update_time", "Check_time", "Collation", "Checksum", - "Create_options", "Comment"} - ftypes = []byte{mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeLonglong, mysql.TypeVarchar, mysql.TypeLonglong, mysql.TypeLonglong, - mysql.TypeLonglong, mysql.TypeLonglong, mysql.TypeLonglong, mysql.TypeLonglong, mysql.TypeLonglong, - mysql.TypeDatetime, mysql.TypeDatetime, mysql.TypeDatetime, mysql.TypeVarchar, mysql.TypeVarchar, - mysql.TypeVarchar, mysql.TypeVarchar} - case ast.ShowColumns: - names = column.ColDescFieldNames(s.Full) - case ast.ShowWarnings: - names = []string{"Level", "Code", "Message"} - ftypes = []byte{mysql.TypeVarchar, mysql.TypeLong, mysql.TypeVarchar} - case ast.ShowCharset: - names = []string{"Charset", "Description", "Default collation", "Maxlen"} - ftypes = []byte{mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeLonglong} - case ast.ShowVariables: - names = []string{"Variable_name", "Value"} - case ast.ShowStatus: - names = []string{"Variable_name", "Value"} - case ast.ShowCollation: - names = []string{"Collation", "Charset", "Id", "Default", "Compiled", "Sortlen"} - ftypes = []byte{mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeLonglong, - mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeLonglong} - case ast.ShowCreateTable: - names = []string{"Table", "Create Table"} - case ast.ShowGrants: - names = []string{fmt.Sprintf("Grants for %s", s.User)} - case ast.ShowTriggers: - names = []string{"Trigger", "Event", "Table", "Statement", "Timing", "Created", - "sql_mode", "Definer", "character_set_client", "collation_connection", "Database Collation"} - ftypes = []byte{mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, - mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar} - case ast.ShowProcedureStatus: - names = []string{} - ftypes = []byte{} - case ast.ShowIndex: - names = []string{"Table", "Non_unique", "Key_name", "Seq_in_index", - "Column_name", "Collation", "Cardinality", "Sub_part", "Packed", - "Null", "Index_type", "Comment", "Index_comment"} - ftypes = []byte{mysql.TypeVarchar, mysql.TypeLonglong, mysql.TypeVarchar, mysql.TypeLonglong, - mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeLonglong, mysql.TypeLonglong, - mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar} - } - for i, name := range names { - f := &ast.ResultField{ - ColumnAsName: model.NewCIStr(name), - Column: &model.ColumnInfo{}, // Empty column info. - Table: &model.TableInfo{}, // Empty table info. - } - if ftypes == nil || ftypes[i] == 0 { - // use varchar as the default return column type - f.Column.Tp = mysql.TypeVarchar - } else { - f.Column.Tp = ftypes[i] - } - f.Column.Charset, f.Column.Collate = types.DefaultCharsetForType(f.Column.Tp) - f.Expr = &ast.ValueExpr{} - f.Expr.SetType(&f.Column.FieldType) - fields = append(fields, f) - } - - if s.Pattern != nil && s.Pattern.Expr == nil { - rf := fields[0] - s.Pattern.Expr = &ast.ColumnNameExpr{ - Name: &ast.ColumnName{Name: rf.ColumnAsName}, - } - ast.SetFlag(s.Pattern) - } - s.SetResultFields(fields) - nr.currentContext().fieldList = fields -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/typeinferer.go b/vendor/github.com/pingcap/tidb/optimizer/typeinferer.go deleted file mode 100644 index 837e7bb9a..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/typeinferer.go +++ /dev/null @@ -1,349 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package optimizer - -import ( - "strings" - - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/types" -) - -// InferType infers result type for ast.ExprNode. -func InferType(node ast.Node) error { - var inferrer typeInferrer - // TODO: get the default charset from ctx - inferrer.defaultCharset = "utf8" - node.Accept(&inferrer) - return inferrer.err -} - -type typeInferrer struct { - err error - defaultCharset string -} - -func (v *typeInferrer) Enter(in ast.Node) (out ast.Node, skipChildren bool) { - return in, false -} - -func (v *typeInferrer) Leave(in ast.Node) (out ast.Node, ok bool) { - switch x := in.(type) { - case *ast.AggregateFuncExpr: - v.aggregateFunc(x) - case *ast.BetweenExpr: - x.SetType(types.NewFieldType(mysql.TypeLonglong)) - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin - case *ast.BinaryOperationExpr: - v.binaryOperation(x) - case *ast.CaseExpr: - v.handleCaseExpr(x) - case *ast.ColumnNameExpr: - x.SetType(&x.Refer.Column.FieldType) - case *ast.CompareSubqueryExpr: - x.SetType(types.NewFieldType(mysql.TypeLonglong)) - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin - case *ast.ExistsSubqueryExpr: - x.SetType(types.NewFieldType(mysql.TypeLonglong)) - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin - case *ast.FuncCallExpr: - v.handleFuncCallExpr(x) - case *ast.FuncCastExpr: - x.SetType(x.Tp) - if len(x.Type.Charset) == 0 { - x.Type.Charset, x.Type.Collate = types.DefaultCharsetForType(x.Type.Tp) - } - case *ast.IsNullExpr: - x.SetType(types.NewFieldType(mysql.TypeLonglong)) - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin - case *ast.IsTruthExpr: - x.SetType(types.NewFieldType(mysql.TypeLonglong)) - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin - case *ast.ParamMarkerExpr: - x.SetType(types.DefaultTypeForValue(x.GetValue())) - case *ast.ParenthesesExpr: - x.SetType(x.Expr.GetType()) - case *ast.PatternInExpr: - x.SetType(types.NewFieldType(mysql.TypeLonglong)) - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin - case *ast.PatternLikeExpr: - x.SetType(types.NewFieldType(mysql.TypeLonglong)) - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin - case *ast.PatternRegexpExpr: - x.SetType(types.NewFieldType(mysql.TypeLonglong)) - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin - case *ast.SelectStmt: - v.selectStmt(x) - case *ast.UnaryOperationExpr: - v.unaryOperation(x) - case *ast.ValueExpr: - v.handleValueExpr(x) - case *ast.ValuesExpr: - v.handleValuesExpr(x) - case *ast.VariableExpr: - x.SetType(types.NewFieldType(mysql.TypeVarString)) - x.Type.Charset = v.defaultCharset - cln, err := charset.GetDefaultCollation(v.defaultCharset) - if err != nil { - v.err = err - } - x.Type.Collate = cln - // TODO: handle all expression types. - } - return in, true -} - -func (v *typeInferrer) selectStmt(x *ast.SelectStmt) { - rf := x.GetResultFields() - for _, val := range rf { - // column ID is 0 means it is not a real column from table, but a temporary column, - // so its type is not pre-defined, we need to set it. - if val.Column.ID == 0 && val.Expr.GetType() != nil { - val.Column.FieldType = *(val.Expr.GetType()) - } - } -} - -func (v *typeInferrer) aggregateFunc(x *ast.AggregateFuncExpr) { - name := strings.ToLower(x.F) - switch name { - case ast.AggFuncCount: - ft := types.NewFieldType(mysql.TypeLonglong) - ft.Flen = 21 - ft.Charset = charset.CharsetBin - ft.Collate = charset.CollationBin - x.SetType(ft) - case ast.AggFuncMax, ast.AggFuncMin: - x.SetType(x.Args[0].GetType()) - case ast.AggFuncSum, ast.AggFuncAvg: - ft := types.NewFieldType(mysql.TypeNewDecimal) - ft.Charset = charset.CharsetBin - ft.Collate = charset.CollationBin - x.SetType(ft) - case ast.AggFuncGroupConcat: - ft := types.NewFieldType(mysql.TypeVarString) - ft.Charset = v.defaultCharset - cln, err := charset.GetDefaultCollation(v.defaultCharset) - if err != nil { - v.err = err - } - ft.Collate = cln - x.SetType(ft) - } -} - -func (v *typeInferrer) binaryOperation(x *ast.BinaryOperationExpr) { - switch x.Op { - case opcode.AndAnd, opcode.OrOr, opcode.LogicXor: - x.Type = types.NewFieldType(mysql.TypeLonglong) - case opcode.LT, opcode.LE, opcode.GE, opcode.GT, opcode.EQ, opcode.NE, opcode.NullEQ: - x.Type = types.NewFieldType(mysql.TypeLonglong) - case opcode.RightShift, opcode.LeftShift, opcode.And, opcode.Or, opcode.Xor: - x.Type = types.NewFieldType(mysql.TypeLonglong) - x.Type.Flag |= mysql.UnsignedFlag - case opcode.IntDiv: - x.Type = types.NewFieldType(mysql.TypeLonglong) - case opcode.Plus, opcode.Minus, opcode.Mul, opcode.Mod: - if x.L.GetType() != nil && x.R.GetType() != nil { - xTp := mergeArithType(x.L.GetType().Tp, x.R.GetType().Tp) - x.Type = types.NewFieldType(xTp) - leftUnsigned := x.L.GetType().Flag & mysql.UnsignedFlag - rightUnsigned := x.R.GetType().Flag & mysql.UnsignedFlag - // If both operands are unsigned, result is unsigned. - x.Type.Flag |= (leftUnsigned & rightUnsigned) - } - case opcode.Div: - if x.L.GetType() != nil && x.R.GetType() != nil { - xTp := mergeArithType(x.L.GetType().Tp, x.R.GetType().Tp) - if xTp == mysql.TypeLonglong { - xTp = mysql.TypeDecimal - } - x.Type = types.NewFieldType(xTp) - } - } - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin -} - -func mergeArithType(a, b byte) byte { - switch a { - case mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString, mysql.TypeDouble, mysql.TypeFloat: - return mysql.TypeDouble - } - switch b { - case mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString, mysql.TypeDouble, mysql.TypeFloat: - return mysql.TypeDouble - } - if a == mysql.TypeNewDecimal || b == mysql.TypeNewDecimal { - return mysql.TypeNewDecimal - } - return mysql.TypeLonglong -} - -func (v *typeInferrer) unaryOperation(x *ast.UnaryOperationExpr) { - switch x.Op { - case opcode.Not: - x.Type = types.NewFieldType(mysql.TypeLonglong) - case opcode.BitNeg: - x.Type = types.NewFieldType(mysql.TypeLonglong) - x.Type.Flag |= mysql.UnsignedFlag - case opcode.Plus: - x.Type = x.V.GetType() - case opcode.Minus: - x.Type = types.NewFieldType(mysql.TypeLonglong) - if x.V.GetType() != nil { - switch x.V.GetType().Tp { - case mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString, mysql.TypeDouble, mysql.TypeFloat: - x.Type.Tp = mysql.TypeDouble - case mysql.TypeNewDecimal: - x.Type.Tp = mysql.TypeNewDecimal - } - } - } - x.Type.Charset = charset.CharsetBin - x.Type.Collate = charset.CollationBin -} - -func (v *typeInferrer) handleValueExpr(x *ast.ValueExpr) { - tp := types.DefaultTypeForValue(x.GetValue()) - // Set charset and collation - x.SetType(tp) -} - -func (v *typeInferrer) handleValuesExpr(x *ast.ValuesExpr) { - x.SetType(x.Column.GetType()) -} - -func (v *typeInferrer) getFsp(x *ast.FuncCallExpr) int { - if len(x.Args) == 1 { - a := x.Args[0].GetValue() - fsp, err := types.ToInt64(a) - if err != nil { - v.err = err - } - return int(fsp) - } - return 0 -} - -func (v *typeInferrer) handleFuncCallExpr(x *ast.FuncCallExpr) { - var ( - tp *types.FieldType - chs = charset.CharsetBin - ) - switch x.FnName.L { - case "abs", "ifnull", "nullif": - tp = x.Args[0].GetType() - case "pow", "power", "rand": - tp = types.NewFieldType(mysql.TypeDouble) - case "curdate", "current_date", "date": - tp = types.NewFieldType(mysql.TypeDate) - case "curtime", "current_time": - tp = types.NewFieldType(mysql.TypeDuration) - tp.Decimal = v.getFsp(x) - case "current_timestamp", "date_arith": - tp = types.NewFieldType(mysql.TypeDatetime) - case "microsecond", "second", "minute", "hour", "day", "week", "month", "year", - "dayofweek", "dayofmonth", "dayofyear", "weekday", "weekofyear", "yearweek", - "found_rows", "length", "extract", "locate": - tp = types.NewFieldType(mysql.TypeLonglong) - case "now", "sysdate": - tp = types.NewFieldType(mysql.TypeDatetime) - tp.Decimal = v.getFsp(x) - case "dayname", "version", "database", "user", "current_user", - "concat", "concat_ws", "left", "lower", "repeat", "replace", "upper", "convert", - "substring", "substring_index", "trim": - tp = types.NewFieldType(mysql.TypeVarString) - chs = v.defaultCharset - case "strcmp": - tp = types.NewFieldType(mysql.TypeLonglong) - case "connection_id": - tp = types.NewFieldType(mysql.TypeLonglong) - tp.Flag |= mysql.UnsignedFlag - case "if": - // TODO: fix this - // See: https://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html#function_if - // The default return type of IF() (which may matter when it is stored into a temporary table) is calculated as follows. - // Expression Return Value - // expr2 or expr3 returns a string string - // expr2 or expr3 returns a floating-point value floating-point - // expr2 or expr3 returns an integer integer - tp = x.Args[1].GetType() - default: - tp = types.NewFieldType(mysql.TypeUnspecified) - } - // If charset is unspecified. - if len(tp.Charset) == 0 { - tp.Charset = chs - cln := charset.CollationBin - if chs != charset.CharsetBin { - var err error - cln, err = charset.GetDefaultCollation(chs) - if err != nil { - v.err = err - } - } - tp.Collate = cln - } - x.SetType(tp) -} - -// The return type of a CASE expression is the compatible aggregated type of all return values, -// but also depends on the context in which it is used. -// If used in a string context, the result is returned as a string. -// If used in a numeric context, the result is returned as a decimal, real, or integer value. -func (v *typeInferrer) handleCaseExpr(x *ast.CaseExpr) { - var currType *types.FieldType - for _, w := range x.WhenClauses { - t := w.Result.GetType() - if currType == nil { - currType = t - continue - } - mtp := types.MergeFieldType(currType.Tp, t.Tp) - if mtp == t.Tp && mtp != currType.Tp { - currType.Charset = t.Charset - currType.Collate = t.Collate - } - currType.Tp = mtp - - } - if x.ElseClause != nil { - t := x.ElseClause.GetType() - if currType == nil { - currType = t - } else { - mtp := types.MergeFieldType(currType.Tp, t.Tp) - if mtp == t.Tp && mtp != currType.Tp { - currType.Charset = t.Charset - currType.Collate = t.Collate - } - currType.Tp = mtp - } - } - x.SetType(currType) - // TODO: We need a better way to set charset/collation - x.Type.Charset, x.Type.Collate = types.DefaultCharsetForType(x.Type.Tp) -} diff --git a/vendor/github.com/pingcap/tidb/optimizer/validator.go b/vendor/github.com/pingcap/tidb/optimizer/validator.go deleted file mode 100644 index 2064fb45f..000000000 --- a/vendor/github.com/pingcap/tidb/optimizer/validator.go +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package optimizer - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" - "github.com/pingcap/tidb/parser/opcode" -) - -// Validate checkes whether the node is valid. -func Validate(node ast.Node, inPrepare bool) error { - v := validator{inPrepare: inPrepare} - node.Accept(&v) - return v.err -} - -// validator is an ast.Visitor that validates -// ast Nodes parsed from parser. -type validator struct { - err error - wildCardCount int - inPrepare bool - inAggregate bool -} - -func (v *validator) Enter(in ast.Node) (out ast.Node, skipChildren bool) { - switch in.(type) { - case *ast.AggregateFuncExpr: - if v.inAggregate { - // Aggregate function can not contain aggregate function. - v.err = ErrInvalidGroupFuncUse - return in, true - } - v.inAggregate = true - } - return in, false -} - -func (v *validator) Leave(in ast.Node) (out ast.Node, ok bool) { - switch x := in.(type) { - case *ast.AggregateFuncExpr: - v.inAggregate = false - case *ast.BetweenExpr: - v.checkAllOneColumn(x.Expr, x.Left, x.Right) - case *ast.BinaryOperationExpr: - v.checkBinaryOperation(x) - case *ast.ByItem: - v.checkAllOneColumn(x.Expr) - case *ast.CreateTableStmt: - v.checkAutoIncrement(x) - case *ast.CompareSubqueryExpr: - v.checkSameColumns(x.L, x.R) - case *ast.FieldList: - v.checkFieldList(x) - case *ast.HavingClause: - v.checkAllOneColumn(x.Expr) - case *ast.IsNullExpr: - v.checkAllOneColumn(x.Expr) - case *ast.IsTruthExpr: - v.checkAllOneColumn(x.Expr) - case *ast.ParamMarkerExpr: - if !v.inPrepare { - v.err = parser.ErrSyntax.Gen("syntax error, unexpected '?'") - } - case *ast.PatternInExpr: - v.checkSameColumns(append(x.List, x.Expr)...) - } - - return in, v.err == nil -} - -// checkAllOneColumn checks that all expressions have one column. -// Expression may have more than one column when it is a rowExpr or -// a Subquery with more than one result fields. -func (v *validator) checkAllOneColumn(exprs ...ast.ExprNode) { - for _, expr := range exprs { - switch x := expr.(type) { - case *ast.RowExpr: - v.err = ErrOneColumn - case *ast.SubqueryExpr: - if len(x.Query.GetResultFields()) != 1 { - v.err = ErrOneColumn - } - } - } - return -} - -func checkAutoIncrementOp(colDef *ast.ColumnDef, num int) (bool, error) { - var hasAutoIncrement bool - - if colDef.Options[num].Tp == ast.ColumnOptionAutoIncrement { - hasAutoIncrement = true - if len(colDef.Options) == num+1 { - return hasAutoIncrement, nil - } - for _, op := range colDef.Options[num+1:] { - if op.Tp == ast.ColumnOptionDefaultValue { - return hasAutoIncrement, errors.Errorf("Invalid default value for '%s'", colDef.Name.Name.O) - } - } - } - if colDef.Options[num].Tp == ast.ColumnOptionDefaultValue && len(colDef.Options) != num+1 { - for _, op := range colDef.Options[num+1:] { - if op.Tp == ast.ColumnOptionAutoIncrement { - return hasAutoIncrement, errors.Errorf("Invalid default value for '%s'", colDef.Name.Name.O) - } - } - } - - return hasAutoIncrement, nil -} - -func isConstraintKeyTp(constraints []*ast.Constraint, colDef *ast.ColumnDef) bool { - for _, c := range constraints { - if len(c.Keys) < 1 { - } - // If the constraint as follows: primary key(c1, c2) - // we only support c1 column can be auto_increment. - if colDef.Name.Name.L != c.Keys[0].Column.Name.L { - continue - } - switch c.Tp { - case ast.ConstraintPrimaryKey, ast.ConstraintKey, ast.ConstraintIndex, - ast.ConstraintUniq, ast.ConstraintUniqIndex, ast.ConstraintUniqKey: - return true - } - } - - return false -} - -func (v *validator) checkAutoIncrement(stmt *ast.CreateTableStmt) { - var ( - isKey bool - count int - autoIncrementCol *ast.ColumnDef - ) - - for _, colDef := range stmt.Cols { - var hasAutoIncrement bool - for i, op := range colDef.Options { - ok, err := checkAutoIncrementOp(colDef, i) - if err != nil { - v.err = err - return - } - if ok { - hasAutoIncrement = true - } - switch op.Tp { - case ast.ColumnOptionPrimaryKey, ast.ColumnOptionUniqKey, ast.ColumnOptionUniqIndex, - ast.ColumnOptionUniq, ast.ColumnOptionKey, ast.ColumnOptionIndex: - isKey = true - } - } - if hasAutoIncrement { - count++ - autoIncrementCol = colDef - } - } - - if count < 1 { - return - } - - if !isKey { - isKey = isConstraintKeyTp(stmt.Constraints, autoIncrementCol) - } - if !isKey || count > 1 { - v.err = errors.New("Incorrect table definition; there can be only one auto column and it must be defined as a key") - } - - switch autoIncrementCol.Tp.Tp { - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeLong, - mysql.TypeFloat, mysql.TypeDouble, mysql.TypeLonglong, mysql.TypeInt24: - default: - v.err = errors.Errorf("Incorrect column specifier for column '%s'", autoIncrementCol.Name.Name.O) - } -} - -func (v *validator) checkBinaryOperation(x *ast.BinaryOperationExpr) { - // row constructor only supports comparison operation. - switch x.Op { - case opcode.LT, opcode.LE, opcode.GE, opcode.GT, opcode.EQ, opcode.NE, opcode.NullEQ: - v.checkSameColumns(x.L, x.R) - default: - v.checkAllOneColumn(x.L, x.R) - } -} - -func columnCount(ex ast.ExprNode) int { - switch x := ex.(type) { - case *ast.RowExpr: - return len(x.Values) - case *ast.SubqueryExpr: - return len(x.Query.GetResultFields()) - default: - return 1 - } -} - -func (v *validator) checkSameColumns(exprs ...ast.ExprNode) { - if len(exprs) == 0 { - return - } - count := columnCount(exprs[0]) - for i := 1; i < len(exprs); i++ { - if columnCount(exprs[i]) != count { - v.err = ErrSameColumns - return - } - } -} - -// checkFieldList checks if there is only one '*' and each field has only one column. -func (v *validator) checkFieldList(x *ast.FieldList) { - var hasWildCard bool - for _, val := range x.Fields { - if val.WildCard != nil && val.WildCard.Table.L == "" { - if hasWildCard { - v.err = ErrMultiWildCard - return - } - hasWildCard = true - } - v.checkAllOneColumn(val.Expr) - if v.err != nil { - return - } - } -} diff --git a/vendor/github.com/pingcap/tidb/parser/opcode/opcode.go b/vendor/github.com/pingcap/tidb/parser/opcode/opcode.go deleted file mode 100644 index f112845c5..000000000 --- a/vendor/github.com/pingcap/tidb/parser/opcode/opcode.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package opcode - -import "fmt" - -// Op is opcode type. -type Op int - -// List operators. -const ( - AndAnd Op = iota + 1 - LeftShift - RightShift - OrOr - GE - LE - EQ - NE - LT - GT - Plus - Minus - And - Or - Mod - Xor - Div - Mul - Not - BitNeg - IntDiv - LogicXor - NullEQ -) - -var ops = map[Op]string{ - AndAnd: "&&", - LeftShift: "<<", - RightShift: ">>", - OrOr: "||", - GE: ">=", - LE: "<=", - EQ: "=", - NE: "!=", - LT: "<", - GT: ">", - Plus: "+", - Minus: "-", - And: "&", - Or: "|", - Mod: "%", - Xor: "^", - Div: "/", - Mul: "*", - Not: "!", - BitNeg: "~", - IntDiv: "DIV", - LogicXor: "XOR", - NullEQ: "<=>", -} - -// String implements Stringer interface. -func (o Op) String() string { - str, ok := ops[o] - if !ok { - panic(fmt.Sprintf("%d", o)) - } - - return str -} diff --git a/vendor/github.com/pingcap/tidb/parser/parser.go b/vendor/github.com/pingcap/tidb/parser/parser.go deleted file mode 100644 index e673a6abb..000000000 --- a/vendor/github.com/pingcap/tidb/parser/parser.go +++ /dev/null @@ -1,9355 +0,0 @@ -// Code generated by goyacc -// CAUTION: Generated file - DO NOT EDIT. - -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -// Inital yacc source generated by ebnf2y[1] -// at 2013-10-04 23:10:47.861401015 +0200 CEST -// -// $ ebnf2y -o ql.y -oe ql.ebnf -start StatementList -pkg ql -p _ -// -// [1]: http://github.com/cznic/ebnf2y - -package parser - -import __yyfmt__ "fmt" - -import ( - "strings" - - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/types" -) - -type yySymType struct { - yys int - offset int // offset - line int - col int - item interface{} - list []interface{} -} - -type yyXError struct { - state, xsym int -} - -const ( - yyDefault = 57667 - yyEOFCode = 57344 - abs = 57352 - add = 57353 - addDate = 57354 - admin = 57355 - after = 57356 - all = 57357 - alter = 57358 - and = 57359 - andand = 57360 - andnot = 57361 - any = 57362 - as = 57363 - asc = 57364 - at = 57365 - autoIncrement = 57366 - avg = 57367 - avgRowLength = 57368 - begin = 57369 - between = 57370 - bigIntType = 57605 - binaryType = 57620 - bitLit = 57351 - bitType = 57606 - blobType = 57623 - boolType = 57642 - booleanType = 57643 - both = 57371 - btree = 57372 - by = 57373 - byteType = 57374 - calcFoundRows = 57595 - caseKwd = 57375 - cast = 57376 - charType = 57618 - character = 57377 - charsetKwd = 57378 - check = 57379 - checksum = 57380 - coalesce = 57381 - collate = 57382 - collation = 57383 - column = 57384 - columns = 57385 - comment = 57386 - commit = 57387 - committed = 57388 - compact = 57389 - compressed = 57390 - compression = 57391 - concat = 57392 - concatWs = 57393 - connection = 57394 - connectionID = 57395 - constraint = 57396 - convert = 57397 - count = 57398 - create = 57399 - cross = 57400 - curDate = 57401 - curTime = 57403 - currentDate = 57402 - currentTime = 57404 - currentTs = 57596 - currentUser = 57405 - database = 57406 - databases = 57407 - dateAdd = 57408 - dateSub = 57409 - dateType = 57613 - datetimeType = 57615 - day = 57410 - dayHour = 57654 - dayMicrosecond = 57651 - dayMinute = 57653 - daySecond = 57652 - dayname = 57411 - dayofmonth = 57412 - dayofweek = 57413 - dayofyear = 57414 - ddl = 57415 - deallocate = 57416 - decimalType = 57607 - defaultKwd = 57417 - delayKeyWrite = 57419 - delayed = 57418 - deleteKwd = 57420 - desc = 57421 - describe = 57422 - distinct = 57423 - div = 57424 - do = 57425 - doubleType = 57610 - drop = 57426 - dual = 57427 - duplicate = 57428 - dynamic = 57429 - elseKwd = 57430 - end = 57431 - engine = 57432 - engines = 57433 - enum = 57434 - eq = 57435 - yyErrCode = 57345 - escape = 57436 - execute = 57437 - exists = 57438 - explain = 57439 - extract = 57440 - falseKwd = 57441 - fields = 57442 - first = 57443 - fixed = 57444 - float32Type = 57640 - float64Type = 57641 - floatLit = 57346 - floatType = 57609 - forKwd = 57446 - foreign = 57445 - foundRows = 57447 - from = 57448 - full = 57449 - fulltext = 57450 - ge = 57451 - global = 57452 - grant = 57453 - grants = 57454 - group = 57455 - groupConcat = 57456 - hash = 57457 - having = 57458 - hexLit = 57350 - highPriority = 57459 - hour = 57460 - hourMicrosecond = 57648 - hourMinute = 57650 - hourSecond = 57649 - identified = 57461 - identifier = 57347 - ifKwd = 57463 - ifNull = 57464 - ignore = 57462 - in = 57465 - index = 57466 - inner = 57467 - insert = 57468 - insertValues = 57660 - int16Type = 57630 - int24Type = 57631 - int32Type = 57632 - int64Type = 57633 - int8Type = 57634 - intLit = 57348 - intType = 57603 - integerType = 57604 - interval = 57469 - into = 57470 - is = 57471 - isolation = 57472 - join = 57473 - key = 57474 - keyBlockSize = 57475 - le = 57476 - leading = 57477 - left = 57478 - length = 57479 - level = 57480 - like = 57481 - limit = 57482 - local = 57483 - localTime = 57597 - localTs = 57598 - locate = 57484 - lock = 57485 - longblobType = 57625 - longtextType = 57629 - lowPriority = 57487 - lower = 57486 - lowerThanCalcFoundRows = 57657 - lowerThanComma = 57666 - lowerThanEq = 57661 - lowerThanEscape = 57665 - lowerThanInsertValues = 57659 - lowerThanLeftParen = 57663 - lowerThanQuick = 57664 - lowerThanSetKeyword = 57658 - lsh = 57488 - max = 57489 - maxRows = 57490 - mediumIntType = 57602 - mediumblobType = 57624 - mediumtextType = 57628 - microsecond = 57491 - min = 57492 - minRows = 57494 - minute = 57493 - minuteMicrosecond = 57646 - minuteSecond = 57647 - mod = 57495 - mode = 57496 - month = 57497 - names = 57498 - national = 57499 - neg = 57662 - neq = 57500 - neqSynonym = 57501 - not = 57502 - now = 57599 - null = 57503 - nullIf = 57505 - nulleq = 57504 - numericType = 57608 - offset = 57506 - on = 57507 - only = 57508 - option = 57509 - or = 57510 - order = 57511 - oror = 57512 - outer = 57513 - parseExpression = 57644 - password = 57514 - placeholder = 57515 - pow = 57516 - power = 57517 - precisionType = 57611 - prepare = 57518 - primary = 57519 - procedure = 57520 - quarter = 57521 - quick = 57522 - rand = 57523 - read = 57524 - realType = 57612 - redundant = 57525 - references = 57526 - regexpKwd = 57527 - repeat = 57528 - repeatable = 57529 - replace = 57530 - right = 57531 - rlike = 57532 - rollback = 57533 - row = 57534 - rowFormat = 57535 - rsh = 57536 - schema = 57537 - schemas = 57538 - second = 57539 - secondMicrosecond = 57645 - selectKwd = 57540 - serializable = 57541 - session = 57542 - set = 57543 - share = 57544 - show = 57545 - signed = 57546 - smallIntType = 57601 - some = 57547 - start = 57548 - status = 57549 - strcmp = 57552 - stringLit = 57349 - stringType = 57550 - subDate = 57551 - substring = 57553 - substringIndex = 57554 - sum = 57555 - sysDate = 57557 - sysVar = 57556 - tableKwd = 57558 - tableRefPriority = 57656 - tables = 57559 - textType = 57627 - then = 57560 - timeType = 57614 - timestampType = 57616 - tinyIntType = 57600 - tinyblobType = 57622 - tinytextType = 57626 - to = 57561 - trailing = 57562 - transaction = 57563 - triggers = 57564 - trim = 57565 - trueKwd = 57566 - truncate = 57567 - uint16Type = 57636 - uint32Type = 57637 - uint64Type = 57638 - uint8Type = 57639 - uintType = 57635 - uncommitted = 57568 - underscoreCS = 57569 - union = 57571 - unique = 57572 - unknown = 57570 - unlock = 57573 - unsigned = 57574 - update = 57575 - upper = 57576 - use = 57577 - user = 57578 - userVar = 57580 - using = 57579 - value = 57581 - values = 57582 - varbinaryType = 57621 - varcharType = 57619 - variables = 57583 - version = 57584 - warnings = 57585 - week = 57586 - weekday = 57587 - weekofyear = 57588 - when = 57589 - where = 57590 - write = 57591 - xor = 57592 - yearMonth = 57655 - yearType = 57617 - yearweek = 57593 - zerofill = 57594 - - yyMaxDepth = 200 - yyTabOfs = -876 -) - -var ( - yyXLAT = map[int]int{ - 57386: 0, // comment (813x) - 57366: 1, // autoIncrement (806x) - 57344: 2, // $end (783x) - 59: 3, // ';' (781x) - 57356: 4, // after (776x) - 57443: 5, // first (776x) - 57378: 6, // charsetKwd (720x) - 41: 7, // ')' (718x) - 44: 8, // ',' (717x) - 57475: 9, // keyBlockSize (696x) - 57514: 10, // password (692x) - 57368: 11, // avgRowLength (689x) - 57380: 12, // checksum (689x) - 57391: 13, // compression (689x) - 57394: 14, // connection (689x) - 57419: 15, // delayKeyWrite (689x) - 57432: 16, // engine (689x) - 57490: 17, // maxRows (689x) - 57494: 18, // minRows (689x) - 57535: 19, // rowFormat (689x) - 57431: 20, // end (663x) - 57549: 21, // status (663x) - 57559: 22, // tables (663x) - 57518: 23, // prepare (662x) - 57437: 24, // execute (661x) - 57583: 25, // variables (661x) - 57617: 26, // yearType (661x) - 57385: 27, // columns (660x) - 57615: 28, // datetimeType (660x) - 57613: 29, // dateType (660x) - 57410: 30, // day (660x) - 57442: 31, // fields (660x) - 57460: 32, // hour (660x) - 57472: 33, // isolation (660x) - 57491: 34, // microsecond (660x) - 57493: 35, // minute (660x) - 57497: 36, // month (660x) - 57506: 37, // offset (660x) - 57521: 38, // quarter (660x) - 57539: 39, // second (660x) - 57614: 40, // timeType (660x) - 57570: 41, // unknown (660x) - 57581: 42, // value (660x) - 57586: 43, // week (660x) - 57355: 44, // admin (659x) - 57369: 45, // begin (659x) - 57387: 46, // commit (659x) - 57389: 47, // compact (659x) - 57390: 48, // compressed (659x) - 57416: 49, // deallocate (659x) - 57425: 50, // do (659x) - 57429: 51, // dynamic (659x) - 57444: 52, // fixed (659x) - 57461: 53, // identified (659x) - 57599: 54, // now (659x) - 57525: 55, // redundant (659x) - 57533: 56, // rollback (659x) - 57546: 57, // signed (659x) - 57548: 58, // start (659x) - 57567: 59, // truncate (659x) - 57578: 60, // user (659x) - 57606: 61, // bitType (658x) - 57643: 62, // booleanType (658x) - 57642: 63, // boolType (658x) - 57372: 64, // btree (658x) - 57383: 65, // collation (658x) - 57388: 66, // committed (658x) - 57433: 67, // engines (658x) - 57449: 68, // full (658x) - 57452: 69, // global (658x) - 57454: 70, // grants (658x) - 57457: 71, // hash (658x) - 57480: 72, // level (658x) - 57483: 73, // local (658x) - 57496: 74, // mode (658x) - 57499: 75, // national (658x) - 57508: 76, // only (658x) - 57529: 77, // repeatable (658x) - 57541: 78, // serializable (658x) - 57542: 79, // session (658x) - 57627: 80, // textType (658x) - 57616: 81, // timestampType (658x) - 57563: 82, // transaction (658x) - 57564: 83, // triggers (658x) - 57568: 84, // uncommitted (658x) - 57585: 85, // warnings (658x) - 57352: 86, // abs (657x) - 57354: 87, // addDate (657x) - 57362: 88, // any (657x) - 57367: 89, // avg (657x) - 57595: 90, // calcFoundRows (657x) - 57381: 91, // coalesce (657x) - 57392: 92, // concat (657x) - 57393: 93, // concatWs (657x) - 57395: 94, // connectionID (657x) - 57398: 95, // count (657x) - 57403: 96, // curTime (657x) - 57408: 97, // dateAdd (657x) - 57409: 98, // dateSub (657x) - 57411: 99, // dayname (657x) - 57412: 100, // dayofmonth (657x) - 57413: 101, // dayofweek (657x) - 57414: 102, // dayofyear (657x) - 57436: 103, // escape (657x) - 57447: 104, // foundRows (657x) - 57456: 105, // groupConcat (657x) - 57347: 106, // identifier (657x) - 57464: 107, // ifNull (657x) - 57479: 108, // length (657x) - 57484: 109, // locate (657x) - 57489: 110, // max (657x) - 57492: 111, // min (657x) - 57498: 112, // names (657x) - 57505: 113, // nullIf (657x) - 57516: 114, // pow (657x) - 57517: 115, // power (657x) - 57522: 116, // quick (657x) - 57523: 117, // rand (657x) - 57534: 118, // row (657x) - 57547: 119, // some (657x) - 57551: 120, // subDate (657x) - 57553: 121, // substring (657x) - 57554: 122, // substringIndex (657x) - 57555: 123, // sum (657x) - 57565: 124, // trim (657x) - 57584: 125, // version (657x) - 57587: 126, // weekday (657x) - 57588: 127, // weekofyear (657x) - 57593: 128, // yearweek (657x) - 57502: 129, // not (557x) - 57507: 130, // on (552x) - 57349: 131, // stringLit (538x) - 57478: 132, // left (506x) - 40: 133, // '(' (492x) - 43: 134, // '+' (473x) - 45: 135, // '-' (473x) - 57417: 136, // defaultKwd (462x) - 57503: 137, // null (423x) - 57359: 138, // and (409x) - 57571: 139, // union (409x) - 57360: 140, // andand (408x) - 57510: 141, // or (408x) - 57512: 142, // oror (408x) - 57592: 143, // xor (408x) - 57446: 144, // forKwd (392x) - 57482: 145, // limit (392x) - 57448: 146, // from (391x) - 57485: 147, // lock (391x) - 57590: 148, // where (380x) - 57382: 149, // collate (368x) - 57511: 150, // order (367x) - 57435: 151, // eq (360x) - 57458: 152, // having (357x) - 57543: 153, // set (352x) - 57473: 154, // join (350x) - 57579: 155, // using (350x) - 57455: 156, // group (348x) - 57400: 157, // cross (343x) - 57467: 158, // inner (343x) - 57531: 159, // right (343x) - 125: 160, // '}' (340x) - 57481: 161, // like (337x) - 57363: 162, // as (334x) - 57421: 163, // desc (331x) - 57589: 164, // when (331x) - 42: 165, // '*' (329x) - 57364: 166, // asc (329x) - 57430: 167, // elseKwd (328x) - 57654: 168, // dayHour (327x) - 57651: 169, // dayMicrosecond (327x) - 57653: 170, // dayMinute (327x) - 57652: 171, // daySecond (327x) - 57648: 172, // hourMicrosecond (327x) - 57650: 173, // hourMinute (327x) - 57649: 174, // hourSecond (327x) - 57646: 175, // minuteMicrosecond (327x) - 57647: 176, // minuteSecond (327x) - 57645: 177, // secondMicrosecond (327x) - 57655: 178, // yearMonth (327x) - 57560: 179, // then (325x) - 57465: 180, // in (322x) - 60: 181, // '<' (320x) - 62: 182, // '>' (320x) - 57451: 183, // ge (320x) - 57471: 184, // is (320x) - 57476: 185, // le (320x) - 57500: 186, // neq (320x) - 57501: 187, // neqSynonym (320x) - 57504: 188, // nulleq (320x) - 57370: 189, // between (310x) - 57527: 190, // regexpKwd (310x) - 57532: 191, // rlike (310x) - 37: 192, // '%' (309x) - 38: 193, // '&' (309x) - 47: 194, // '/' (309x) - 94: 195, // '^' (309x) - 124: 196, // '|' (309x) - 57620: 197, // binaryType (309x) - 57424: 198, // div (309x) - 57488: 199, // lsh (309x) - 57495: 200, // mod (309x) - 57536: 201, // rsh (309x) - 57582: 202, // values (295x) - 57519: 203, // primary (263x) - 57572: 204, // unique (263x) - 57379: 205, // check (258x) - 57766: 206, // Identifier (246x) - 57793: 207, // NotKeywordToken (246x) - 57877: 208, // UnReservedKeyword (246x) - 57377: 209, // character (196x) - 57348: 210, // intLit (189x) - 46: 211, // '.' (183x) - 57463: 212, // ifKwd (173x) - 57530: 213, // replace (169x) - 57580: 214, // userVar (168x) - 57441: 215, // falseKwd (167x) - 57566: 216, // trueKwd (167x) - 57438: 217, // exists (166x) - 57346: 218, // floatLit (166x) - 57596: 219, // currentTs (165x) - 57406: 220, // database (165x) - 57537: 221, // schema (165x) - 57556: 222, // sysVar (165x) - 57351: 223, // bitLit (164x) - 57350: 224, // hexLit (164x) - 57569: 225, // underscoreCS (164x) - 33: 226, // '!' (163x) - 126: 227, // '~' (163x) - 57375: 228, // caseKwd (163x) - 57376: 229, // cast (163x) - 57397: 230, // convert (163x) - 57401: 231, // curDate (163x) - 57402: 232, // currentDate (163x) - 57404: 233, // currentTime (163x) - 57405: 234, // currentUser (163x) - 57440: 235, // extract (163x) - 57486: 236, // lower (163x) - 57515: 237, // placeholder (163x) - 57528: 238, // repeat (163x) - 57552: 239, // strcmp (163x) - 57557: 240, // sysDate (163x) - 57576: 241, // upper (163x) - 57687: 242, // ColumnName (159x) - 57540: 243, // selectKwd (154x) - 57474: 244, // key (144x) - 57466: 245, // index (143x) - 57851: 246, // SubSelect (136x) - 57618: 247, // charType (135x) - 57426: 248, // drop (135x) - 57445: 249, // foreign (135x) - 57524: 250, // read (135x) - 57450: 251, // fulltext (134x) - 57887: 252, // UserVariable (134x) - 57607: 253, // decimalType (133x) - 57604: 254, // integerType (133x) - 57561: 255, // to (133x) - 57619: 256, // varcharType (133x) - 57787: 257, // Literal (132x) - 57353: 258, // add (131x) - 57605: 259, // bigIntType (131x) - 57623: 260, // blobType (131x) - 57715: 261, // DateArithMultiFormsOpt (131x) - 57716: 262, // DateArithOpt (131x) - 57610: 263, // doubleType (131x) - 57434: 264, // enum (131x) - 57640: 265, // float32Type (131x) - 57641: 266, // float64Type (131x) - 57609: 267, // floatType (131x) - 57755: 268, // Function (131x) - 57756: 269, // FunctionCallAgg (131x) - 57757: 270, // FunctionCallConflict (131x) - 57758: 271, // FunctionCallKeyword (131x) - 57759: 272, // FunctionCallNonKeyword (131x) - 57760: 273, // FunctionNameConflict (131x) - 57633: 274, // int64Type (131x) - 57603: 275, // intType (131x) - 57625: 276, // longblobType (131x) - 57629: 277, // longtextType (131x) - 57624: 278, // mediumblobType (131x) - 57602: 279, // mediumIntType (131x) - 57628: 280, // mediumtextType (131x) - 57608: 281, // numericType (131x) - 57800: 282, // Operand (131x) - 57816: 283, // PrimaryExpression (131x) - 57612: 284, // realType (131x) - 57601: 285, // smallIntType (131x) - 57550: 286, // stringType (131x) - 57853: 287, // SystemVariable (131x) - 57622: 288, // tinyblobType (131x) - 57600: 289, // tinyIntType (131x) - 57626: 290, // tinytextType (131x) - 57638: 291, // uint64Type (131x) - 57635: 292, // uintType (131x) - 57621: 293, // varbinaryType (131x) - 57891: 294, // Variable (131x) - 57591: 295, // write (131x) - 57817: 296, // PrimaryFactor (123x) - 57813: 297, // PredicateExpr (110x) - 57737: 298, // Expression (108x) - 57742: 299, // Factor (108x) - 57898: 300, // logAnd (85x) - 57899: 301, // logOr (85x) - 57574: 302, // unsigned (33x) - 57861: 303, // TableName (31x) - 57594: 304, // zerofill (31x) - 57357: 305, // all (20x) - 57746: 306, // FieldLen (20x) - 57831: 307, // SelectStmt (17x) - 57731: 308, // EqOpt (16x) - 57738: 309, // ExpressionList (16x) - 57784: 310, // LengthNum (15x) - 57791: 311, // NUM (15x) - 57804: 312, // OptFieldLen (14x) - 57462: 313, // ignore (13x) - 57774: 314, // IndexType (13x) - 57880: 315, // UnionSelect (13x) - 57878: 316, // UnionClauseList (12x) - 57881: 317, // UnionStmt (12x) - 123: 318, // '{' (11x) - 57770: 319, // IndexColName (11x) - 57470: 320, // into (11x) - 57849: 321, // StringName (11x) - 57575: 322, // update (11x) - 57684: 323, // CharsetKw (10x) - 57771: 324, // IndexColNameList (10x) - 57781: 325, // JoinTable (10x) - 57858: 326, // TableFactor (10x) - 57558: 327, // tableKwd (10x) - 57867: 328, // TableRef (10x) - 57420: 329, // deleteKwd (8x) - 57423: 330, // distinct (8x) - 57772: 331, // IndexName (8x) - 57468: 332, // insert (8x) - 57720: 333, // DefaultKwdOpt (7x) - 57732: 334, // EscapedTableRef (7x) - 57773: 335, // IndexOption (7x) - 57802: 336, // OptCharset (7x) - 57896: 337, // WhereClause (7x) - 57897: 338, // WhereClauseOptional (7x) - 57724: 339, // DistinctOpt (6x) - 57775: 340, // IndexTypeOpt (6x) - 57803: 341, // OptCollate (6x) - 57868: 342, // TableRefs (6x) - 57399: 343, // create (5x) - 57707: 344, // CrossOpt (5x) - 57708: 345, // DBName (5x) - 57741: 346, // ExpressionOpt (5x) - 57782: 347, // JoinType (5x) - 57801: 348, // OptBinary (5x) - 57829: 349, // RowFormat (5x) - 57545: 350, // show (5x) - 57839: 351, // ShowDatabaseNameOpt (5x) - 57862: 352, // TableNameList (5x) - 57863: 353, // TableOption (5x) - 57889: 354, // Username (5x) - 57358: 355, // alter (4x) - 57673: 356, // Assignment (4x) - 57739: 357, // ExpressionListList (4x) - 57453: 358, // grant (4x) - 57769: 359, // IgnoreOptional (4x) - 57487: 360, // lowPriority (4x) - 57808: 361, // OrderBy (4x) - 57809: 362, // OrderByOptional (4x) - 57836: 363, // SelectStmtLimit (4x) - 57854: 364, // TableAsName (4x) - 57674: 365, // AssignmentList (3x) - 57373: 366, // by (3x) - 57681: 367, // ByItem (3x) - 57685: 368, // ColumnDef (3x) - 57396: 369, // constraint (3x) - 57699: 370, // Constraint (3x) - 57701: 371, // ConstraintKeywordOpt (3x) - 57723: 372, // DeleteFromStmt (3x) - 57748: 373, // FieldOpt (3x) - 57749: 374, // FieldOpts (3x) - 57751: 375, // FloatOpt (3x) - 57768: 376, // IfNotExists (3x) - 57776: 377, // InsertIntoStmt (3x) - 57513: 378, // outer (3x) - 57812: 379, // Precision (3x) - 57826: 380, // ReplaceIntoStmt (3x) - 57830: 381, // SelectLockOpt (3x) - 57864: 382, // TableOptionList (3x) - 57865: 383, // TableOptionListOpt (3x) - 57871: 384, // TimeUnit (3x) - 57872: 385, // TransactionChar (3x) - 57883: 386, // UpdateStmt (3x) - 57885: 387, // UserSpec (3x) - 57890: 388, // ValueSym (3x) - 57668: 389, // AdminStmt (2x) - 57669: 390, // AlterTableSpec (2x) - 57671: 391, // AlterTableStmt (2x) - 57677: 392, // AuthString (2x) - 57678: 393, // BeginTransactionStmt (2x) - 57682: 394, // ByList (2x) - 57683: 395, // CastType (2x) - 57384: 396, // column (2x) - 57686: 397, // ColumnKeywordOpt (2x) - 57688: 398, // ColumnNameList (2x) - 57690: 399, // ColumnOption (2x) - 57694: 400, // ColumnSetValue (2x) - 57697: 401, // CommitStmt (2x) - 57702: 402, // CreateDatabaseStmt (2x) - 57703: 403, // CreateIndexStmt (2x) - 57705: 404, // CreateTableStmt (2x) - 57706: 405, // CreateUserStmt (2x) - 57709: 406, // DatabaseOption (2x) - 57407: 407, // databases (2x) - 57712: 408, // DatabaseSym (2x) - 57717: 409, // DeallocateStmt (2x) - 57718: 410, // DeallocateSym (2x) - 57418: 411, // delayed (2x) - 57422: 412, // describe (2x) - 57725: 413, // DoStmt (2x) - 57726: 414, // DropDatabaseStmt (2x) - 57727: 415, // DropIndexStmt (2x) - 57728: 416, // DropTableStmt (2x) - 57730: 417, // EmptyStmt (2x) - 57733: 418, // ExecuteStmt (2x) - 57439: 419, // explain (2x) - 57734: 420, // ExplainStmt (2x) - 57735: 421, // ExplainSym (2x) - 57743: 422, // Field (2x) - 57754: 423, // FuncDatetimePrec (2x) - 57762: 424, // GrantStmt (2x) - 57767: 425, // IfExists (2x) - 57777: 426, // InsertValues (2x) - 57469: 427, // interval (2x) - 57779: 428, // IntoOpt (2x) - 57786: 429, // LimitClause (2x) - 57597: 430, // localTime (2x) - 57598: 431, // localTs (2x) - 57788: 432, // LockTablesStmt (2x) - 57790: 433, // LowPriorityOptional (2x) - 57794: 434, // NotOpt (2x) - 57795: 435, // NowSym (2x) - 57796: 436, // NumLiteral (2x) - 57806: 437, // OptInteger (2x) - 57807: 438, // Order (2x) - 57811: 439, // PasswordOpt (2x) - 57815: 440, // PreparedStmt (2x) - 57819: 441, // PrivElem (2x) - 57822: 442, // PrivType (2x) - 57828: 443, // RollbackStmt (2x) - 57838: 444, // SetStmt (2x) - 57841: 445, // ShowStmt (2x) - 57842: 446, // ShowTableAliasOpt (2x) - 57846: 447, // Statement (2x) - 57848: 448, // StringList (2x) - 57852: 449, // Symbol (2x) - 57856: 450, // TableElement (2x) - 57859: 451, // TableLock (2x) - 57873: 452, // TransactionChars (2x) - 57875: 453, // TruncateTableStmt (2x) - 57573: 454, // unlock (2x) - 57882: 455, // UnlockTablesStmt (2x) - 57577: 456, // use (2x) - 57886: 457, // UserSpecList (2x) - 57884: 458, // UseStmt (2x) - 57892: 459, // VariableAssignment (2x) - 57894: 460, // WhenClause (2x) - 57670: 461, // AlterTableSpecList (1x) - 57672: 462, // AnyOrAll (1x) - 57365: 463, // at (1x) - 57676: 464, // AuthOption (1x) - 57679: 465, // BitValueType (1x) - 57680: 466, // BlobType (1x) - 57371: 467, // both (1x) - 57689: 468, // ColumnNameListOpt (1x) - 57691: 469, // ColumnOptionList (1x) - 57692: 470, // ColumnOptionListOpt (1x) - 57693: 471, // ColumnPosition (1x) - 57695: 472, // ColumnSetValueList (1x) - 57698: 473, // CompareOp (1x) - 57700: 474, // ConstraintElem (1x) - 57704: 475, // CreateIndexStmtUnique (1x) - 57710: 476, // DatabaseOptionList (1x) - 57711: 477, // DatabaseOptionListOpt (1x) - 57713: 478, // DateAndTimeType (1x) - 57714: 479, // DateArithInterval (1x) - 57415: 480, // ddl (1x) - 57722: 481, // DefaultValueExpr (1x) - 57427: 482, // dual (1x) - 57428: 483, // duplicate (1x) - 57729: 484, // ElseOpt (1x) - 57736: 485, // ExplainableStmt (1x) - 57740: 486, // ExpressionListOpt (1x) - 57744: 487, // FieldAsName (1x) - 57745: 488, // FieldAsNameOpt (1x) - 57747: 489, // FieldList (1x) - 57750: 490, // FixedPointType (1x) - 57752: 491, // FloatingPointType (1x) - 57753: 492, // FromDual (1x) - 57761: 493, // GlobalScope (1x) - 57763: 494, // GroupByClause (1x) - 57764: 495, // HashString (1x) - 57765: 496, // HavingClause (1x) - 57459: 497, // highPriority (1x) - 57778: 498, // IntegerType (1x) - 57780: 499, // IsolationLevel (1x) - 57783: 500, // KeyOrIndex (1x) - 57477: 501, // leading (1x) - 57785: 502, // LikeEscapeOpt (1x) - 57789: 503, // LockType (1x) - 57792: 504, // NationalOpt (1x) - 57797: 505, // NumericType (1x) - 57798: 506, // ObjectType (1x) - 57799: 507, // OnDuplicateKeyUpdate (1x) - 57805: 508, // OptFull (1x) - 57509: 509, // option (1x) - 57810: 510, // OuterOpt (1x) - 57644: 511, // parseExpression (1x) - 57611: 512, // precisionType (1x) - 57814: 513, // PrepareSQL (1x) - 57818: 514, // Priority (1x) - 57820: 515, // PrivElemList (1x) - 57821: 516, // PrivLevel (1x) - 57520: 517, // procedure (1x) - 57823: 518, // QuickOptional (1x) - 57824: 519, // ReferDef (1x) - 57526: 520, // references (1x) - 57825: 521, // RegexpSym (1x) - 57827: 522, // ReplacePriority (1x) - 57538: 523, // schemas (1x) - 57832: 524, // SelectStmtCalcFoundRows (1x) - 57833: 525, // SelectStmtDistinct (1x) - 57834: 526, // SelectStmtFieldList (1x) - 57835: 527, // SelectStmtGroup (1x) - 57837: 528, // SelectStmtOpts (1x) - 57544: 529, // share (1x) - 57840: 530, // ShowLikeOrWhereOpt (1x) - 57843: 531, // ShowTargetFilterable (1x) - 57844: 532, // SignedLiteral (1x) - 57845: 533, // Start (1x) - 57847: 534, // StatementList (1x) - 57850: 535, // StringType (1x) - 57855: 536, // TableAsNameOpt (1x) - 57857: 537, // TableElementList (1x) - 57860: 538, // TableLockList (1x) - 57866: 539, // TableOrTables (1x) - 57869: 540, // TableRefsClause (1x) - 57870: 541, // TextType (1x) - 57562: 542, // trailing (1x) - 57874: 543, // TrimDirection (1x) - 57876: 544, // Type (1x) - 57879: 545, // UnionOpt (1x) - 57888: 546, // UserVariableList (1x) - 57893: 547, // VariableAssignmentList (1x) - 57895: 548, // WhenClauseList (1x) - 57667: 549, // $default (0x) - 57361: 550, // andnot (0x) - 57675: 551, // AssignmentListOpt (0x) - 57374: 552, // byteType (0x) - 57696: 553, // CommaOpt (0x) - 57719: 554, // Default (0x) - 57721: 555, // DefaultOpt (0x) - 57345: 556, // error (0x) - 57660: 557, // insertValues (0x) - 57630: 558, // int16Type (0x) - 57631: 559, // int24Type (0x) - 57632: 560, // int32Type (0x) - 57634: 561, // int8Type (0x) - 57657: 562, // lowerThanCalcFoundRows (0x) - 57666: 563, // lowerThanComma (0x) - 57661: 564, // lowerThanEq (0x) - 57665: 565, // lowerThanEscape (0x) - 57659: 566, // lowerThanInsertValues (0x) - 57663: 567, // lowerThanLeftParen (0x) - 57664: 568, // lowerThanQuick (0x) - 57658: 569, // lowerThanSetKeyword (0x) - 57900: 570, // name (0x) - 57662: 571, // neg (0x) - 57656: 572, // tableRefPriority (0x) - 57636: 573, // uint16Type (0x) - 57637: 574, // uint32Type (0x) - 57639: 575, // uint8Type (0x) - } - - yySymNames = []string{ - "comment", - "autoIncrement", - "$end", - "';'", - "after", - "first", - "charsetKwd", - "')'", - "','", - "keyBlockSize", - "password", - "avgRowLength", - "checksum", - "compression", - "connection", - "delayKeyWrite", - "engine", - "maxRows", - "minRows", - "rowFormat", - "end", - "status", - "tables", - "prepare", - "execute", - "variables", - "yearType", - "columns", - "datetimeType", - "dateType", - "day", - "fields", - "hour", - "isolation", - "microsecond", - "minute", - "month", - "offset", - "quarter", - "second", - "timeType", - "unknown", - "value", - "week", - "admin", - "begin", - "commit", - "compact", - "compressed", - "deallocate", - "do", - "dynamic", - "fixed", - "identified", - "now", - "redundant", - "rollback", - "signed", - "start", - "truncate", - "user", - "bitType", - "booleanType", - "boolType", - "btree", - "collation", - "committed", - "engines", - "full", - "global", - "grants", - "hash", - "level", - "local", - "mode", - "national", - "only", - "repeatable", - "serializable", - "session", - "textType", - "timestampType", - "transaction", - "triggers", - "uncommitted", - "warnings", - "abs", - "addDate", - "any", - "avg", - "calcFoundRows", - "coalesce", - "concat", - "concatWs", - "connectionID", - "count", - "curTime", - "dateAdd", - "dateSub", - "dayname", - "dayofmonth", - "dayofweek", - "dayofyear", - "escape", - "foundRows", - "groupConcat", - "identifier", - "ifNull", - "length", - "locate", - "max", - "min", - "names", - "nullIf", - "pow", - "power", - "quick", - "rand", - "row", - "some", - "subDate", - "substring", - "substringIndex", - "sum", - "trim", - "version", - "weekday", - "weekofyear", - "yearweek", - "not", - "on", - "stringLit", - "left", - "'('", - "'+'", - "'-'", - "defaultKwd", - "null", - "and", - "union", - "andand", - "or", - "oror", - "xor", - "forKwd", - "limit", - "from", - "lock", - "where", - "collate", - "order", - "eq", - "having", - "set", - "join", - "using", - "group", - "cross", - "inner", - "right", - "'}'", - "like", - "as", - "desc", - "when", - "'*'", - "asc", - "elseKwd", - "dayHour", - "dayMicrosecond", - "dayMinute", - "daySecond", - "hourMicrosecond", - "hourMinute", - "hourSecond", - "minuteMicrosecond", - "minuteSecond", - "secondMicrosecond", - "yearMonth", - "then", - "in", - "'<'", - "'>'", - "ge", - "is", - "le", - "neq", - "neqSynonym", - "nulleq", - "between", - "regexpKwd", - "rlike", - "'%'", - "'&'", - "'/'", - "'^'", - "'|'", - "binaryType", - "div", - "lsh", - "mod", - "rsh", - "values", - "primary", - "unique", - "check", - "Identifier", - "NotKeywordToken", - "UnReservedKeyword", - "character", - "intLit", - "'.'", - "ifKwd", - "replace", - "userVar", - "falseKwd", - "trueKwd", - "exists", - "floatLit", - "currentTs", - "database", - "schema", - "sysVar", - "bitLit", - "hexLit", - "underscoreCS", - "'!'", - "'~'", - "caseKwd", - "cast", - "convert", - "curDate", - "currentDate", - "currentTime", - "currentUser", - "extract", - "lower", - "placeholder", - "repeat", - "strcmp", - "sysDate", - "upper", - "ColumnName", - "selectKwd", - "key", - "index", - "SubSelect", - "charType", - "drop", - "foreign", - "read", - "fulltext", - "UserVariable", - "decimalType", - "integerType", - "to", - "varcharType", - "Literal", - "add", - "bigIntType", - "blobType", - "DateArithMultiFormsOpt", - "DateArithOpt", - "doubleType", - "enum", - "float32Type", - "float64Type", - "floatType", - "Function", - "FunctionCallAgg", - "FunctionCallConflict", - "FunctionCallKeyword", - "FunctionCallNonKeyword", - "FunctionNameConflict", - "int64Type", - "intType", - "longblobType", - "longtextType", - "mediumblobType", - "mediumIntType", - "mediumtextType", - "numericType", - "Operand", - "PrimaryExpression", - "realType", - "smallIntType", - "stringType", - "SystemVariable", - "tinyblobType", - "tinyIntType", - "tinytextType", - "uint64Type", - "uintType", - "varbinaryType", - "Variable", - "write", - "PrimaryFactor", - "PredicateExpr", - "Expression", - "Factor", - "logAnd", - "logOr", - "unsigned", - "TableName", - "zerofill", - "all", - "FieldLen", - "SelectStmt", - "EqOpt", - "ExpressionList", - "LengthNum", - "NUM", - "OptFieldLen", - "ignore", - "IndexType", - "UnionSelect", - "UnionClauseList", - "UnionStmt", - "'{'", - "IndexColName", - "into", - "StringName", - "update", - "CharsetKw", - "IndexColNameList", - "JoinTable", - "TableFactor", - "tableKwd", - "TableRef", - "deleteKwd", - "distinct", - "IndexName", - "insert", - "DefaultKwdOpt", - "EscapedTableRef", - "IndexOption", - "OptCharset", - "WhereClause", - "WhereClauseOptional", - "DistinctOpt", - "IndexTypeOpt", - "OptCollate", - "TableRefs", - "create", - "CrossOpt", - "DBName", - "ExpressionOpt", - "JoinType", - "OptBinary", - "RowFormat", - "show", - "ShowDatabaseNameOpt", - "TableNameList", - "TableOption", - "Username", - "alter", - "Assignment", - "ExpressionListList", - "grant", - "IgnoreOptional", - "lowPriority", - "OrderBy", - "OrderByOptional", - "SelectStmtLimit", - "TableAsName", - "AssignmentList", - "by", - "ByItem", - "ColumnDef", - "constraint", - "Constraint", - "ConstraintKeywordOpt", - "DeleteFromStmt", - "FieldOpt", - "FieldOpts", - "FloatOpt", - "IfNotExists", - "InsertIntoStmt", - "outer", - "Precision", - "ReplaceIntoStmt", - "SelectLockOpt", - "TableOptionList", - "TableOptionListOpt", - "TimeUnit", - "TransactionChar", - "UpdateStmt", - "UserSpec", - "ValueSym", - "AdminStmt", - "AlterTableSpec", - "AlterTableStmt", - "AuthString", - "BeginTransactionStmt", - "ByList", - "CastType", - "column", - "ColumnKeywordOpt", - "ColumnNameList", - "ColumnOption", - "ColumnSetValue", - "CommitStmt", - "CreateDatabaseStmt", - "CreateIndexStmt", - "CreateTableStmt", - "CreateUserStmt", - "DatabaseOption", - "databases", - "DatabaseSym", - "DeallocateStmt", - "DeallocateSym", - "delayed", - "describe", - "DoStmt", - "DropDatabaseStmt", - "DropIndexStmt", - "DropTableStmt", - "EmptyStmt", - "ExecuteStmt", - "explain", - "ExplainStmt", - "ExplainSym", - "Field", - "FuncDatetimePrec", - "GrantStmt", - "IfExists", - "InsertValues", - "interval", - "IntoOpt", - "LimitClause", - "localTime", - "localTs", - "LockTablesStmt", - "LowPriorityOptional", - "NotOpt", - "NowSym", - "NumLiteral", - "OptInteger", - "Order", - "PasswordOpt", - "PreparedStmt", - "PrivElem", - "PrivType", - "RollbackStmt", - "SetStmt", - "ShowStmt", - "ShowTableAliasOpt", - "Statement", - "StringList", - "Symbol", - "TableElement", - "TableLock", - "TransactionChars", - "TruncateTableStmt", - "unlock", - "UnlockTablesStmt", - "use", - "UserSpecList", - "UseStmt", - "VariableAssignment", - "WhenClause", - "AlterTableSpecList", - "AnyOrAll", - "at", - "AuthOption", - "BitValueType", - "BlobType", - "both", - "ColumnNameListOpt", - "ColumnOptionList", - "ColumnOptionListOpt", - "ColumnPosition", - "ColumnSetValueList", - "CompareOp", - "ConstraintElem", - "CreateIndexStmtUnique", - "DatabaseOptionList", - "DatabaseOptionListOpt", - "DateAndTimeType", - "DateArithInterval", - "ddl", - "DefaultValueExpr", - "dual", - "duplicate", - "ElseOpt", - "ExplainableStmt", - "ExpressionListOpt", - "FieldAsName", - "FieldAsNameOpt", - "FieldList", - "FixedPointType", - "FloatingPointType", - "FromDual", - "GlobalScope", - "GroupByClause", - "HashString", - "HavingClause", - "highPriority", - "IntegerType", - "IsolationLevel", - "KeyOrIndex", - "leading", - "LikeEscapeOpt", - "LockType", - "NationalOpt", - "NumericType", - "ObjectType", - "OnDuplicateKeyUpdate", - "OptFull", - "option", - "OuterOpt", - "parseExpression", - "precisionType", - "PrepareSQL", - "Priority", - "PrivElemList", - "PrivLevel", - "procedure", - "QuickOptional", - "ReferDef", - "references", - "RegexpSym", - "ReplacePriority", - "schemas", - "SelectStmtCalcFoundRows", - "SelectStmtDistinct", - "SelectStmtFieldList", - "SelectStmtGroup", - "SelectStmtOpts", - "share", - "ShowLikeOrWhereOpt", - "ShowTargetFilterable", - "SignedLiteral", - "Start", - "StatementList", - "StringType", - "TableAsNameOpt", - "TableElementList", - "TableLockList", - "TableOrTables", - "TableRefsClause", - "TextType", - "trailing", - "TrimDirection", - "Type", - "UnionOpt", - "UserVariableList", - "VariableAssignmentList", - "WhenClauseList", - "$default", - "andnot", - "AssignmentListOpt", - "byteType", - "CommaOpt", - "Default", - "DefaultOpt", - "error", - "insertValues", - "int16Type", - "int24Type", - "int32Type", - "int8Type", - "lowerThanCalcFoundRows", - "lowerThanComma", - "lowerThanEq", - "lowerThanEscape", - "lowerThanInsertValues", - "lowerThanLeftParen", - "lowerThanQuick", - "lowerThanSetKeyword", - "name", - "neg", - "tableRefPriority", - "uint16Type", - "uint32Type", - "uint8Type", - } - - yyReductions = map[int]struct{ xsym, components int }{ - 0: {0, 1}, - 1: {533, 1}, - 2: {533, 2}, - 3: {391, 5}, - 4: {390, 1}, - 5: {390, 4}, - 6: {390, 2}, - 7: {390, 3}, - 8: {390, 3}, - 9: {390, 3}, - 10: {390, 4}, - 11: {500, 1}, - 12: {500, 1}, - 13: {397, 0}, - 14: {397, 1}, - 15: {471, 0}, - 16: {471, 1}, - 17: {471, 2}, - 18: {461, 1}, - 19: {461, 3}, - 20: {371, 0}, - 21: {371, 1}, - 22: {371, 2}, - 23: {449, 1}, - 24: {356, 3}, - 25: {365, 1}, - 26: {365, 3}, - 27: {551, 0}, - 28: {551, 1}, - 29: {393, 1}, - 30: {393, 2}, - 31: {368, 3}, - 32: {242, 1}, - 33: {242, 3}, - 34: {242, 5}, - 35: {398, 1}, - 36: {398, 3}, - 37: {468, 0}, - 38: {468, 1}, - 39: {401, 1}, - 40: {399, 2}, - 41: {399, 1}, - 42: {399, 1}, - 43: {399, 2}, - 44: {399, 1}, - 45: {399, 2}, - 46: {399, 2}, - 47: {399, 3}, - 48: {399, 2}, - 49: {399, 4}, - 50: {469, 1}, - 51: {469, 2}, - 52: {470, 0}, - 53: {470, 1}, - 54: {474, 7}, - 55: {474, 7}, - 56: {474, 7}, - 57: {474, 7}, - 58: {474, 7}, - 59: {474, 8}, - 60: {474, 8}, - 61: {474, 7}, - 62: {519, 5}, - 63: {481, 1}, - 64: {481, 3}, - 65: {481, 1}, - 66: {435, 1}, - 67: {435, 1}, - 68: {435, 1}, - 69: {435, 1}, - 70: {532, 1}, - 71: {532, 2}, - 72: {532, 2}, - 73: {436, 1}, - 74: {436, 1}, - 75: {403, 9}, - 76: {475, 0}, - 77: {475, 1}, - 78: {319, 3}, - 79: {324, 0}, - 80: {324, 1}, - 81: {324, 3}, - 82: {402, 5}, - 83: {345, 1}, - 84: {406, 4}, - 85: {406, 4}, - 86: {477, 0}, - 87: {477, 1}, - 88: {476, 1}, - 89: {476, 2}, - 90: {404, 8}, - 91: {554, 2}, - 92: {555, 0}, - 93: {555, 1}, - 94: {333, 0}, - 95: {333, 1}, - 96: {413, 2}, - 97: {372, 9}, - 98: {372, 8}, - 99: {372, 9}, - 100: {408, 1}, - 101: {408, 1}, - 102: {414, 4}, - 103: {415, 6}, - 104: {416, 3}, - 105: {416, 5}, - 106: {539, 1}, - 107: {539, 1}, - 108: {308, 0}, - 109: {308, 1}, - 110: {417, 0}, - 111: {421, 1}, - 112: {421, 1}, - 113: {421, 1}, - 114: {420, 2}, - 115: {420, 3}, - 116: {420, 2}, - 117: {310, 1}, - 118: {311, 1}, - 119: {298, 3}, - 120: {298, 3}, - 121: {298, 3}, - 122: {298, 2}, - 123: {298, 4}, - 124: {298, 4}, - 125: {298, 4}, - 126: {298, 1}, - 127: {301, 1}, - 128: {301, 1}, - 129: {300, 1}, - 130: {300, 1}, - 131: {570, 1}, - 132: {309, 1}, - 133: {309, 3}, - 134: {486, 0}, - 135: {486, 1}, - 136: {299, 4}, - 137: {299, 3}, - 138: {299, 4}, - 139: {299, 1}, - 140: {473, 1}, - 141: {473, 1}, - 142: {473, 1}, - 143: {473, 1}, - 144: {473, 1}, - 145: {473, 1}, - 146: {473, 1}, - 147: {473, 1}, - 148: {462, 1}, - 149: {462, 1}, - 150: {462, 1}, - 151: {297, 6}, - 152: {297, 4}, - 153: {297, 6}, - 154: {297, 5}, - 155: {297, 4}, - 156: {297, 1}, - 157: {521, 1}, - 158: {521, 1}, - 159: {502, 0}, - 160: {502, 2}, - 161: {434, 0}, - 162: {434, 1}, - 163: {422, 1}, - 164: {422, 3}, - 165: {422, 5}, - 166: {422, 2}, - 167: {488, 0}, - 168: {488, 1}, - 169: {487, 1}, - 170: {487, 2}, - 171: {487, 1}, - 172: {487, 2}, - 173: {489, 1}, - 174: {489, 3}, - 175: {494, 3}, - 176: {496, 0}, - 177: {496, 2}, - 178: {425, 0}, - 179: {425, 2}, - 180: {376, 0}, - 181: {376, 3}, - 182: {359, 0}, - 183: {359, 1}, - 184: {331, 0}, - 185: {331, 1}, - 186: {335, 0}, - 187: {335, 3}, - 188: {335, 1}, - 189: {335, 2}, - 190: {314, 2}, - 191: {314, 2}, - 192: {340, 0}, - 193: {340, 1}, - 194: {206, 1}, - 195: {206, 1}, - 196: {206, 1}, - 197: {208, 1}, - 198: {208, 1}, - 199: {208, 1}, - 200: {208, 1}, - 201: {208, 1}, - 202: {208, 1}, - 203: {208, 1}, - 204: {208, 1}, - 205: {208, 1}, - 206: {208, 1}, - 207: {208, 1}, - 208: {208, 1}, - 209: {208, 1}, - 210: {208, 1}, - 211: {208, 1}, - 212: {208, 1}, - 213: {208, 1}, - 214: {208, 1}, - 215: {208, 1}, - 216: {208, 1}, - 217: {208, 1}, - 218: {208, 1}, - 219: {208, 1}, - 220: {208, 1}, - 221: {208, 1}, - 222: {208, 1}, - 223: {208, 1}, - 224: {208, 1}, - 225: {208, 1}, - 226: {208, 1}, - 227: {208, 1}, - 228: {208, 1}, - 229: {208, 1}, - 230: {208, 1}, - 231: {208, 1}, - 232: {208, 1}, - 233: {208, 1}, - 234: {208, 1}, - 235: {208, 1}, - 236: {208, 1}, - 237: {208, 1}, - 238: {208, 1}, - 239: {208, 1}, - 240: {208, 1}, - 241: {208, 1}, - 242: {208, 1}, - 243: {208, 1}, - 244: {208, 1}, - 245: {208, 1}, - 246: {208, 1}, - 247: {208, 1}, - 248: {208, 1}, - 249: {208, 1}, - 250: {208, 1}, - 251: {208, 1}, - 252: {208, 1}, - 253: {208, 1}, - 254: {208, 1}, - 255: {208, 1}, - 256: {208, 1}, - 257: {208, 1}, - 258: {208, 1}, - 259: {208, 1}, - 260: {208, 1}, - 261: {208, 1}, - 262: {208, 1}, - 263: {208, 1}, - 264: {208, 1}, - 265: {208, 1}, - 266: {208, 1}, - 267: {208, 1}, - 268: {208, 1}, - 269: {208, 1}, - 270: {208, 1}, - 271: {208, 1}, - 272: {208, 1}, - 273: {208, 1}, - 274: {208, 1}, - 275: {208, 1}, - 276: {208, 1}, - 277: {208, 1}, - 278: {207, 1}, - 279: {207, 1}, - 280: {207, 1}, - 281: {207, 1}, - 282: {207, 1}, - 283: {207, 1}, - 284: {207, 1}, - 285: {207, 1}, - 286: {207, 1}, - 287: {207, 1}, - 288: {207, 1}, - 289: {207, 1}, - 290: {207, 1}, - 291: {207, 1}, - 292: {207, 1}, - 293: {207, 1}, - 294: {207, 1}, - 295: {207, 1}, - 296: {207, 1}, - 297: {207, 1}, - 298: {207, 1}, - 299: {207, 1}, - 300: {207, 1}, - 301: {207, 1}, - 302: {207, 1}, - 303: {207, 1}, - 304: {207, 1}, - 305: {207, 1}, - 306: {207, 1}, - 307: {207, 1}, - 308: {207, 1}, - 309: {207, 1}, - 310: {207, 1}, - 311: {207, 1}, - 312: {207, 1}, - 313: {207, 1}, - 314: {207, 1}, - 315: {207, 1}, - 316: {207, 1}, - 317: {207, 1}, - 318: {207, 1}, - 319: {207, 1}, - 320: {207, 1}, - 321: {377, 7}, - 322: {428, 0}, - 323: {428, 1}, - 324: {426, 5}, - 325: {426, 4}, - 326: {426, 4}, - 327: {426, 2}, - 328: {426, 1}, - 329: {426, 1}, - 330: {426, 2}, - 331: {388, 1}, - 332: {388, 1}, - 333: {357, 2}, - 334: {357, 4}, - 335: {357, 3}, - 336: {357, 5}, - 337: {400, 3}, - 338: {472, 0}, - 339: {472, 1}, - 340: {472, 3}, - 341: {507, 0}, - 342: {507, 5}, - 343: {380, 5}, - 344: {522, 0}, - 345: {522, 1}, - 346: {522, 1}, - 347: {257, 1}, - 348: {257, 1}, - 349: {257, 1}, - 350: {257, 1}, - 351: {257, 1}, - 352: {257, 1}, - 353: {257, 2}, - 354: {257, 1}, - 355: {257, 1}, - 356: {282, 1}, - 357: {282, 1}, - 358: {282, 3}, - 359: {282, 1}, - 360: {282, 4}, - 361: {282, 1}, - 362: {282, 1}, - 363: {282, 6}, - 364: {282, 5}, - 365: {282, 2}, - 366: {361, 3}, - 367: {394, 1}, - 368: {394, 3}, - 369: {367, 2}, - 370: {438, 0}, - 371: {438, 1}, - 372: {438, 1}, - 373: {362, 0}, - 374: {362, 1}, - 375: {283, 1}, - 376: {283, 1}, - 377: {283, 1}, - 378: {283, 2}, - 379: {283, 2}, - 380: {283, 2}, - 381: {283, 2}, - 382: {283, 2}, - 383: {283, 3}, - 384: {268, 1}, - 385: {268, 1}, - 386: {268, 1}, - 387: {268, 1}, - 388: {273, 1}, - 389: {273, 1}, - 390: {273, 1}, - 391: {273, 1}, - 392: {273, 1}, - 393: {273, 1}, - 394: {273, 1}, - 395: {273, 1}, - 396: {270, 4}, - 397: {270, 1}, - 398: {270, 1}, - 399: {339, 0}, - 400: {339, 1}, - 401: {339, 1}, - 402: {339, 2}, - 403: {271, 6}, - 404: {271, 5}, - 405: {271, 6}, - 406: {271, 6}, - 407: {271, 4}, - 408: {271, 3}, - 409: {271, 4}, - 410: {271, 4}, - 411: {271, 4}, - 412: {272, 4}, - 413: {272, 3}, - 414: {272, 4}, - 415: {272, 2}, - 416: {272, 2}, - 417: {272, 4}, - 418: {272, 4}, - 419: {272, 4}, - 420: {272, 4}, - 421: {272, 4}, - 422: {272, 4}, - 423: {272, 4}, - 424: {272, 4}, - 425: {272, 8}, - 426: {272, 6}, - 427: {272, 6}, - 428: {272, 3}, - 429: {272, 4}, - 430: {272, 4}, - 431: {272, 4}, - 432: {272, 6}, - 433: {272, 8}, - 434: {272, 4}, - 435: {272, 4}, - 436: {272, 4}, - 437: {272, 4}, - 438: {272, 4}, - 439: {272, 4}, - 440: {272, 6}, - 441: {272, 6}, - 442: {272, 4}, - 443: {272, 8}, - 444: {272, 4}, - 445: {272, 6}, - 446: {272, 6}, - 447: {272, 6}, - 448: {272, 8}, - 449: {272, 8}, - 450: {272, 8}, - 451: {272, 4}, - 452: {272, 4}, - 453: {272, 6}, - 454: {272, 6}, - 455: {272, 7}, - 456: {272, 4}, - 457: {272, 4}, - 458: {272, 4}, - 459: {272, 4}, - 460: {272, 3}, - 461: {262, 1}, - 462: {262, 1}, - 463: {261, 1}, - 464: {261, 1}, - 465: {479, 1}, - 466: {479, 3}, - 467: {543, 1}, - 468: {543, 1}, - 469: {543, 1}, - 470: {269, 5}, - 471: {269, 5}, - 472: {269, 5}, - 473: {269, 5}, - 474: {269, 5}, - 475: {269, 5}, - 476: {269, 5}, - 477: {423, 0}, - 478: {423, 2}, - 479: {423, 3}, - 480: {384, 1}, - 481: {384, 1}, - 482: {384, 1}, - 483: {384, 1}, - 484: {384, 1}, - 485: {384, 1}, - 486: {384, 1}, - 487: {384, 1}, - 488: {384, 1}, - 489: {384, 1}, - 490: {384, 1}, - 491: {384, 1}, - 492: {384, 1}, - 493: {384, 1}, - 494: {384, 1}, - 495: {384, 1}, - 496: {384, 1}, - 497: {384, 1}, - 498: {384, 1}, - 499: {384, 1}, - 500: {346, 0}, - 501: {346, 1}, - 502: {548, 1}, - 503: {548, 2}, - 504: {460, 4}, - 505: {484, 0}, - 506: {484, 2}, - 507: {395, 2}, - 508: {395, 4}, - 509: {395, 1}, - 510: {395, 2}, - 511: {395, 2}, - 512: {395, 2}, - 513: {395, 2}, - 514: {395, 2}, - 515: {296, 3}, - 516: {296, 3}, - 517: {296, 3}, - 518: {296, 3}, - 519: {296, 3}, - 520: {296, 3}, - 521: {296, 3}, - 522: {296, 3}, - 523: {296, 3}, - 524: {296, 3}, - 525: {296, 3}, - 526: {296, 3}, - 527: {296, 1}, - 528: {514, 0}, - 529: {514, 1}, - 530: {514, 1}, - 531: {514, 1}, - 532: {433, 0}, - 533: {433, 1}, - 534: {303, 1}, - 535: {303, 3}, - 536: {352, 1}, - 537: {352, 3}, - 538: {518, 0}, - 539: {518, 1}, - 540: {440, 4}, - 541: {513, 1}, - 542: {513, 1}, - 543: {418, 2}, - 544: {418, 4}, - 545: {546, 1}, - 546: {546, 3}, - 547: {409, 3}, - 548: {410, 1}, - 549: {410, 1}, - 550: {443, 1}, - 551: {307, 5}, - 552: {307, 7}, - 553: {307, 11}, - 554: {492, 2}, - 555: {540, 1}, - 556: {342, 1}, - 557: {342, 3}, - 558: {334, 1}, - 559: {334, 4}, - 560: {328, 1}, - 561: {328, 1}, - 562: {326, 2}, - 563: {326, 4}, - 564: {326, 4}, - 565: {326, 3}, - 566: {536, 0}, - 567: {536, 1}, - 568: {364, 1}, - 569: {364, 2}, - 570: {325, 3}, - 571: {325, 5}, - 572: {325, 7}, - 573: {347, 1}, - 574: {347, 1}, - 575: {510, 0}, - 576: {510, 1}, - 577: {344, 1}, - 578: {344, 2}, - 579: {344, 2}, - 580: {429, 0}, - 581: {429, 2}, - 582: {363, 0}, - 583: {363, 2}, - 584: {363, 4}, - 585: {363, 4}, - 586: {525, 0}, - 587: {525, 1}, - 588: {525, 1}, - 589: {528, 2}, - 590: {524, 0}, - 591: {524, 1}, - 592: {526, 1}, - 593: {527, 0}, - 594: {527, 1}, - 595: {246, 3}, - 596: {246, 3}, - 597: {381, 0}, - 598: {381, 2}, - 599: {381, 4}, - 600: {317, 4}, - 601: {317, 8}, - 602: {316, 1}, - 603: {316, 4}, - 604: {315, 1}, - 605: {315, 3}, - 606: {545, 0}, - 607: {545, 1}, - 608: {545, 1}, - 609: {444, 2}, - 610: {444, 3}, - 611: {444, 5}, - 612: {444, 3}, - 613: {444, 4}, - 614: {444, 6}, - 615: {444, 4}, - 616: {444, 4}, - 617: {452, 1}, - 618: {452, 3}, - 619: {385, 3}, - 620: {385, 2}, - 621: {385, 2}, - 622: {499, 2}, - 623: {499, 2}, - 624: {499, 2}, - 625: {499, 1}, - 626: {459, 3}, - 627: {459, 4}, - 628: {459, 4}, - 629: {459, 4}, - 630: {459, 3}, - 631: {459, 3}, - 632: {547, 0}, - 633: {547, 1}, - 634: {547, 3}, - 635: {294, 1}, - 636: {294, 1}, - 637: {287, 1}, - 638: {252, 1}, - 639: {354, 3}, - 640: {439, 1}, - 641: {439, 4}, - 642: {392, 1}, - 643: {389, 3}, - 644: {389, 4}, - 645: {445, 3}, - 646: {445, 4}, - 647: {445, 2}, - 648: {445, 4}, - 649: {445, 4}, - 650: {531, 1}, - 651: {531, 1}, - 652: {531, 1}, - 653: {531, 2}, - 654: {531, 3}, - 655: {531, 3}, - 656: {531, 4}, - 657: {531, 4}, - 658: {531, 1}, - 659: {531, 2}, - 660: {531, 2}, - 661: {531, 1}, - 662: {531, 2}, - 663: {531, 2}, - 664: {530, 0}, - 665: {530, 2}, - 666: {530, 2}, - 667: {493, 0}, - 668: {493, 1}, - 669: {493, 1}, - 670: {508, 0}, - 671: {508, 1}, - 672: {351, 0}, - 673: {351, 2}, - 674: {351, 2}, - 675: {446, 2}, - 676: {446, 2}, - 677: {447, 1}, - 678: {447, 1}, - 679: {447, 1}, - 680: {447, 1}, - 681: {447, 1}, - 682: {447, 1}, - 683: {447, 1}, - 684: {447, 1}, - 685: {447, 1}, - 686: {447, 1}, - 687: {447, 1}, - 688: {447, 1}, - 689: {447, 1}, - 690: {447, 1}, - 691: {447, 1}, - 692: {447, 1}, - 693: {447, 1}, - 694: {447, 1}, - 695: {447, 1}, - 696: {447, 1}, - 697: {447, 1}, - 698: {447, 1}, - 699: {447, 1}, - 700: {447, 1}, - 701: {447, 1}, - 702: {447, 1}, - 703: {447, 1}, - 704: {447, 1}, - 705: {447, 1}, - 706: {447, 1}, - 707: {447, 1}, - 708: {447, 1}, - 709: {485, 1}, - 710: {485, 1}, - 711: {485, 1}, - 712: {485, 1}, - 713: {485, 1}, - 714: {534, 1}, - 715: {534, 3}, - 716: {370, 2}, - 717: {450, 1}, - 718: {450, 1}, - 719: {450, 4}, - 720: {537, 1}, - 721: {537, 3}, - 722: {353, 2}, - 723: {353, 3}, - 724: {353, 4}, - 725: {353, 4}, - 726: {353, 3}, - 727: {353, 3}, - 728: {353, 3}, - 729: {353, 3}, - 730: {353, 3}, - 731: {353, 3}, - 732: {353, 3}, - 733: {353, 3}, - 734: {353, 3}, - 735: {353, 3}, - 736: {353, 3}, - 737: {353, 1}, - 738: {383, 0}, - 739: {383, 1}, - 740: {382, 1}, - 741: {382, 2}, - 742: {382, 3}, - 743: {453, 3}, - 744: {349, 3}, - 745: {349, 3}, - 746: {349, 3}, - 747: {349, 3}, - 748: {349, 3}, - 749: {349, 3}, - 750: {544, 1}, - 751: {544, 1}, - 752: {544, 1}, - 753: {544, 1}, - 754: {544, 1}, - 755: {544, 1}, - 756: {544, 1}, - 757: {544, 1}, - 758: {544, 1}, - 759: {505, 3}, - 760: {505, 3}, - 761: {505, 3}, - 762: {505, 2}, - 763: {498, 1}, - 764: {498, 1}, - 765: {498, 1}, - 766: {498, 1}, - 767: {498, 1}, - 768: {498, 1}, - 769: {498, 1}, - 770: {498, 1}, - 771: {437, 0}, - 772: {437, 1}, - 773: {490, 1}, - 774: {490, 1}, - 775: {491, 1}, - 776: {491, 1}, - 777: {491, 1}, - 778: {491, 2}, - 779: {465, 1}, - 780: {535, 6}, - 781: {535, 5}, - 782: {535, 6}, - 783: {535, 2}, - 784: {535, 2}, - 785: {535, 1}, - 786: {535, 4}, - 787: {535, 6}, - 788: {535, 6}, - 789: {504, 0}, - 790: {504, 1}, - 791: {466, 1}, - 792: {466, 2}, - 793: {466, 1}, - 794: {466, 1}, - 795: {541, 1}, - 796: {541, 2}, - 797: {541, 1}, - 798: {541, 1}, - 799: {478, 1}, - 800: {478, 2}, - 801: {478, 2}, - 802: {478, 2}, - 803: {478, 2}, - 804: {306, 3}, - 805: {312, 0}, - 806: {312, 1}, - 807: {373, 1}, - 808: {373, 1}, - 809: {374, 0}, - 810: {374, 2}, - 811: {375, 0}, - 812: {375, 1}, - 813: {375, 1}, - 814: {379, 5}, - 815: {348, 0}, - 816: {348, 1}, - 817: {336, 0}, - 818: {336, 2}, - 819: {323, 2}, - 820: {323, 1}, - 821: {341, 0}, - 822: {341, 2}, - 823: {448, 1}, - 824: {448, 3}, - 825: {321, 1}, - 826: {321, 1}, - 827: {386, 9}, - 828: {386, 7}, - 829: {458, 2}, - 830: {337, 2}, - 831: {338, 0}, - 832: {338, 1}, - 833: {553, 0}, - 834: {553, 1}, - 835: {405, 4}, - 836: {387, 2}, - 837: {457, 1}, - 838: {457, 3}, - 839: {464, 0}, - 840: {464, 3}, - 841: {464, 4}, - 842: {495, 1}, - 843: {424, 7}, - 844: {441, 1}, - 845: {441, 4}, - 846: {515, 1}, - 847: {515, 3}, - 848: {442, 1}, - 849: {442, 1}, - 850: {442, 1}, - 851: {442, 2}, - 852: {442, 1}, - 853: {442, 1}, - 854: {442, 1}, - 855: {442, 1}, - 856: {442, 1}, - 857: {442, 1}, - 858: {442, 2}, - 859: {442, 1}, - 860: {442, 2}, - 861: {506, 0}, - 862: {506, 1}, - 863: {516, 1}, - 864: {516, 3}, - 865: {516, 3}, - 866: {516, 3}, - 867: {516, 1}, - 868: {455, 2}, - 869: {432, 3}, - 870: {451, 2}, - 871: {503, 1}, - 872: {503, 2}, - 873: {503, 1}, - 874: {538, 1}, - 875: {538, 3}, - } - - yyXErrors = map[yyXError]string{ - yyXError{1, -1}: "expected $end", - yyXError{392, -1}: "expected '('", - yyXError{393, -1}: "expected '('", - yyXError{394, -1}: "expected '('", - yyXError{395, -1}: "expected '('", - yyXError{396, -1}: "expected '('", - yyXError{399, -1}: "expected '('", - yyXError{400, -1}: "expected '('", - yyXError{402, -1}: "expected '('", - yyXError{403, -1}: "expected '('", - yyXError{404, -1}: "expected '('", - yyXError{407, -1}: "expected '('", - yyXError{408, -1}: "expected '('", - yyXError{409, -1}: "expected '('", - yyXError{410, -1}: "expected '('", - yyXError{411, -1}: "expected '('", - yyXError{412, -1}: "expected '('", - yyXError{413, -1}: "expected '('", - yyXError{414, -1}: "expected '('", - yyXError{834, -1}: "expected '('", - yyXError{999, -1}: "expected '('", - yyXError{1105, -1}: "expected '('", - yyXError{1106, -1}: "expected '('", - yyXError{1201, -1}: "expected '('", - yyXError{1209, -1}: "expected '('", - yyXError{1222, -1}: "expected '('", - yyXError{1235, -1}: "expected '('", - yyXError{1243, -1}: "expected '('", - yyXError{1245, -1}: "expected '('", - yyXError{1260, -1}: "expected '('", - yyXError{1265, -1}: "expected '('", - yyXError{1271, -1}: "expected '('", - yyXError{1277, -1}: "expected '('", - yyXError{1283, -1}: "expected '('", - yyXError{1289, -1}: "expected '('", - yyXError{1390, -1}: "expected '('", - yyXError{1391, -1}: "expected '('", - yyXError{1465, -1}: "expected '('", - yyXError{1512, -1}: "expected '('", - yyXError{287, -1}: "expected ')'", - yyXError{434, -1}: "expected ')'", - yyXError{480, -1}: "expected ')'", - yyXError{483, -1}: "expected ')'", - yyXError{490, -1}: "expected ')'", - yyXError{498, -1}: "expected ')'", - yyXError{501, -1}: "expected ')'", - yyXError{507, -1}: "expected ')'", - yyXError{510, -1}: "expected ')'", - yyXError{516, -1}: "expected ')'", - yyXError{517, -1}: "expected ')'", - yyXError{518, -1}: "expected ')'", - yyXError{519, -1}: "expected ')'", - yyXError{524, -1}: "expected ')'", - yyXError{526, -1}: "expected ')'", - yyXError{532, -1}: "expected ')'", - yyXError{534, -1}: "expected ')'", - yyXError{538, -1}: "expected ')'", - yyXError{546, -1}: "expected ')'", - yyXError{548, -1}: "expected ')'", - yyXError{565, -1}: "expected ')'", - yyXError{570, -1}: "expected ')'", - yyXError{584, -1}: "expected ')'", - yyXError{586, -1}: "expected ')'", - yyXError{591, -1}: "expected ')'", - yyXError{660, -1}: "expected ')'", - yyXError{673, -1}: "expected ')'", - yyXError{716, -1}: "expected ')'", - yyXError{736, -1}: "expected ')'", - yyXError{740, -1}: "expected ')'", - yyXError{742, -1}: "expected ')'", - yyXError{761, -1}: "expected ')'", - yyXError{1001, -1}: "expected ')'", - yyXError{1017, -1}: "expected ')'", - yyXError{1125, -1}: "expected ')'", - yyXError{1489, -1}: "expected ')'", - yyXError{250, -1}: "expected '*'", - yyXError{854, -1}: "expected =", - yyXError{953, -1}: "expected =", - yyXError{954, -1}: "expected =", - yyXError{955, -1}: "expected =", - yyXError{968, -1}: "expected =", - yyXError{971, -1}: "expected =", - yyXError{995, -1}: "expected =", - yyXError{1007, -1}: "expected =", - yyXError{1109, -1}: "expected =", - yyXError{1301, -1}: "expected =", - yyXError{1252, -1}: "expected = or empty or Field length num(uint64) or one of [=, integer literal]", - yyXError{1303, -1}: "expected = or empty or Field length num(uint64) or one of [=, integer literal]", - yyXError{1305, -1}: "expected = or empty or Field length num(uint64) or one of [=, integer literal]", - yyXError{1308, -1}: "expected = or empty or Field length num(uint64) or one of [=, integer literal]", - yyXError{1309, -1}: "expected = or empty or Field length num(uint64) or one of [=, integer literal]", - yyXError{1310, -1}: "expected = or empty or Field length num(uint64) or one of [=, integer literal]", - yyXError{1311, -1}: "expected = or empty or Field length num(uint64) or one of [=, integer literal]", - yyXError{1307, -1}: "expected = or empty or identifier or unreserved keyword or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1315, -1}: "expected = or empty or one of [=, COMPACT, COMPRESSED, DEFAULT, DYNAMIC, FIXED, REDUNDANT]", - yyXError{1302, -1}: "expected = or empty or one of [=, string literal]", - yyXError{1304, -1}: "expected = or empty or one of [=, string literal]", - yyXError{1306, -1}: "expected = or empty or one of [=, string literal]", - yyXError{1348, -1}: "expected = or empty or string literal or identifier or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1349, -1}: "expected = or empty or string literal or identifier or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1503, -1}: "expected = or empty or string literal or identifier or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1504, -1}: "expected = or empty or string literal or identifier or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{253, -1}: "expected AT", - yyXError{1519, -1}: "expected Alter table specification list or one of [$end, ',', ';', ADD, AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, DROP, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1544, -1}: "expected Alter table specification or one of [$end, ',', ';', ADD, AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, DROP, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{821, -1}: "expected Any or All for subquery or Predicate expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{260, -1}: "expected BY", - yyXError{862, -1}: "expected BY", - yyXError{1046, -1}: "expected BY", - yyXError{872, -1}: "expected BY item or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{868, -1}: "expected BY list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1061, -1}: "expected BY list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1497, -1}: "expected CREATE Database specification list opt or one of [$end, ';', CHARACTER, CHARSET, COLLATE, DEFAULT]", - yyXError{1500, -1}: "expected CREATE Database specification or one of [$end, ';', CHARACTER, CHARSET, COLLATE, DEFAULT]", - yyXError{8, -1}: "expected CREATE INDEX optional UNIQUE clause or DATABASE or SCHEMA or one of [DATABASE, INDEX, SCHEMA, TABLE, UNIQUE, USER]", - yyXError{1473, -1}: "expected CURRENT_TIMESTAMP/LOCALTIME/LOCALTIMESTAMP/NOW or one of [CURRENT_TIMESTAMP, LOCALTIME, LOCALTIMESTAMP, NOW]", - yyXError{506, -1}: "expected Cast function target type or one of [BINARY, CHAR, DATE, DATETIME, DECIMAL, SIGNED, TIME, UNSIGNED]", - yyXError{564, -1}: "expected Cast function target type or one of [BINARY, CHAR, DATE, DATETIME, DECIMAL, SIGNED, TIME, UNSIGNED]", - yyXError{1523, -1}: "expected Column keyword or empty or column name or {KEY|INDEX} or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMN, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOREIGN, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INDEX, ISOLATION, KEY, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1522, -1}: "expected Column keyword or empty or table column definition or table constraint or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMN, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONSTRAINT, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOREIGN, FOUND_ROWS, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INDEX, ISOLATION, KEY, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNIQUE, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1539, -1}: "expected Column position [First|After ColumnName] or one of [$end, ',', ';', AFTER, FIRST]", - yyXError{313, -1}: "expected Compare opcode or one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{1203, -1}: "expected Constraint Symbol or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOREIGN, FOUND_ROWS, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INDEX, ISOLATION, KEY, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNIQUE, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1532, -1}: "expected Constraint Symbol or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{842, -1}: "expected Cross join option or join type or one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{284, -1}: "expected Cross join option or join type or one of [$end, ')', ',', ';', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{277, -1}: "expected Cross join option or join type or one of [',', CROSS, INNER, JOIN, LEFT, RIGHT, SET]", - yyXError{851, -1}: "expected Cross join option or join type or one of ['}', CROSS, INNER, JOIN, LEFT, RIGHT]", - yyXError{309, -1}: "expected Cross join option or join type or one of [CROSS, INNER, JOIN, LEFT, ON, RIGHT]", - yyXError{11, -1}: "expected DATABASE or SCHEMA or TableOrTables or one of [DATABASE, INDEX, PREPARE, SCHEMA, TABLE, TABLES]", - yyXError{222, -1}: "expected DATABASES", - yyXError{937, -1}: "expected DDL", - yyXError{1140, -1}: "expected DUPLICATE", - yyXError{1155, -1}: "expected Database Name or If Exists or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1192, -1}: "expected Database Name or If Not Exists or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{65, -1}: "expected Database Name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{905, -1}: "expected Database Name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{906, -1}: "expected Database Name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1170, -1}: "expected Database Name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1496, -1}: "expected Database Name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{478, -1}: "expected Date arith interval part or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, INTERVAL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1462, -1}: "expected DefaultValueExpr(Now or Signed Literal) or one of ['+', '-', CURRENT_TIMESTAMP, LOCALTIME, LOCALTIMESTAMP, NOW, NULL, UNDERSCORE_CHARSET, bit literal, false, floating-point literal, hexadecimal literal, integer literal, string literal, true]", - yyXError{733, -1}: "expected Distinct option or expression list or one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DISTINCT, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{712, -1}: "expected Distinct option or expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DISTINCT, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{772, -1}: "expected Distinct option or expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DISTINCT, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{628, -1}: "expected Distinct option or expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DISTINCT, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{684, -1}: "expected Distinct option or expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DISTINCT, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{691, -1}: "expected Distinct option or expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DISTINCT, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{557, -1}: "expected END", - yyXError{1161, -1}: "expected EXISTS", - yyXError{1165, -1}: "expected EXISTS", - yyXError{1198, -1}: "expected EXISTS", - yyXError{1038, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or FromDual or SELECT statement optional LIMIT clause or one of [$end, ')', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1042, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or HAVING clause or Optinal WHERE clause or Optional ORDER BY clause optional or SELECT statement optional GROUP BY clause or SELECT statement optional LIMIT clause or one of [$end, ')', ';', FOR, GROUP, HAVING, LIMIT, LOCK, ON, ORDER, UNION, WHERE]", - yyXError{1045, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or HAVING clause or Optional ORDER BY clause optional or SELECT statement optional GROUP BY clause or SELECT statement optional LIMIT clause or one of [$end, ')', ';', FOR, GROUP, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{1047, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or HAVING clause or Optional ORDER BY clause optional or SELECT statement optional LIMIT clause or one of [$end, ')', ';', FOR, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{1040, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or Optinal WHERE clause or SELECT statement optional LIMIT clause or one of [$end, ')', ';', FOR, LIMIT, LOCK, ON, UNION, WHERE]", - yyXError{1050, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or Optional ORDER BY clause optional or SELECT statement optional LIMIT clause or one of [$end, ')', ';', FOR, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{1051, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or SELECT statement optional LIMIT clause or one of [$end, ')', ';', FOR, LIMIT, LOCK, ON, UNION]", - yyXError{1063, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or SELECT statement optional LIMIT clause or one of [$end, ')', ';', FOR, LIMIT, LOCK, ON, UNION]", - yyXError{1039, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or one of [$end, ')', ';', FOR, LOCK, ON, UNION]", - yyXError{1052, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or one of [$end, ')', ';', FOR, LOCK, ON, UNION]", - yyXError{1064, -1}: "expected FOR UPDATE or LOCK IN SHARE MODE, or one of [$end, ')', ';', FOR, LOCK, ON, UNION]", - yyXError{452, -1}: "expected FROM", - yyXError{888, -1}: "expected FROM", - yyXError{1089, -1}: "expected FROM", - yyXError{1034, -1}: "expected Field alias name opt or logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, XOR, YEAR, YEARWEEK, identifier, string literal, ||]", - yyXError{520, -1}: "expected Field length num(uint64) or integer literal", - yyXError{527, -1}: "expected Field length num(uint64) or integer literal", - yyXError{531, -1}: "expected Field length num(uint64) or integer literal", - yyXError{865, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1020, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1023, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1024, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1257, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1326, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1328, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1330, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1332, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1338, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1342, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1346, -1}: "expected Field length num(uint64) or integer literal", - yyXError{1387, -1}: "expected Field length or '('", - yyXError{1433, -1}: "expected Field length or '('", - yyXError{1432, -1}: "expected Field length or Optional BINARY or Optional Character setting or Optional Collate setting or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1367, -1}: "expected Field length or empty or Field type definition option list or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1226, -1}: "expected Field length or empty or ORDER BY clause optional collation specification or one of ['(', ')', ',', ASC, DESC]", - yyXError{509, -1}: "expected Field length or empty or Optional BINARY or Optional Character setting or one of ['(', ')', BINARY, CHARACTER, CHARSET]", - yyXError{1398, -1}: "expected Field length or empty or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1370, -1}: "expected Field length or empty or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1386, -1}: "expected Field length or empty or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1394, -1}: "expected Field length or empty or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1402, -1}: "expected Field length or empty or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1403, -1}: "expected Field length or empty or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1404, -1}: "expected Field length or empty or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1405, -1}: "expected Field length or empty or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{508, -1}: "expected Field length or empty or one of ['(', ')']", - yyXError{511, -1}: "expected Field length or empty or one of ['(', ')']", - yyXError{513, -1}: "expected Field length or empty or one of ['(', ')']", - yyXError{1368, -1}: "expected Field type definition option list or Floating-point type option or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1369, -1}: "expected Field type definition option list or Floating-point type option or one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1447, -1}: "expected Field type definition option list or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1452, -1}: "expected Field type definition option list or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1454, -1}: "expected Field type definition option list or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1448, -1}: "expected Field type definition option or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1453, -1}: "expected Field type definition option or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1455, -1}: "expected Field type definition option or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{512, -1}: "expected Floating-point type option or one of ['(', ')']", - yyXError{405, -1}: "expected Function datetime precision or one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{406, -1}: "expected Function datetime precision or one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{239, -1}: "expected Grant statement object type or Privilege scope or one of ['*', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLE, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{264, -1}: "expected Hashed string or string literal", - yyXError{16, -1}: "expected IGNORE or empty or INTO or EmptyString or Table name or insert statement priority or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAYED, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HIGH_PRIORITY, HOUR, IDENTIFIED, IFNULL, IGNORE, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, LOW_PRIORITY, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1131, -1}: "expected IGNORE or empty or INTO or EmptyString or Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{10, -1}: "expected IGNORE or empty or LOW_PRIORITY or empty or QUICK or empty or Table name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, LOW_PRIORITY, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{64, -1}: "expected IGNORE or empty or LOW_PRIORITY or empty or table reference or table references or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, LOW_PRIORITY, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1172, -1}: "expected IGNORE or empty or QUICK or empty or Table name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1173, -1}: "expected IGNORE or empty or Table name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{4, -1}: "expected IGNORE or empty or one of [IGNORE, TABLE]", - yyXError{272, -1}: "expected IGNORE or empty or table reference or table references or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1055, -1}: "expected IN", - yyXError{1190, -1}: "expected INDEX", - yyXError{1191, -1}: "expected INDEX", - yyXError{487, -1}: "expected INTERVAL", - yyXError{1094, -1}: "expected INTO or EmptyString or Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1135, -1}: "expected INTO or EmptyString or Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{17, -1}: "expected INTO or EmptyString or Table name or replace statement priority or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAYED, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, LOW_PRIORITY, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1156, -1}: "expected If Exists or identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1193, -1}: "expected If Not Exists or Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1194, -1}: "expected If Not Exists or Username and auth option list or one of [IF, string literal]", - yyXError{1250, -1}: "expected Index Option or one of [$end, ')', ',', ';', COMMENT, KEY_BLOCK_SIZE, USING]", - yyXError{1263, -1}: "expected Index Option or one of [$end, ')', ',', ';', COMMENT, KEY_BLOCK_SIZE, USING]", - yyXError{1268, -1}: "expected Index Option or one of [$end, ')', ',', ';', COMMENT, KEY_BLOCK_SIZE, USING]", - yyXError{1274, -1}: "expected Index Option or one of [$end, ')', ',', ';', COMMENT, KEY_BLOCK_SIZE, USING]", - yyXError{1280, -1}: "expected Index Option or one of [$end, ')', ',', ';', COMMENT, KEY_BLOCK_SIZE, USING]", - yyXError{1286, -1}: "expected Index Option or one of [$end, ')', ',', ';', COMMENT, KEY_BLOCK_SIZE, USING]", - yyXError{1292, -1}: "expected Index Option or one of [$end, ')', ',', ';', COMMENT, KEY_BLOCK_SIZE, USING]", - yyXError{1231, -1}: "expected Index column name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{981, -1}: "expected Isolation level or one of [READ, REPEATABLE, SERIALIZABLE]", - yyXError{302, -1}: "expected JOIN", - yyXError{303, -1}: "expected JOIN", - yyXError{306, -1}: "expected JOIN", - yyXError{307, -1}: "expected JOIN", - yyXError{1141, -1}: "expected KEY", - yyXError{1214, -1}: "expected KEY", - yyXError{1215, -1}: "expected KEY", - yyXError{1219, -1}: "expected KEY", - yyXError{1460, -1}: "expected KEY", - yyXError{1526, -1}: "expected KEY", - yyXError{1528, -1}: "expected KEY", - yyXError{977, -1}: "expected LEVEL", - yyXError{1181, -1}: "expected LIMIT clause or Optinal WHERE clause or Optional ORDER BY clause optional or one of [$end, ',', ';', LIMIT, ORDER, USING, WHERE]", - yyXError{856, -1}: "expected LIMIT clause or Optinal WHERE clause or Optional ORDER BY clause optional or one of [$end, ',', ';', LIMIT, ORDER, WHERE]", - yyXError{858, -1}: "expected LIMIT clause or Optional ORDER BY clause optional or one of [$end, ';', LIMIT, ORDER]", - yyXError{1186, -1}: "expected LIMIT clause or Optional ORDER BY clause optional or one of [$end, ';', LIMIT, ORDER]", - yyXError{864, -1}: "expected LIMIT clause or one of [$end, ';', LIMIT]", - yyXError{1187, -1}: "expected LIMIT clause or one of [$end, ';', LIMIT]", - yyXError{1224, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1236, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1248, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1261, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1266, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1272, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1278, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1284, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1290, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1513, -1}: "expected List of index column name or one of [')', ',', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1057, -1}: "expected MODE", - yyXError{1195, -1}: "expected NOT", - yyXError{1457, -1}: "expected NULL", - yyXError{1483, -1}: "expected Num/Int/Float/Decimal Literal or one of [floating-point literal, integer literal]", - yyXError{1484, -1}: "expected Num/Int/Float/Decimal Literal or one of [floating-point literal, integer literal]", - yyXError{1167, -1}: "expected ON", - yyXError{1510, -1}: "expected ON", - yyXError{1138, -1}: "expected ON DUPLICATE KEY UPDATE value list or one of [$end, ';', ON]", - yyXError{224, -1}: "expected OPTION", - yyXError{869, -1}: "expected ORDER BY clause optional collation specification or logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', AND, ASC, DESC, FOR, HAVING, LIMIT, LOCK, ON, OR, ORDER, UNION, XOR, ||]", - yyXError{1228, -1}: "expected ORDER BY clause optional collation specification or one of [')', ',', ASC, DESC]", - yyXError{881, -1}: "expected Optinal WHERE clause or one of [$end, ',', ';', WHERE]", - yyXError{1179, -1}: "expected Optinal WHERE clause or one of [$end, ',', ';', WHERE]", - yyXError{1184, -1}: "expected Optinal WHERE clause or one of [$end, ',', ';', WHERE]", - yyXError{1389, -1}: "expected Optional BINARY or Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1434, -1}: "expected Optional BINARY or Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1438, -1}: "expected Optional BINARY or Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{535, -1}: "expected Optional BINARY or Optional Character setting or one of [')', BINARY, CHARACTER, CHARSET]", - yyXError{1415, -1}: "expected Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1424, -1}: "expected Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1427, -1}: "expected Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1435, -1}: "expected Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1439, -1}: "expected Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1442, -1}: "expected Optional Character setting or Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{536, -1}: "expected Optional Character setting or one of [')', CHARACTER, CHARSET]", - yyXError{1418, -1}: "expected Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1425, -1}: "expected Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1428, -1}: "expected Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1436, -1}: "expected Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1440, -1}: "expected Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1443, -1}: "expected Optional Collate setting or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{514, -1}: "expected Optional Integer keyword or one of [')', INTEGER]", - yyXError{515, -1}: "expected Optional Integer keyword or one of [')', INTEGER]", - yyXError{1018, -1}: "expected Optional ORDER BY clause optional or SELECT statement optional LIMIT clause or one of [$end, ')', ';', LIMIT, ON, ORDER, UNION]", - yyXError{551, -1}: "expected Optional else clause or When clause or one of [ELSE, END, WHEN]", - yyXError{401, -1}: "expected Optional expression or When clause list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{432, -1}: "expected Optional expression or one of ['!', '(', ')', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{659, -1}: "expected Optional expression or one of ['!', '(', ')', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{672, -1}: "expected Optional expression or one of ['!', '(', ')', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{739, -1}: "expected Optional expression or one of ['!', '(', ')', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1218, -1}: "expected Optional index type or index name or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INDEX, ISOLATION, KEY, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1216, -1}: "expected Optional index type or index name or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1217, -1}: "expected Optional index type or index name or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1240, -1}: "expected Optional index type or index name or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1241, -1}: "expected Optional index type or index name or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1239, -1}: "expected Optional index type or one of ['(', USING]", - yyXError{1242, -1}: "expected Optional index type or one of ['(', USING]", - yyXError{1259, -1}: "expected Optional index type or one of ['(', USING]", - yyXError{1270, -1}: "expected Optional index type or one of ['(', USING]", - yyXError{1276, -1}: "expected Optional index type or one of ['(', USING]", - yyXError{1288, -1}: "expected Optional index type or one of ['(', USING]", - yyXError{20, -1}: "expected PREPARE", - yyXError{21, -1}: "expected PREPARE", - yyXError{993, -1}: "expected Password option or one of [PASSWORD, string literal]", - yyXError{996, -1}: "expected Password option or one of [PASSWORD, string literal]", - yyXError{261, -1}: "expected Password string value or one of [PASSWORD, string literal]", - yyXError{1000, -1}: "expected Password string value or string literal", - yyXError{814, -1}: "expected Predicate expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1090, -1}: "expected Prepare statement sql string or one of [USER_VAR, string literal]", - yyXError{66, -1}: "expected Privilege element list or one of [ALL, ALTER, CREATE, DELETE, DROP, EXECUTE, GRANT, INDEX, INSERT, SELECT, SHOW, UPDATE]", - yyXError{240, -1}: "expected Privilege element or one of [ALL, ALTER, CREATE, DELETE, DROP, EXECUTE, GRANT, INDEX, INSERT, SELECT, SHOW, UPDATE]", - yyXError{242, -1}: "expected Privilege scope or one of ['*', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{983, -1}: "expected READ", - yyXError{776, -1}: "expected REGEXP or RLIKE or one of [BETWEEN, IN, LIKE, REGEXP, RLIKE]", - yyXError{315, -1}: "expected REGEXP or RLIKE or optional NOT or one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{1230, -1}: "expected Reference definition or REFERENCES", - yyXError{1099, -1}: "expected Rest part of INSERT/REPLACE INTO statement or one of ['(', SELECT, SET, VALUE, VALUES]", - yyXError{1137, -1}: "expected Rest part of INSERT/REPLACE INTO statement or one of ['(', SELECT, SET, VALUE, VALUES]", - yyXError{23, -1}: "expected SELECT statement field list or Select statement options or one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DISTINCT, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1027, -1}: "expected SELECT statement field list or one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1019, -1}: "expected SELECT statement optional LIMIT clause or one of [$end, ')', ';', LIMIT, ON]", - yyXError{1030, -1}: "expected SELECT statement optional SQL_CALC_FOUND_ROWS or one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{585, -1}: "expected SELECT statement or SELECT", - yyXError{1015, -1}: "expected SELECT statement or SELECT", - yyXError{1010, -1}: "expected SELECT statement or Union (select) item or Union Option(empty/ALL/DISTINCT) or one of ['(', ALL, DISTINCT, SELECT]", - yyXError{1011, -1}: "expected SELECT statement or Union (select) item or one of ['(', SELECT]", - yyXError{1126, -1}: "expected SELECT statement or Union select state ment or Value or Values or one of ['(', SELECT, VALUE, VALUES]", - yyXError{816, -1}: "expected SELECT statement or Union select state ment or expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{374, -1}: "expected SELECT statement or Union select state ment or expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{594, -1}: "expected SELECT statement or Union select state ment or expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{24, -1}: "expected SELECT statement or Union select state ment or one of ['(', SELECT]", - yyXError{582, -1}: "expected SELECT statement or Union select state ment or one of ['(', SELECT]", - yyXError{282, -1}: "expected SELECT statement or Union select state ment or table references or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{285, -1}: "expected SELECT statement or Union select state ment or table references or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1100, -1}: "expected SELECT statement or column name list opt or one of [')', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{540, -1}: "expected SET", - yyXError{892, -1}: "expected SET", - yyXError{1056, -1}: "expected SHARE", - yyXError{894, -1}: "expected STATUS", - yyXError{899, -1}: "expected STATUS", - yyXError{885, -1}: "expected Show like or where clause option or one of [$end, ';', LIKE, WHERE]", - yyXError{914, -1}: "expected Show table alias option or one of [FROM, IN]", - yyXError{915, -1}: "expected Show table alias option or one of [FROM, IN]", - yyXError{898, -1}: "expected Show tables/columns statement database name option or one of [$end, ';', FROM, IN, LIKE, WHERE]", - yyXError{911, -1}: "expected Show tables/columns statement database name option or one of [$end, ';', FROM, IN, LIKE, WHERE]", - yyXError{913, -1}: "expected Show tables/columns statement database name option or one of [$end, ';', FROM, IN, LIKE, WHERE]", - yyXError{916, -1}: "expected Show tables/columns statement database name option or one of [$end, ';', FROM, IN, LIKE, WHERE]", - yyXError{922, -1}: "expected Show tables/columns statement database name option or one of [$end, ';', FROM, IN, LIKE, WHERE]", - yyXError{30, -1}: "expected Show target that can be filtered by WHERE or LIKE or one of [CHARACTER, COLLATION, COLUMNS, CREATE, DATABASES, ENGINES, FIELDS, FULL, GLOBAL, GRANTS, INDEX, PROCEDURE, SCHEMAS, SESSION, STATUS, TABLE, TABLES, TRIGGERS, VARIABLES, WARNINGS]", - yyXError{0, -1}: "expected Start or one of [$end, '(', ';', ADMIN, ALTER, BEGIN, COMMIT, CREATE, DEALLOCATE, DELETE, DESC, DESCRIBE, DO, DROP, EXECUTE, EXPLAIN, GRANT, INSERT, LOCK, PREPARE, REPLACE, ROLLBACK, SELECT, SET, SHOW, START, TRUNCATE, UNLOCK, UPDATE, USE, parse expression prefix]", - yyXError{378, -1}: "expected Sub Select or '('", - yyXError{802, -1}: "expected Sub Select or '('", - yyXError{831, -1}: "expected Sub Select or '('", - yyXError{63, -1}: "expected TABLE", - yyXError{886, -1}: "expected TABLE", - yyXError{938, -1}: "expected TABLE", - yyXError{1517, -1}: "expected TABLE", - yyXError{67, -1}: "expected TABLES", - yyXError{68, -1}: "expected TABLES", - yyXError{244, -1}: "expected TO", - yyXError{248, -1}: "expected TO", - yyXError{249, -1}: "expected TO", - yyXError{251, -1}: "expected TO", - yyXError{6, -1}: "expected TRANSACTION", - yyXError{69, -1}: "expected Table lock list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{199, -1}: "expected Table locks type or one of [READ, WRITE]", - yyXError{205, -1}: "expected Table name and lock type or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1175, -1}: "expected Table name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1157, -1}: "expected Table name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{939, -1}: "expected Table name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1162, -1}: "expected Table name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1176, -1}: "expected Table name or Table name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{15, -1}: "expected Table name or explainable statement or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DELETE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INSERT, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, UPDATE, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{883, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{917, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{918, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{926, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{930, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{942, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1098, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1136, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1168, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1200, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1234, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1511, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1518, -1}: "expected Table name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1041, -1}: "expected Table references clause or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DUAL, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{482, -1}: "expected Time unit or logical and operator or logical or operator or one of [&&, AND, DAY, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, MICROSECOND, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MONTH, OR, QUARTER, SECOND, SECOND_MICROSECOND, WEEK, XOR, YEAR, YEAR_MONTH, ||]", - yyXError{489, -1}: "expected Time unit or logical and operator or logical or operator or one of [&&, AND, DAY, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, MICROSECOND, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MONTH, OR, QUARTER, SECOND, SECOND_MICROSECOND, WEEK, XOR, YEAR, YEAR_MONTH, ||]", - yyXError{451, -1}: "expected Time unit or one of [DAY, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, MICROSECOND, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MONTH, QUARTER, SECOND, SECOND_MICROSECOND, WEEK, YEAR, YEAR_MONTH]", - yyXError{974, -1}: "expected Transaction characteristic list or one of [=, ISOLATION, READ]", - yyXError{991, -1}: "expected Transaction characteristic list or one of [=, ISOLATION, READ]", - yyXError{989, -1}: "expected Transaction characteristic or one of [ISOLATION, READ]", - yyXError{611, -1}: "expected Trim string direction or expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BOTH, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEADING, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRAILING, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1204, -1}: "expected Types or one of [BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, CHAR, DATE, DATETIME, DECIMAL, DOUBLE, ENUM, INT, INTEGER, LONGBLOB, LONGTEXT, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, NATIONAL, NUMERIC, REAL, SET, SMALLINT, TEXT, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, VARBINARY, VARCHAR, YEAR, float, float32, float64, int64, string, uint, uint64]", - yyXError{25, -1}: "expected UNION", - yyXError{26, -1}: "expected UNION", - yyXError{587, -1}: "expected UNION", - yyXError{1016, -1}: "expected UNION", - yyXError{1054, -1}: "expected UPDATE", - yyXError{1142, -1}: "expected UPDATE", - yyXError{1463, -1}: "expected UPDATE", - yyXError{254, -1}: "expected User auth option or one of [$end, ',', ';', IDENTIFIED]", - yyXError{1084, -1}: "expected User defined variable name list or USER_VAR", - yyXError{1087, -1}: "expected User defined variable name or USER_VAR", - yyXError{252, -1}: "expected Username and auth option list or string literal", - yyXError{1196, -1}: "expected Username and auth option list or string literal", - yyXError{257, -1}: "expected Username and auth option or string literal", - yyXError{928, -1}: "expected Username or string literal", - yyXError{994, -1}: "expected Username or string literal", - yyXError{550, -1}: "expected When clause list or WHEN", - yyXError{853, -1}: "expected assignment list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{880, -1}: "expected assignment list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1143, -1}: "expected assignment list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{857, -1}: "expected assignment or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1300, -1}: "expected charset or charater set or one of [CHARACTER, CHARSET, COLLATE]", - yyXError{1499, -1}: "expected charset or charater set or one of [CHARACTER, CHARSET, COLLATE]", - yyXError{28, -1}: "expected charset or charater set or set variable value list or one of [$end, ',', ';', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARACTER, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, USER_VAR, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1467, -1}: "expected column definition option or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{228, -1}: "expected column name list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1145, -1}: "expected column name or one of [$end, ';', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{232, -1}: "expected column name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{500, -1}: "expected column name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{590, -1}: "expected column name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1525, -1}: "expected column name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1542, -1}: "expected column name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1294, -1}: "expected create table option list opt or one of [$end, ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1313, -1}: "expected create table option or one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1324, -1}: "expected create table option or one of [AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{845, -1}: "expected escaped table reference or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1101, -1}: "expected expression list list or '('", - yyXError{1119, -1}: "expected expression list list or '('", - yyXError{1122, -1}: "expected expression list list or '('", - yyXError{1127, -1}: "expected expression list list or '('", - yyXError{567, -1}: "expected expression list opt or one of ['!', '(', ')', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1116, -1}: "expected expression list or one of ['!', '(', ')', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{734, -1}: "expected expression list or one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{9, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{598, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{602, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{678, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{706, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{713, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{744, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{747, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{750, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{758, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{763, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{773, -1}: "expected expression list or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{493, -1}: "expected expression or one of ['!', '(', ')', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{613, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{3, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{310, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{312, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{419, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{421, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{422, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{423, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{436, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{438, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{441, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{443, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{445, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{448, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{473, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{476, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{481, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{485, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{488, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{503, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{553, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{555, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{559, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{562, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{572, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{605, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{608, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{618, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{621, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{625, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{631, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{635, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{637, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{639, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{642, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{644, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{645, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{648, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{653, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{656, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{662, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{664, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{667, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{669, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{675, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{681, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{685, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{688, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{692, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{695, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{697, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{700, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{703, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{709, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{718, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{721, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{724, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{727, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{730, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{753, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{756, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{766, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{769, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{843, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{859, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{878, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{934, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{957, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{959, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{961, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{969, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{972, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1008, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1049, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1111, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1211, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1469, -1}: "expected expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1067, -1}: "expected field expression or one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{247, -1}: "expected identifier or unreserved keyword or one of ['*', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1076, -1}: "expected identifier or unreserved keyword or one of ['*', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1079, -1}: "expected identifier or unreserved keyword or one of ['*', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{946, -1}: "expected identifier or unreserved keyword or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{949, -1}: "expected identifier or unreserved keyword or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{950, -1}: "expected identifier or unreserved keyword or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{965, -1}: "expected identifier or unreserved keyword or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{966, -1}: "expected identifier or unreserved keyword or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1299, -1}: "expected identifier or unreserved keyword or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1072, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{18, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{19, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{207, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{235, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{237, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{278, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{291, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1081, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1164, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1334, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1355, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1509, -1}: "expected identifier or unreserved keyword or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1527, -1}: "expected index name or one of [$end, ',', ';', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1221, -1}: "expected index name or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1282, -1}: "expected index name or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1104, -1}: "expected insert statement set value by column name list or one of [$end, ',', ';', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1113, -1}: "expected insert statement set value by column name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{809, -1}: "expected like escape option or one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{429, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', '}', ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{430, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', '}', ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{431, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', '}', ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{841, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', '}', ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{311, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', '}', AND, CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, OR, ORDER, RIGHT, SET, UNION, WHERE, XOR, ||]", - yyXError{844, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', '}', AND, CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, OR, ORDER, RIGHT, SET, UNION, WHERE, XOR, ||]", - yyXError{568, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', AND, OR, XOR, ||]", - yyXError{573, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ',', ';', AND, OR, XOR, ||]", - yyXError{861, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ';', AND, FOR, GROUP, HAVING, LIMIT, LOCK, ON, OR, ORDER, UNION, XOR, ||]", - yyXError{1060, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ')', ';', AND, FOR, LIMIT, LOCK, ON, OR, ORDER, UNION, XOR, ||]", - yyXError{879, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ',', ';', AND, LIMIT, OR, ORDER, WHERE, XOR, ||]", - yyXError{1112, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ',', ';', AND, ON, OR, XOR, ||]", - yyXError{958, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ',', ';', AND, OR, XOR, ||]", - yyXError{960, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ',', ';', AND, OR, XOR, ||]", - yyXError{962, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ',', ';', AND, OR, XOR, ||]", - yyXError{970, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ',', ';', AND, OR, XOR, ||]", - yyXError{973, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ',', ';', AND, OR, XOR, ||]", - yyXError{1009, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ',', ';', AND, OR, XOR, ||]", - yyXError{935, -1}: "expected logical and operator or logical or operator or one of [$end, &&, ';', AND, OR, XOR, ||]", - yyXError{1546, -1}: "expected logical and operator or logical or operator or one of [$end, &&, AND, OR, XOR, ||]", - yyXError{593, -1}: "expected logical and operator or logical or operator or one of [&&, ')', ',', AND, OR, XOR, ||]", - yyXError{651, -1}: "expected logical and operator or logical or operator or one of [&&, ')', ',', AND, OR, XOR, ||]", - yyXError{698, -1}: "expected logical and operator or logical or operator or one of [&&, ')', ',', AND, OR, XOR, ||]", - yyXError{646, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, FOR, OR, XOR, ||]", - yyXError{612, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, FROM, OR, XOR, ||]", - yyXError{433, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, WHEN, XOR, ||]", - yyXError{420, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{439, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{446, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{449, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{474, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{479, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{494, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{606, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{609, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{619, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{622, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{626, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{632, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{640, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{649, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{654, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{657, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{665, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{670, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{676, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{682, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{686, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{689, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{693, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{701, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{704, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{710, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{719, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{722, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{725, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{728, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{731, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{754, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{767, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{770, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{1212, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{1470, -1}: "expected logical and operator or logical or operator or one of [&&, ')', AND, OR, XOR, ||]", - yyXError{643, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, FROM, OR, XOR, ||]", - yyXError{504, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, USING, XOR, ||]", - yyXError{437, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{442, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{444, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{477, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{486, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{636, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{638, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{663, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{668, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{696, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{757, -1}: "expected logical and operator or logical or operator or one of [&&, ',', AND, OR, XOR, ||]", - yyXError{563, -1}: "expected logical and operator or logical or operator or one of [&&, AND, AS, OR, XOR, ||]", - yyXError{556, -1}: "expected logical and operator or logical or operator or one of [&&, AND, ELSE, END, OR, WHEN, XOR, ||]", - yyXError{560, -1}: "expected logical and operator or logical or operator or one of [&&, AND, END, OR, XOR, ||]", - yyXError{617, -1}: "expected logical and operator or logical or operator or one of [&&, AND, FROM, OR, XOR, ||]", - yyXError{554, -1}: "expected logical and operator or logical or operator or one of [&&, AND, OR, THEN, XOR, ||]", - yyXError{70, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{71, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{72, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{73, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{74, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{75, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{76, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{77, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{78, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{79, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{80, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{81, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{82, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{83, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{84, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{85, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{86, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{87, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{88, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{89, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{90, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{91, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{92, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{93, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{94, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{95, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{96, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{97, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{98, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{99, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{100, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{101, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{102, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{103, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{104, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{105, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{106, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{107, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{108, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{109, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{110, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{111, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{112, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{113, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{114, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{115, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{116, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{117, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{118, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{119, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{120, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{121, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{122, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{123, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{124, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{125, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{126, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{127, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{128, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{129, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{130, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{131, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{132, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{133, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{134, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{135, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{136, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{137, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{138, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{139, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{140, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{141, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{142, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{143, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{144, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{145, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{146, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{147, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{148, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{149, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{150, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{151, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{152, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{153, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{154, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{155, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{156, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{157, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{158, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{159, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{160, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{161, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{162, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{163, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{164, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{165, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{166, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{167, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{168, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{169, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{170, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{171, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{172, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{173, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{174, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{175, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{176, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{177, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{178, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{179, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{180, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{181, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{182, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{183, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{184, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{185, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{186, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{187, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{188, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{189, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{190, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{191, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{192, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{193, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{194, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{195, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{196, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADD, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DROP, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOREIGN, FOUND_ROWS, FROM, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INDEX, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, READ, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TO, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VALUES, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, WRITE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{229, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{236, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{316, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{317, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{318, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{319, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{320, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{321, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{322, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{323, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{324, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{325, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{326, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{327, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{328, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{329, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{330, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{331, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{332, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{333, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{334, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{335, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{336, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{337, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{338, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{339, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{340, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{341, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{342, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{343, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{344, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{345, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{346, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{347, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{348, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{349, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{350, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{351, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{352, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{353, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{354, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{355, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{356, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{357, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{358, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{359, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{360, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{361, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{362, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{832, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{833, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{238, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOL, BOOLEAN, BTREE, CHAR, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DECIMAL, DELAY_KEY_WRITE, DESC, DIV, DO, DOUBLE, DYNAMIC, ELSE, END, ENGINE, ENGINES, ENUM, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, INT, INTEGER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, LONGBLOB, LONGTEXT, MAX, MAX_ROWS, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, NUMERIC, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REAL, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SMALLINT, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TINYBLOB, TINYINT, TINYTEXT, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARBINARY, VARCHAR, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, float, float32, float64, identifier, int64, string, string literal, uint, uint64, ||]", - yyXError{375, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{397, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{398, -1}: "expected one of [!=, $end, &&, '%', '&', '(', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{1033, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DIV, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IN, IS, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, XOR, YEAR, YEARWEEK, identifier, string literal, ||]", - yyXError{1077, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '.', '/', ';', '<', '>', '^', '|', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DIV, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IN, IS, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, XOR, YEAR, YEARWEEK, identifier, string literal, ||]", - yyXError{544, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{545, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARACTER, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{363, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{364, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{365, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{366, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{367, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{368, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{370, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{371, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{601, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNIQUE, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{372, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{373, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{376, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{377, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{379, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{380, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{381, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{387, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{388, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{389, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{390, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{391, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{415, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{416, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{417, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{418, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{428, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{435, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{440, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{447, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{450, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{475, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{484, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{491, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{492, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{495, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{496, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{497, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{499, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{502, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{547, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{549, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{561, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{566, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{571, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{575, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{576, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{577, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{578, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{579, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{580, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{581, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{588, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{589, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{592, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{597, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{600, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{604, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{607, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{610, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{620, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{623, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{624, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{627, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{633, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{641, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{647, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{650, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{652, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{655, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{658, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{661, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{666, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{671, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{674, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{677, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{680, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{683, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{687, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{690, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{694, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{699, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{702, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{705, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{708, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{711, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{715, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{717, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{720, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{723, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{726, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{729, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{732, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{737, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{738, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{741, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{743, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{746, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{749, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{752, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{755, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{760, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{762, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{765, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{768, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{771, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{775, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{790, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{791, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{792, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{793, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{794, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{795, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{796, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{797, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{798, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{799, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{800, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{801, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', '}', <<, <=, <=>, <>, =, >=, >>, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BETWEEN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DIV, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, IN, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MOD, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REGEXP, REPEATABLE, RIGHT, RLIKE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{596, -1}: "expected one of [!=, $end, &&, '%', '&', ')', '*', '+', ',', '-', '/', ';', '<', '>', '^', '|', <<, <=, <=>, <>, =, >=, >>, AND, BETWEEN, COLLATE, DIV, IN, IS, LIKE, MOD, NOT, OR, REGEXP, RLIKE, UNION, XOR, ||]", - yyXError{808, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{314, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{810, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{812, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{815, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{817, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{819, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{830, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{835, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{840, -1}: "expected one of [!=, $end, &&, ')', ',', ';', '<', '>', '}', <=, <=>, <>, =, >=, ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, IS, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{837, -1}: "expected one of [$end, &&, ')', ',', ';', '}', ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{838, -1}: "expected one of [$end, &&, ')', ',', ';', '}', ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{839, -1}: "expected one of [$end, &&, ')', ',', ';', '}', ABS, ADDDATE, ADMIN, AFTER, AND, ANY, AS, ASC, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEALLOCATE, DELAY_KEY_WRITE, DESC, DO, DYNAMIC, ELSE, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IDENTIFIED, IFNULL, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MINUTE_MICROSECOND, MINUTE_SECOND, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, OR, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SECOND_MICROSECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, THEN, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHEN, WHERE, XOR, YEAR, YEARWEEK, YEAR_MONTH, identifier, string literal, ||]", - yyXError{197, -1}: "expected one of [$end, '(', ')', ',', '.', ';', '}', ABS, ADD, ADDDATE, ADMIN, AFTER, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARACTER, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DROP, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, IDENTIFIED, IFNULL, IN, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, READ, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHERE, WRITE, YEAR, YEARWEEK, identifier]", - yyXError{208, -1}: "expected one of [$end, '(', ')', ',', ';', '}', ABS, ADD, ADDDATE, ADMIN, AFTER, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARACTER, CHARSET, CHECKSUM, COALESCE, COLLATE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DROP, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, IDENTIFIED, IFNULL, IN, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIKE, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, READ, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, USING, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHERE, WRITE, YEAR, YEARWEEK, identifier]", - yyXError{1383, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRECISION, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1371, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1372, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1373, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1374, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1375, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1376, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1377, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1378, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1379, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1380, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1381, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1382, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1445, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1384, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1475, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1476, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1477, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1478, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1480, -1}: "expected one of [$end, '(', ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1246, -1}: "expected one of [$end, '(', ')', ',', ';']", - yyXError{1247, -1}: "expected one of [$end, '(', ')', ',', ';']", - yyXError{1223, -1}: "expected one of [$end, '(', ',', ';', USING]", - yyXError{279, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{280, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{289, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{290, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{292, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{294, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{846, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{848, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{849, -1}: "expected one of [$end, ')', ',', ';', '}', CROSS, FOR, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, LOCK, ON, ORDER, RIGHT, SET, UNION, WHERE]", - yyXError{521, -1}: "expected one of [$end, ')', ',', ';', AFTER, ASC, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, DESC, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{525, -1}: "expected one of [$end, ')', ',', ';', AFTER, ASC, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, DESC, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1397, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1399, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1400, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1410, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, BINARY, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{537, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHARACTER, CHARSET, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{543, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COLLATE, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1461, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, KEY, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{528, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{529, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{533, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1449, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1450, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1451, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE, UNSIGNED, ZEROFILL]", - yyXError{1358, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1359, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1360, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1361, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1362, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1363, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1364, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1365, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1366, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1388, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1393, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1395, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1396, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1401, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1406, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1407, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1408, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1409, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1411, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1419, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1421, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1426, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1429, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1430, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1431, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1437, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1441, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1444, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1446, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1458, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1459, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1466, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1468, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1471, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1472, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1474, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1479, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1481, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1482, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1485, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1486, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1487, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1488, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1490, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1491, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1492, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1493, -1}: "expected one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{1456, -1}: "expected one of [$end, ')', ',', ';', AFTER, FIRST]", - yyXError{522, -1}: "expected one of [$end, ')', ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, FOR, KEY_BLOCK_SIZE, LOCK, MAX_ROWS, MIN_ROWS, OFFSET, ON, PASSWORD, ROW_FORMAT, UNION]", - yyXError{523, -1}: "expected one of [$end, ')', ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, FOR, KEY_BLOCK_SIZE, LOCK, MAX_ROWS, MIN_ROWS, OFFSET, ON, PASSWORD, ROW_FORMAT, UNION]", - yyXError{1035, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1036, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1037, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1068, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1069, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1070, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1071, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1073, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1074, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1075, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1078, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{1080, -1}: "expected one of [$end, ')', ',', ';', FOR, FROM, LIMIT, LOCK, ON, UNION]", - yyXError{275, -1}: "expected one of [$end, ')', ',', ';', FOR, GROUP, HAVING, LIMIT, LOCK, ON, ORDER, SET, UNION, WHERE]", - yyXError{847, -1}: "expected one of [$end, ')', ',', ';', FOR, GROUP, HAVING, LIMIT, LOCK, ON, ORDER, SET, UNION, WHERE]", - yyXError{852, -1}: "expected one of [$end, ')', ',', ';', FOR, GROUP, HAVING, LIMIT, LOCK, ON, ORDER, SET, UNION, WHERE]", - yyXError{1044, -1}: "expected one of [$end, ')', ',', ';', FOR, GROUP, HAVING, LIMIT, LOCK, ON, ORDER, UNION, WHERE]", - yyXError{871, -1}: "expected one of [$end, ')', ',', ';', FOR, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{873, -1}: "expected one of [$end, ')', ',', ';', FOR, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{874, -1}: "expected one of [$end, ')', ',', ';', FOR, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{875, -1}: "expected one of [$end, ')', ',', ';', FOR, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{876, -1}: "expected one of [$end, ')', ',', ';', FOR, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{1062, -1}: "expected one of [$end, ')', ',', ';', FOR, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{870, -1}: "expected one of [$end, ')', ',', ';', FOR, LIMIT, LOCK, ON, UNION]", - yyXError{1022, -1}: "expected one of [$end, ')', ',', ';', FOR, LOCK, OFFSET, ON, UNION]", - yyXError{262, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1220, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1233, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1238, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1251, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1253, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1255, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1258, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1264, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1269, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1275, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1281, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1287, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{1293, -1}: "expected one of [$end, ')', ',', ';']", - yyXError{860, -1}: "expected one of [$end, ')', ';', FOR, GROUP, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{1048, -1}: "expected one of [$end, ')', ';', FOR, HAVING, LIMIT, LOCK, ON, ORDER, UNION]", - yyXError{1043, -1}: "expected one of [$end, ')', ';', FOR, LIMIT, LOCK, ON, UNION, WHERE]", - yyXError{863, -1}: "expected one of [$end, ')', ';', FOR, LIMIT, LOCK, ON, UNION]", - yyXError{1025, -1}: "expected one of [$end, ')', ';', FOR, LOCK, ON, UNION]", - yyXError{1026, -1}: "expected one of [$end, ')', ';', FOR, LOCK, ON, UNION]", - yyXError{1014, -1}: "expected one of [$end, ')', ';', ON, UNION]", - yyXError{1053, -1}: "expected one of [$end, ')', ';', ON, UNION]", - yyXError{1058, -1}: "expected one of [$end, ')', ';', ON, UNION]", - yyXError{1059, -1}: "expected one of [$end, ')', ';', ON, UNION]", - yyXError{1065, -1}: "expected one of [$end, ')', ';', ON, UNION]", - yyXError{1066, -1}: "expected one of [$end, ')', ';', ON, UNION]", - yyXError{1021, -1}: "expected one of [$end, ')', ';', ON]", - yyXError{268, -1}: "expected one of [$end, ',', ';', =, IDENTIFIED]", - yyXError{1529, -1}: "expected one of [$end, ',', ';', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1530, -1}: "expected one of [$end, ',', ';', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1312, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1314, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1317, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1318, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1319, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1320, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1321, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1322, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1323, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1325, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1327, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1329, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1331, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1333, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1335, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1337, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1339, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1341, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1343, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1345, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1347, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1351, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1353, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1354, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1356, -1}: "expected one of [$end, ',', ';', AUTO_INCREMENT, AVG_ROW_LENGTH, CHARACTER, CHARSET, CHECKSUM, COLLATE, COMMENT, COMPRESSION, CONNECTION, DEFAULT, DELAY_KEY_WRITE, ENGINE, KEY_BLOCK_SIZE, MAX_ROWS, MIN_ROWS, PASSWORD, ROW_FORMAT]", - yyXError{1495, -1}: "expected one of [$end, ',', ';', FOREIGN, FULLTEXT, INDEX, KEY, PRIMARY, UNIQUE]", - yyXError{943, -1}: "expected one of [$end, ',', ';', FROM, USING]", - yyXError{940, -1}: "expected one of [$end, ',', ';', FROM]", - yyXError{855, -1}: "expected one of [$end, ',', ';', LIMIT, ORDER, WHERE]", - yyXError{877, -1}: "expected one of [$end, ',', ';', LIMIT, ORDER, WHERE]", - yyXError{202, -1}: "expected one of [$end, ',', ';', LOCAL]", - yyXError{1108, -1}: "expected one of [$end, ',', ';', ON]", - yyXError{1110, -1}: "expected one of [$end, ',', ';', ON]", - yyXError{1114, -1}: "expected one of [$end, ',', ';', ON]", - yyXError{1118, -1}: "expected one of [$end, ',', ';', ON]", - yyXError{1121, -1}: "expected one of [$end, ',', ';', ON]", - yyXError{198, -1}: "expected one of [$end, ',', ';']", - yyXError{200, -1}: "expected one of [$end, ',', ';']", - yyXError{201, -1}: "expected one of [$end, ',', ';']", - yyXError{203, -1}: "expected one of [$end, ',', ';']", - yyXError{204, -1}: "expected one of [$end, ',', ';']", - yyXError{206, -1}: "expected one of [$end, ',', ';']", - yyXError{255, -1}: "expected one of [$end, ',', ';']", - yyXError{256, -1}: "expected one of [$end, ',', ';']", - yyXError{258, -1}: "expected one of [$end, ',', ';']", - yyXError{259, -1}: "expected one of [$end, ',', ';']", - yyXError{263, -1}: "expected one of [$end, ',', ';']", - yyXError{265, -1}: "expected one of [$end, ',', ';']", - yyXError{266, -1}: "expected one of [$end, ',', ';']", - yyXError{941, -1}: "expected one of [$end, ',', ';']", - yyXError{951, -1}: "expected one of [$end, ',', ';']", - yyXError{956, -1}: "expected one of [$end, ',', ';']", - yyXError{967, -1}: "expected one of [$end, ',', ';']", - yyXError{975, -1}: "expected one of [$end, ',', ';']", - yyXError{976, -1}: "expected one of [$end, ',', ';']", - yyXError{979, -1}: "expected one of [$end, ',', ';']", - yyXError{980, -1}: "expected one of [$end, ',', ';']", - yyXError{982, -1}: "expected one of [$end, ',', ';']", - yyXError{985, -1}: "expected one of [$end, ',', ';']", - yyXError{986, -1}: "expected one of [$end, ',', ';']", - yyXError{987, -1}: "expected one of [$end, ',', ';']", - yyXError{988, -1}: "expected one of [$end, ',', ';']", - yyXError{990, -1}: "expected one of [$end, ',', ';']", - yyXError{992, -1}: "expected one of [$end, ',', ';']", - yyXError{1085, -1}: "expected one of [$end, ',', ';']", - yyXError{1086, -1}: "expected one of [$end, ',', ';']", - yyXError{1088, -1}: "expected one of [$end, ',', ';']", - yyXError{1144, -1}: "expected one of [$end, ',', ';']", - yyXError{1160, -1}: "expected one of [$end, ',', ';']", - yyXError{1163, -1}: "expected one of [$end, ',', ';']", - yyXError{1189, -1}: "expected one of [$end, ',', ';']", - yyXError{1197, -1}: "expected one of [$end, ',', ';']", - yyXError{1520, -1}: "expected one of [$end, ',', ';']", - yyXError{1521, -1}: "expected one of [$end, ',', ';']", - yyXError{1524, -1}: "expected one of [$end, ',', ';']", - yyXError{1533, -1}: "expected one of [$end, ',', ';']", - yyXError{1534, -1}: "expected one of [$end, ',', ';']", - yyXError{1535, -1}: "expected one of [$end, ',', ';']", - yyXError{1536, -1}: "expected one of [$end, ',', ';']", - yyXError{1538, -1}: "expected one of [$end, ',', ';']", - yyXError{1540, -1}: "expected one of [$end, ',', ';']", - yyXError{1541, -1}: "expected one of [$end, ',', ';']", - yyXError{1543, -1}: "expected one of [$end, ',', ';']", - yyXError{1545, -1}: "expected one of [$end, ',', ';']", - yyXError{269, -1}: "expected one of [$end, ';', CHARACTER, CHARSET, COLLATE, DEFAULT, LIKE, WHERE]", - yyXError{1501, -1}: "expected one of [$end, ';', CHARACTER, CHARSET, COLLATE, DEFAULT]", - yyXError{1502, -1}: "expected one of [$end, ';', CHARACTER, CHARSET, COLLATE, DEFAULT]", - yyXError{1506, -1}: "expected one of [$end, ';', CHARACTER, CHARSET, COLLATE, DEFAULT]", - yyXError{1508, -1}: "expected one of [$end, ';', CHARACTER, CHARSET, COLLATE, DEFAULT]", - yyXError{936, -1}: "expected one of [$end, ';', COLLATE]", - yyXError{1004, -1}: "expected one of [$end, ';', COLLATE]", - yyXError{887, -1}: "expected one of [$end, ';', FOR]", - yyXError{919, -1}: "expected one of [$end, ';', FROM, IN, LIKE, WHERE]", - yyXError{920, -1}: "expected one of [$end, ';', FROM, IN, LIKE, WHERE]", - yyXError{889, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{890, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{891, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{895, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{897, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{903, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{904, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{907, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{908, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{909, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{910, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{912, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{921, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{923, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{924, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{925, -1}: "expected one of [$end, ';', LIKE, WHERE]", - yyXError{1102, -1}: "expected one of [$end, ';', ON, UNION]", - yyXError{1128, -1}: "expected one of [$end, ';', ON, UNION]", - yyXError{1103, -1}: "expected one of [$end, ';', ON]", - yyXError{1115, -1}: "expected one of [$end, ';', ON]", - yyXError{1120, -1}: "expected one of [$end, ';', ON]", - yyXError{1123, -1}: "expected one of [$end, ';', ON]", - yyXError{1129, -1}: "expected one of [$end, ';', ON]", - yyXError{1130, -1}: "expected one of [$end, ';', ON]", - yyXError{27, -1}: "expected one of [$end, ';', UNION]", - yyXError{1083, -1}: "expected one of [$end, ';', USING]", - yyXError{2, -1}: "expected one of [$end, ';']", - yyXError{5, -1}: "expected one of [$end, ';']", - yyXError{7, -1}: "expected one of [$end, ';']", - yyXError{22, -1}: "expected one of [$end, ';']", - yyXError{31, -1}: "expected one of [$end, ';']", - yyXError{32, -1}: "expected one of [$end, ';']", - yyXError{33, -1}: "expected one of [$end, ';']", - yyXError{34, -1}: "expected one of [$end, ';']", - yyXError{35, -1}: "expected one of [$end, ';']", - yyXError{36, -1}: "expected one of [$end, ';']", - yyXError{37, -1}: "expected one of [$end, ';']", - yyXError{38, -1}: "expected one of [$end, ';']", - yyXError{39, -1}: "expected one of [$end, ';']", - yyXError{40, -1}: "expected one of [$end, ';']", - yyXError{41, -1}: "expected one of [$end, ';']", - yyXError{42, -1}: "expected one of [$end, ';']", - yyXError{43, -1}: "expected one of [$end, ';']", - yyXError{44, -1}: "expected one of [$end, ';']", - yyXError{45, -1}: "expected one of [$end, ';']", - yyXError{46, -1}: "expected one of [$end, ';']", - yyXError{47, -1}: "expected one of [$end, ';']", - yyXError{48, -1}: "expected one of [$end, ';']", - yyXError{49, -1}: "expected one of [$end, ';']", - yyXError{50, -1}: "expected one of [$end, ';']", - yyXError{51, -1}: "expected one of [$end, ';']", - yyXError{52, -1}: "expected one of [$end, ';']", - yyXError{53, -1}: "expected one of [$end, ';']", - yyXError{54, -1}: "expected one of [$end, ';']", - yyXError{55, -1}: "expected one of [$end, ';']", - yyXError{56, -1}: "expected one of [$end, ';']", - yyXError{57, -1}: "expected one of [$end, ';']", - yyXError{58, -1}: "expected one of [$end, ';']", - yyXError{59, -1}: "expected one of [$end, ';']", - yyXError{60, -1}: "expected one of [$end, ';']", - yyXError{61, -1}: "expected one of [$end, ';']", - yyXError{62, -1}: "expected one of [$end, ';']", - yyXError{209, -1}: "expected one of [$end, ';']", - yyXError{270, -1}: "expected one of [$end, ';']", - yyXError{866, -1}: "expected one of [$end, ';']", - yyXError{867, -1}: "expected one of [$end, ';']", - yyXError{882, -1}: "expected one of [$end, ';']", - yyXError{884, -1}: "expected one of [$end, ';']", - yyXError{927, -1}: "expected one of [$end, ';']", - yyXError{929, -1}: "expected one of [$end, ';']", - yyXError{931, -1}: "expected one of [$end, ';']", - yyXError{932, -1}: "expected one of [$end, ';']", - yyXError{944, -1}: "expected one of [$end, ';']", - yyXError{963, -1}: "expected one of [$end, ';']", - yyXError{997, -1}: "expected one of [$end, ';']", - yyXError{998, -1}: "expected one of [$end, ';']", - yyXError{1002, -1}: "expected one of [$end, ';']", - yyXError{1003, -1}: "expected one of [$end, ';']", - yyXError{1006, -1}: "expected one of [$end, ';']", - yyXError{1082, -1}: "expected one of [$end, ';']", - yyXError{1091, -1}: "expected one of [$end, ';']", - yyXError{1092, -1}: "expected one of [$end, ';']", - yyXError{1093, -1}: "expected one of [$end, ';']", - yyXError{1107, -1}: "expected one of [$end, ';']", - yyXError{1139, -1}: "expected one of [$end, ';']", - yyXError{1146, -1}: "expected one of [$end, ';']", - yyXError{1147, -1}: "expected one of [$end, ';']", - yyXError{1148, -1}: "expected one of [$end, ';']", - yyXError{1149, -1}: "expected one of [$end, ';']", - yyXError{1150, -1}: "expected one of [$end, ';']", - yyXError{1151, -1}: "expected one of [$end, ';']", - yyXError{1152, -1}: "expected one of [$end, ';']", - yyXError{1169, -1}: "expected one of [$end, ';']", - yyXError{1171, -1}: "expected one of [$end, ';']", - yyXError{1180, -1}: "expected one of [$end, ';']", - yyXError{1185, -1}: "expected one of [$end, ';']", - yyXError{1188, -1}: "expected one of [$end, ';']", - yyXError{1297, -1}: "expected one of [$end, ';']", - yyXError{1498, -1}: "expected one of [$end, ';']", - yyXError{1515, -1}: "expected one of [$end, ';']", - yyXError{1516, -1}: "expected one of [$end, ';']", - yyXError{1548, -1}: "expected one of [$end, ';']", - yyXError{630, -1}: "expected one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{629, -1}: "expected one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{634, -1}: "expected one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1028, -1}: "expected one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1029, -1}: "expected one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1031, -1}: "expected one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{1032, -1}: "expected one of ['!', '(', '*', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{822, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{823, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{824, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{825, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{826, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{827, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{828, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{829, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ALL, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{614, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{615, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{616, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{424, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{425, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{426, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{427, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOT, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{806, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{807, -1}: "expected one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{813, -1}: "expected one of ['%', '&', '*', '+', '-', '/', '^', '|', <<, >>, AND, DIV, MOD]", - yyXError{215, -1}: "expected one of ['(', ',', ON, USER]", - yyXError{211, -1}: "expected one of ['(', ',', ON]", - yyXError{213, -1}: "expected one of ['(', ',', ON]", - yyXError{214, -1}: "expected one of ['(', ',', ON]", - yyXError{216, -1}: "expected one of ['(', ',', ON]", - yyXError{217, -1}: "expected one of ['(', ',', ON]", - yyXError{218, -1}: "expected one of ['(', ',', ON]", - yyXError{219, -1}: "expected one of ['(', ',', ON]", - yyXError{220, -1}: "expected one of ['(', ',', ON]", - yyXError{221, -1}: "expected one of ['(', ',', ON]", - yyXError{223, -1}: "expected one of ['(', ',', ON]", - yyXError{225, -1}: "expected one of ['(', ',', ON]", - yyXError{226, -1}: "expected one of ['(', ',', ON]", - yyXError{227, -1}: "expected one of ['(', ',', ON]", - yyXError{271, -1}: "expected one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{273, -1}: "expected one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLE, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{301, -1}: "expected one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{304, -1}: "expected one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{305, -1}: "expected one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1012, -1}: "expected one of ['(', SELECT]", - yyXError{1013, -1}: "expected one of ['(', SELECT]", - yyXError{230, -1}: "expected one of [')', ',']", - yyXError{231, -1}: "expected one of [')', ',']", - yyXError{234, -1}: "expected one of [')', ',']", - yyXError{283, -1}: "expected one of [')', ',']", - yyXError{530, -1}: "expected one of [')', ',']", - yyXError{569, -1}: "expected one of [')', ',']", - yyXError{599, -1}: "expected one of [')', ',']", - yyXError{603, -1}: "expected one of [')', ',']", - yyXError{679, -1}: "expected one of [')', ',']", - yyXError{707, -1}: "expected one of [')', ',']", - yyXError{714, -1}: "expected one of [')', ',']", - yyXError{735, -1}: "expected one of [')', ',']", - yyXError{745, -1}: "expected one of [')', ',']", - yyXError{748, -1}: "expected one of [')', ',']", - yyXError{751, -1}: "expected one of [')', ',']", - yyXError{759, -1}: "expected one of [')', ',']", - yyXError{764, -1}: "expected one of [')', ',']", - yyXError{774, -1}: "expected one of [')', ',']", - yyXError{818, -1}: "expected one of [')', ',']", - yyXError{1117, -1}: "expected one of [')', ',']", - yyXError{1124, -1}: "expected one of [')', ',']", - yyXError{1205, -1}: "expected one of [')', ',']", - yyXError{1207, -1}: "expected one of [')', ',']", - yyXError{1208, -1}: "expected one of [')', ',']", - yyXError{1210, -1}: "expected one of [')', ',']", - yyXError{1213, -1}: "expected one of [')', ',']", - yyXError{1225, -1}: "expected one of [')', ',']", - yyXError{1227, -1}: "expected one of [')', ',']", - yyXError{1229, -1}: "expected one of [')', ',']", - yyXError{1232, -1}: "expected one of [')', ',']", - yyXError{1237, -1}: "expected one of [')', ',']", - yyXError{1249, -1}: "expected one of [')', ',']", - yyXError{1262, -1}: "expected one of [')', ',']", - yyXError{1267, -1}: "expected one of [')', ',']", - yyXError{1273, -1}: "expected one of [')', ',']", - yyXError{1279, -1}: "expected one of [')', ',']", - yyXError{1285, -1}: "expected one of [')', ',']", - yyXError{1291, -1}: "expected one of [')', ',']", - yyXError{1296, -1}: "expected one of [')', ',']", - yyXError{1413, -1}: "expected one of [')', ',']", - yyXError{1414, -1}: "expected one of [')', ',']", - yyXError{1417, -1}: "expected one of [')', ',']", - yyXError{1423, -1}: "expected one of [')', ',']", - yyXError{1514, -1}: "expected one of [')', ',']", - yyXError{453, -1}: "expected one of [')', FROM]", - yyXError{454, -1}: "expected one of [')', FROM]", - yyXError{455, -1}: "expected one of [')', FROM]", - yyXError{456, -1}: "expected one of [')', FROM]", - yyXError{457, -1}: "expected one of [')', FROM]", - yyXError{458, -1}: "expected one of [')', FROM]", - yyXError{459, -1}: "expected one of [')', FROM]", - yyXError{460, -1}: "expected one of [')', FROM]", - yyXError{461, -1}: "expected one of [')', FROM]", - yyXError{462, -1}: "expected one of [')', FROM]", - yyXError{463, -1}: "expected one of [')', FROM]", - yyXError{464, -1}: "expected one of [')', FROM]", - yyXError{465, -1}: "expected one of [')', FROM]", - yyXError{466, -1}: "expected one of [')', FROM]", - yyXError{467, -1}: "expected one of [')', FROM]", - yyXError{468, -1}: "expected one of [')', FROM]", - yyXError{469, -1}: "expected one of [')', FROM]", - yyXError{470, -1}: "expected one of [')', FROM]", - yyXError{471, -1}: "expected one of [')', FROM]", - yyXError{472, -1}: "expected one of [')', FROM]", - yyXError{286, -1}: "expected one of [')', UNION]", - yyXError{295, -1}: "expected one of [')', UNION]", - yyXError{583, -1}: "expected one of [')', UNION]", - yyXError{595, -1}: "expected one of [')', UNION]", - yyXError{243, -1}: "expected one of ['*', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1177, -1}: "expected one of [',', FROM]", - yyXError{210, -1}: "expected one of [',', ON]", - yyXError{212, -1}: "expected one of [',', ON]", - yyXError{233, -1}: "expected one of [',', ON]", - yyXError{241, -1}: "expected one of [',', ON]", - yyXError{276, -1}: "expected one of [',', SET]", - yyXError{1182, -1}: "expected one of [',', USING]", - yyXError{245, -1}: "expected one of ['.', TO]", - yyXError{246, -1}: "expected one of ['.', TO]", - yyXError{541, -1}: "expected one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{542, -1}: "expected one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{945, -1}: "expected one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{948, -1}: "expected one of [=, FOR]", - yyXError{1256, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, integer literal, string literal]", - yyXError{12, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DELETE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INSERT, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, UPDATE, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{13, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DELETE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INSERT, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, UPDATE, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{14, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DELETE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INSERT, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SELECT, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, UPDATE, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1174, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FROM, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1153, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1154, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1158, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1159, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1132, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1133, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1134, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, IGNORE, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1095, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1096, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INTO, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1199, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1097, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1166, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1531, -1}: "expected one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{777, -1}: "expected one of [BETWEEN, IN, LIKE, NULL, REGEXP, RLIKE, UNKNOWN, false, true]", - yyXError{1244, -1}: "expected one of [BTREE, HASH]", - yyXError{1385, -1}: "expected one of [CHAR, VARCHAR]", - yyXError{1392, -1}: "expected one of [CHAR, VARCHAR]", - yyXError{1298, -1}: "expected one of [CHARACTER, CHARSET, COLLATE]", - yyXError{29, -1}: "expected one of [CHECK, SHOW]", - yyXError{893, -1}: "expected one of [COLUMNS, FIELDS, TABLES]", - yyXError{902, -1}: "expected one of [COLUMNS, FIELDS, TABLES]", - yyXError{984, -1}: "expected one of [COMMITTED, UNCOMMITTED]", - yyXError{1316, -1}: "expected one of [COMPACT, COMPRESSED, DEFAULT, DYNAMIC, FIXED, REDUNDANT]", - yyXError{552, -1}: "expected one of [ELSE, END, WHEN]", - yyXError{558, -1}: "expected one of [ELSE, END, WHEN]", - yyXError{1494, -1}: "expected one of [FOREIGN, FULLTEXT, INDEX, KEY, PRIMARY, UNIQUE]", - yyXError{299, -1}: "expected one of [JOIN, OUTER]", - yyXError{300, -1}: "expected one of [JOIN, OUTER]", - yyXError{836, -1}: "expected one of [NULL, UNKNOWN, false, true]", - yyXError{978, -1}: "expected one of [ONLY, WRITE]", - yyXError{896, -1}: "expected one of [STATUS, VARIABLES]", - yyXError{900, -1}: "expected one of [STATUS, VARIABLES]", - yyXError{901, -1}: "expected one of [STATUS, VARIABLES]", - yyXError{820, -1}: "expected optional NOT or one of [NOT, NULL, UNKNOWN, false, true]", - yyXError{298, -1}: "expected optional OUTER clause or one of [JOIN, OUTER]", - yyXError{1357, -1}: "expected optional column definition option list or one of [$end, ')', ',', ';', AFTER, AUTO_INCREMENT, CHECK, COMMENT, DEFAULT, FIRST, NOT, NULL, ON, PRIMARY, UNIQUE]", - yyXError{778, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{779, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{780, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{781, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{782, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{783, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{784, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{785, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{786, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{787, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{788, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{789, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{803, -1}: "expected primary expression factor or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{382, -1}: "expected primary expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{383, -1}: "expected primary expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{384, -1}: "expected primary expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{385, -1}: "expected primary expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{386, -1}: "expected primary expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{804, -1}: "expected primary expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{805, -1}: "expected primary expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{933, -1}: "expected primary expression or one of ['!', '(', '+', '-', '~', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BINARY, BIT, BOOL, BOOLEAN, BTREE, CASE, CAST, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONVERT, COUNT, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CUR_TIME, DATABASE, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DEFAULT, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, EXISTS, EXTRACT, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IF, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LOCAL, LOCATE, LOWER, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULL, NULLIF, OFFSET, ONLY, PASSWORD, PLACEHOLDER, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEAT, REPEATABLE, REPLACE, ROLLBACK, ROW, ROW_FORMAT, SCHEMA, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, STRCMP, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYSDATE, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNDERSCORE_CHARSET, UNKNOWN, UPPER, USER, USER_VAR, VALUE, VALUES, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, bit literal, false, floating-point literal, hexadecimal literal, identifier, integer literal, string literal, true]", - yyXError{964, -1}: "expected set variable value or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, SYS_VAR, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, USER_VAR, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1547, -1}: "expected statement or one of [$end, '(', ';', ADMIN, ALTER, BEGIN, COMMIT, CREATE, DEALLOCATE, DELETE, DESC, DESCRIBE, DO, DROP, EXECUTE, EXPLAIN, GRANT, INSERT, LOCK, PREPARE, REPLACE, ROLLBACK, SELECT, SET, SHOW, START, TRUNCATE, UNLOCK, UPDATE, USE]", - yyXError{1412, -1}: "expected string list or string literal", - yyXError{1422, -1}: "expected string list or string literal", - yyXError{267, -1}: "expected string literal", - yyXError{369, -1}: "expected string literal", - yyXError{811, -1}: "expected string literal", - yyXError{1254, -1}: "expected string literal", - yyXError{1336, -1}: "expected string literal", - yyXError{1340, -1}: "expected string literal", - yyXError{1344, -1}: "expected string literal", - yyXError{1416, -1}: "expected string literal", - yyXError{1464, -1}: "expected string literal", - yyXError{947, -1}: "expected string literal or identifier or one of [=, ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{505, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{539, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{574, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{952, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1005, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1350, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1352, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1420, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1505, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{1507, -1}: "expected string literal or identifier or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier, string literal]", - yyXError{281, -1}: "expected table alias name optional or one of [$end, ')', ',', ';', '}', ABS, ADDDATE, ADMIN, AFTER, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CROSS, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOR, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP, GROUP_CONCAT, HASH, HAVING, HOUR, IDENTIFIED, IFNULL, INNER, ISOLATION, JOIN, KEY_BLOCK_SIZE, LEFT, LENGTH, LEVEL, LIMIT, LOCAL, LOCATE, LOCK, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ON, ONLY, ORDER, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, RIGHT, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SET, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, WHERE, YEAR, YEARWEEK, identifier]", - yyXError{296, -1}: "expected table alias name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNION, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{288, -1}: "expected table alias name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{293, -1}: "expected table alias name or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AS, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1537, -1}: "expected table column definition or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1206, -1}: "expected table constraint element or one of [FOREIGN, FULLTEXT, INDEX, KEY, PRIMARY, UNIQUE]", - yyXError{1202, -1}: "expected table definition element list or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONSTRAINT, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOREIGN, FOUND_ROWS, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INDEX, ISOLATION, KEY, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNIQUE, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1295, -1}: "expected table definition element or one of [ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECK, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, CONSTRAINT, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOREIGN, FOUND_ROWS, FULL, FULLTEXT, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, INDEX, ISOLATION, KEY, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, PRIMARY, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNIQUE, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{297, -1}: "expected table reference or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{308, -1}: "expected table reference or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{850, -1}: "expected table reference or one of ['(', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{274, -1}: "expected table reference or table references or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1178, -1}: "expected table references or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - yyXError{1183, -1}: "expected table references or one of ['(', '{', ABS, ADDDATE, ADMIN, AFTER, ANY, AUTO_INCREMENT, AVG, AVG_ROW_LENGTH, BEGIN, BIT, BOOL, BOOLEAN, BTREE, CHARSET, CHECKSUM, COALESCE, COLLATION, COLUMNS, COMMENT, COMMIT, COMMITTED, COMPACT, COMPRESSED, COMPRESSION, CONCAT, CONCAT_WS, CONNECTION, CONNECTION_ID, COUNT, CUR_TIME, DATE, DATETIME, DATE_ADD, DATE_SUB, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, DEALLOCATE, DELAY_KEY_WRITE, DO, DYNAMIC, END, ENGINE, ENGINES, ESCAPE, EXECUTE, FIELDS, FIRST, FIXED, FOUND_ROWS, FULL, GLOBAL, GRANTS, GROUP_CONCAT, HASH, HOUR, IDENTIFIED, IFNULL, ISOLATION, KEY_BLOCK_SIZE, LENGTH, LEVEL, LOCAL, LOCATE, MAX, MAX_ROWS, MICROSECOND, MIN, MINUTE, MIN_ROWS, MODE, MONTH, NAMES, NATIONAL, NOW, NULLIF, OFFSET, ONLY, PASSWORD, POW, POWER, PREPARE, QUARTER, QUICK, RAND, REDUNDANT, REPEATABLE, ROLLBACK, ROW, ROW_FORMAT, SECOND, SERIALIZABLE, SESSION, SIGNED, SOME, SQL_CALC_FOUND_ROWS, START, STATUS, SUBDATE, SUBSTRING, SUBSTRING_INDEX, SUM, TABLES, TEXT, TIME, TIMESTAMP, TRANSACTION, TRIGGERS, TRIM, TRUNCATE, UNCOMMITTED, UNKNOWN, USER, VALUE, VARIABLES, VERSION, WARNINGS, WEEK, WEEKDAY, WEEKOFYEAR, YEAR, YEARWEEK, identifier]", - } - - yyParseTab = [1549][]uint16{ - // 0 - {2: 766, 766, 23: 894, 895, 44: 905, 881, 883, 49: 897, 885, 56: 898, 58: 882, 939, 133: 900, 147: 944, 153: 904, 163: 890, 213: 893, 243: 899, 246: 935, 248: 887, 307: 903, 315: 902, 901, 929, 322: 940, 329: 886, 332: 892, 343: 884, 350: 906, 355: 880, 358: 942, 372: 913, 377: 925, 380: 928, 386: 933, 389: 908, 391: 909, 393: 910, 401: 911, 916, 917, 918, 919, 409: 912, 896, 412: 889, 920, 921, 922, 923, 907, 914, 888, 915, 891, 424: 924, 432: 937, 440: 926, 443: 927, 930, 931, 447: 938, 453: 932, 943, 936, 941, 458: 934, 511: 879, 533: 877, 878}, - {2: 876}, - {2: 875, 2423}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 2422, 1189}, - {313: 1149, 327: 694, 359: 2393}, - // 5 - {2: 847, 847}, - {82: 2392}, - {2: 837, 837}, - {60: 2070, 204: 2067, 220: 2029, 2030, 245: 800, 327: 2069, 408: 2068, 475: 2066}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 2065}, - // 10 - {344, 344, 4: 344, 344, 344, 9: 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 146: 344, 313: 344, 360: 1147, 433: 2048}, - {22: 2035, 327, 220: 2029, 2030, 245: 2032, 327: 2034, 408: 2031, 539: 2033}, - {765, 765, 4: 765, 765, 765, 9: 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 213: 765, 243: 765, 322: 765, 329: 765, 332: 765}, - {764, 764, 4: 764, 764, 764, 9: 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 213: 764, 243: 764, 322: 764, 329: 764, 332: 764}, - {763, 763, 4: 763, 763, 763, 9: 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 213: 763, 243: 763, 322: 763, 329: 763, 332: 763}, - // 15 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 213: 893, 243: 899, 303: 2021, 307: 2023, 322: 940, 329: 886, 332: 892, 372: 2024, 377: 2026, 380: 2027, 386: 2025, 485: 2022}, - {348, 348, 4: 348, 348, 348, 9: 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 313: 348, 320: 348, 360: 2008, 411: 2010, 497: 2009, 514: 2007}, - {532, 532, 4: 532, 532, 532, 9: 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 320: 532, 360: 1971, 411: 1972, 522: 1970}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1965, 948, 947}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1959, 948, 947}, - // 20 - {23: 1957}, - {23: 328}, - {2: 326, 326}, - {290, 290, 4: 290, 290, 290, 9: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 131: 290, 290, 290, 290, 290, 290, 290, 165: 290, 197: 290, 202: 290, 210: 290, 212: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 305: 1904, 330: 1905, 525: 1906, 528: 1903}, - {133: 1461, 243: 899, 307: 1471, 315: 902, 901, 1460}, - // 25 - {139: 1886}, - {139: 274}, - {2: 177, 177, 139: 272}, - {1005, 949, 244, 244, 950, 971, 1821, 8: 244, 1010, 1824, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 1826, 1018, 974, 1028, 1822, 998, 1013, 1026, 1023, 1027, 1825, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 1823, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1829, 948, 947, 1416, 214: 1831, 222: 1830, 323: 1828, 459: 1832, 547: 1827}, - {205: 1814, 350: 1813}, - // 30 - {21: 209, 206, 25: 209, 27: 206, 31: 206, 65: 1773, 67: 1765, 1778, 1776, 1763, 79: 1777, 83: 1774, 85: 1771, 209: 1768, 245: 1764, 327: 1770, 343: 1762, 407: 1766, 493: 1772, 508: 1769, 517: 1775, 523: 1767, 531: 1761}, - {2: 199, 199}, - {2: 198, 198}, - {2: 197, 197}, - {2: 196, 196}, - // 35 - {2: 195, 195}, - {2: 194, 194}, - {2: 193, 193}, - {2: 192, 192}, - {2: 191, 191}, - // 40 - {2: 190, 190}, - {2: 189, 189}, - {2: 188, 188}, - {2: 187, 187}, - {2: 186, 186}, - // 45 - {2: 185, 185}, - {2: 184, 184}, - {2: 183, 183}, - {2: 182, 182}, - {2: 181, 181}, - // 50 - {2: 180, 180}, - {2: 179, 179}, - {2: 178, 178}, - {2: 176, 176}, - {2: 175, 175}, - // 55 - {2: 174, 174}, - {2: 173, 173}, - {2: 172, 172}, - {2: 171, 171}, - {2: 170, 170}, - // 60 - {2: 169, 169}, - {2: 168, 168}, - {2: 162, 162}, - {327: 1759}, - {344, 344, 4: 344, 344, 344, 9: 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 133: 344, 313: 344, 318: 344, 360: 1147, 433: 1148}, - // 65 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1145, 948, 947, 345: 1146}, - {24: 1094, 243: 1097, 245: 1095, 248: 1093, 305: 1089, 322: 1099, 329: 1092, 332: 1096, 343: 1091, 350: 1098, 355: 1090, 358: 1100, 441: 1088, 1087, 515: 1086}, - {22: 1085}, - {22: 945}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1075, 451: 1076, 538: 1074}, - // 70 - {682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 209: 682, 211: 682, 243: 682, 682, 682, 247: 682, 682, 682, 682, 682, 253: 682, 682, 682, 682, 258: 682, 682, 682, 263: 682, 682, 682, 682, 682, 274: 682, 682, 682, 682, 682, 682, 682, 682, 284: 682, 682, 682, 288: 682, 682, 682, 682, 682, 682, 295: 682}, - {681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 209: 681, 211: 681, 243: 681, 681, 681, 247: 681, 681, 681, 681, 681, 253: 681, 681, 681, 681, 258: 681, 681, 681, 263: 681, 681, 681, 681, 681, 274: 681, 681, 681, 681, 681, 681, 681, 681, 284: 681, 681, 681, 288: 681, 681, 681, 681, 681, 681, 295: 681}, - {680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 209: 680, 211: 680, 243: 680, 680, 680, 247: 680, 680, 680, 680, 680, 253: 680, 680, 680, 680, 258: 680, 680, 680, 263: 680, 680, 680, 680, 680, 274: 680, 680, 680, 680, 680, 680, 680, 680, 284: 680, 680, 680, 288: 680, 680, 680, 680, 680, 680, 295: 680}, - {679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 209: 679, 211: 679, 243: 679, 679, 679, 247: 679, 679, 679, 679, 679, 253: 679, 679, 679, 679, 258: 679, 679, 679, 263: 679, 679, 679, 679, 679, 274: 679, 679, 679, 679, 679, 679, 679, 679, 284: 679, 679, 679, 288: 679, 679, 679, 679, 679, 679, 295: 679}, - {678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 209: 678, 211: 678, 243: 678, 678, 678, 247: 678, 678, 678, 678, 678, 253: 678, 678, 678, 678, 258: 678, 678, 678, 263: 678, 678, 678, 678, 678, 274: 678, 678, 678, 678, 678, 678, 678, 678, 284: 678, 678, 678, 288: 678, 678, 678, 678, 678, 678, 295: 678}, - // 75 - {677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 209: 677, 211: 677, 243: 677, 677, 677, 247: 677, 677, 677, 677, 677, 253: 677, 677, 677, 677, 258: 677, 677, 677, 263: 677, 677, 677, 677, 677, 274: 677, 677, 677, 677, 677, 677, 677, 677, 284: 677, 677, 677, 288: 677, 677, 677, 677, 677, 677, 295: 677}, - {676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 209: 676, 211: 676, 243: 676, 676, 676, 247: 676, 676, 676, 676, 676, 253: 676, 676, 676, 676, 258: 676, 676, 676, 263: 676, 676, 676, 676, 676, 274: 676, 676, 676, 676, 676, 676, 676, 676, 284: 676, 676, 676, 288: 676, 676, 676, 676, 676, 676, 295: 676}, - {675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 209: 675, 211: 675, 243: 675, 675, 675, 247: 675, 675, 675, 675, 675, 253: 675, 675, 675, 675, 258: 675, 675, 675, 263: 675, 675, 675, 675, 675, 274: 675, 675, 675, 675, 675, 675, 675, 675, 284: 675, 675, 675, 288: 675, 675, 675, 675, 675, 675, 295: 675}, - {674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 209: 674, 211: 674, 243: 674, 674, 674, 247: 674, 674, 674, 674, 674, 253: 674, 674, 674, 674, 258: 674, 674, 674, 263: 674, 674, 674, 674, 674, 274: 674, 674, 674, 674, 674, 674, 674, 674, 284: 674, 674, 674, 288: 674, 674, 674, 674, 674, 674, 295: 674}, - {673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 209: 673, 211: 673, 243: 673, 673, 673, 247: 673, 673, 673, 673, 673, 253: 673, 673, 673, 673, 258: 673, 673, 673, 263: 673, 673, 673, 673, 673, 274: 673, 673, 673, 673, 673, 673, 673, 673, 284: 673, 673, 673, 288: 673, 673, 673, 673, 673, 673, 295: 673}, - // 80 - {672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 209: 672, 211: 672, 243: 672, 672, 672, 247: 672, 672, 672, 672, 672, 253: 672, 672, 672, 672, 258: 672, 672, 672, 263: 672, 672, 672, 672, 672, 274: 672, 672, 672, 672, 672, 672, 672, 672, 284: 672, 672, 672, 288: 672, 672, 672, 672, 672, 672, 295: 672}, - {671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 209: 671, 211: 671, 243: 671, 671, 671, 247: 671, 671, 671, 671, 671, 253: 671, 671, 671, 671, 258: 671, 671, 671, 263: 671, 671, 671, 671, 671, 274: 671, 671, 671, 671, 671, 671, 671, 671, 284: 671, 671, 671, 288: 671, 671, 671, 671, 671, 671, 295: 671}, - {670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 209: 670, 211: 670, 243: 670, 670, 670, 247: 670, 670, 670, 670, 670, 253: 670, 670, 670, 670, 258: 670, 670, 670, 263: 670, 670, 670, 670, 670, 274: 670, 670, 670, 670, 670, 670, 670, 670, 284: 670, 670, 670, 288: 670, 670, 670, 670, 670, 670, 295: 670}, - {669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 209: 669, 211: 669, 243: 669, 669, 669, 247: 669, 669, 669, 669, 669, 253: 669, 669, 669, 669, 258: 669, 669, 669, 263: 669, 669, 669, 669, 669, 274: 669, 669, 669, 669, 669, 669, 669, 669, 284: 669, 669, 669, 288: 669, 669, 669, 669, 669, 669, 295: 669}, - {668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 209: 668, 211: 668, 243: 668, 668, 668, 247: 668, 668, 668, 668, 668, 253: 668, 668, 668, 668, 258: 668, 668, 668, 263: 668, 668, 668, 668, 668, 274: 668, 668, 668, 668, 668, 668, 668, 668, 284: 668, 668, 668, 288: 668, 668, 668, 668, 668, 668, 295: 668}, - // 85 - {667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 209: 667, 211: 667, 243: 667, 667, 667, 247: 667, 667, 667, 667, 667, 253: 667, 667, 667, 667, 258: 667, 667, 667, 263: 667, 667, 667, 667, 667, 274: 667, 667, 667, 667, 667, 667, 667, 667, 284: 667, 667, 667, 288: 667, 667, 667, 667, 667, 667, 295: 667}, - {666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 209: 666, 211: 666, 243: 666, 666, 666, 247: 666, 666, 666, 666, 666, 253: 666, 666, 666, 666, 258: 666, 666, 666, 263: 666, 666, 666, 666, 666, 274: 666, 666, 666, 666, 666, 666, 666, 666, 284: 666, 666, 666, 288: 666, 666, 666, 666, 666, 666, 295: 666}, - {665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 209: 665, 211: 665, 243: 665, 665, 665, 247: 665, 665, 665, 665, 665, 253: 665, 665, 665, 665, 258: 665, 665, 665, 263: 665, 665, 665, 665, 665, 274: 665, 665, 665, 665, 665, 665, 665, 665, 284: 665, 665, 665, 288: 665, 665, 665, 665, 665, 665, 295: 665}, - {664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 209: 664, 211: 664, 243: 664, 664, 664, 247: 664, 664, 664, 664, 664, 253: 664, 664, 664, 664, 258: 664, 664, 664, 263: 664, 664, 664, 664, 664, 274: 664, 664, 664, 664, 664, 664, 664, 664, 284: 664, 664, 664, 288: 664, 664, 664, 664, 664, 664, 295: 664}, - {663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 209: 663, 211: 663, 243: 663, 663, 663, 247: 663, 663, 663, 663, 663, 253: 663, 663, 663, 663, 258: 663, 663, 663, 263: 663, 663, 663, 663, 663, 274: 663, 663, 663, 663, 663, 663, 663, 663, 284: 663, 663, 663, 288: 663, 663, 663, 663, 663, 663, 295: 663}, - // 90 - {662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 209: 662, 211: 662, 243: 662, 662, 662, 247: 662, 662, 662, 662, 662, 253: 662, 662, 662, 662, 258: 662, 662, 662, 263: 662, 662, 662, 662, 662, 274: 662, 662, 662, 662, 662, 662, 662, 662, 284: 662, 662, 662, 288: 662, 662, 662, 662, 662, 662, 295: 662}, - {661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 209: 661, 211: 661, 243: 661, 661, 661, 247: 661, 661, 661, 661, 661, 253: 661, 661, 661, 661, 258: 661, 661, 661, 263: 661, 661, 661, 661, 661, 274: 661, 661, 661, 661, 661, 661, 661, 661, 284: 661, 661, 661, 288: 661, 661, 661, 661, 661, 661, 295: 661}, - {660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 209: 660, 211: 660, 243: 660, 660, 660, 247: 660, 660, 660, 660, 660, 253: 660, 660, 660, 660, 258: 660, 660, 660, 263: 660, 660, 660, 660, 660, 274: 660, 660, 660, 660, 660, 660, 660, 660, 284: 660, 660, 660, 288: 660, 660, 660, 660, 660, 660, 295: 660}, - {659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 209: 659, 211: 659, 243: 659, 659, 659, 247: 659, 659, 659, 659, 659, 253: 659, 659, 659, 659, 258: 659, 659, 659, 263: 659, 659, 659, 659, 659, 274: 659, 659, 659, 659, 659, 659, 659, 659, 284: 659, 659, 659, 288: 659, 659, 659, 659, 659, 659, 295: 659}, - {658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 209: 658, 211: 658, 243: 658, 658, 658, 247: 658, 658, 658, 658, 658, 253: 658, 658, 658, 658, 258: 658, 658, 658, 263: 658, 658, 658, 658, 658, 274: 658, 658, 658, 658, 658, 658, 658, 658, 284: 658, 658, 658, 288: 658, 658, 658, 658, 658, 658, 295: 658}, - // 95 - {657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 209: 657, 211: 657, 243: 657, 657, 657, 247: 657, 657, 657, 657, 657, 253: 657, 657, 657, 657, 258: 657, 657, 657, 263: 657, 657, 657, 657, 657, 274: 657, 657, 657, 657, 657, 657, 657, 657, 284: 657, 657, 657, 288: 657, 657, 657, 657, 657, 657, 295: 657}, - {656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 209: 656, 211: 656, 243: 656, 656, 656, 247: 656, 656, 656, 656, 656, 253: 656, 656, 656, 656, 258: 656, 656, 656, 263: 656, 656, 656, 656, 656, 274: 656, 656, 656, 656, 656, 656, 656, 656, 284: 656, 656, 656, 288: 656, 656, 656, 656, 656, 656, 295: 656}, - {655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 209: 655, 211: 655, 243: 655, 655, 655, 247: 655, 655, 655, 655, 655, 253: 655, 655, 655, 655, 258: 655, 655, 655, 263: 655, 655, 655, 655, 655, 274: 655, 655, 655, 655, 655, 655, 655, 655, 284: 655, 655, 655, 288: 655, 655, 655, 655, 655, 655, 295: 655}, - {654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 209: 654, 211: 654, 243: 654, 654, 654, 247: 654, 654, 654, 654, 654, 253: 654, 654, 654, 654, 258: 654, 654, 654, 263: 654, 654, 654, 654, 654, 274: 654, 654, 654, 654, 654, 654, 654, 654, 284: 654, 654, 654, 288: 654, 654, 654, 654, 654, 654, 295: 654}, - {653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 209: 653, 211: 653, 243: 653, 653, 653, 247: 653, 653, 653, 653, 653, 253: 653, 653, 653, 653, 258: 653, 653, 653, 263: 653, 653, 653, 653, 653, 274: 653, 653, 653, 653, 653, 653, 653, 653, 284: 653, 653, 653, 288: 653, 653, 653, 653, 653, 653, 295: 653}, - // 100 - {652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 209: 652, 211: 652, 243: 652, 652, 652, 247: 652, 652, 652, 652, 652, 253: 652, 652, 652, 652, 258: 652, 652, 652, 263: 652, 652, 652, 652, 652, 274: 652, 652, 652, 652, 652, 652, 652, 652, 284: 652, 652, 652, 288: 652, 652, 652, 652, 652, 652, 295: 652}, - {651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 209: 651, 211: 651, 243: 651, 651, 651, 247: 651, 651, 651, 651, 651, 253: 651, 651, 651, 651, 258: 651, 651, 651, 263: 651, 651, 651, 651, 651, 274: 651, 651, 651, 651, 651, 651, 651, 651, 284: 651, 651, 651, 288: 651, 651, 651, 651, 651, 651, 295: 651}, - {650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 209: 650, 211: 650, 243: 650, 650, 650, 247: 650, 650, 650, 650, 650, 253: 650, 650, 650, 650, 258: 650, 650, 650, 263: 650, 650, 650, 650, 650, 274: 650, 650, 650, 650, 650, 650, 650, 650, 284: 650, 650, 650, 288: 650, 650, 650, 650, 650, 650, 295: 650}, - {649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 209: 649, 211: 649, 243: 649, 649, 649, 247: 649, 649, 649, 649, 649, 253: 649, 649, 649, 649, 258: 649, 649, 649, 263: 649, 649, 649, 649, 649, 274: 649, 649, 649, 649, 649, 649, 649, 649, 284: 649, 649, 649, 288: 649, 649, 649, 649, 649, 649, 295: 649}, - {648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 209: 648, 211: 648, 243: 648, 648, 648, 247: 648, 648, 648, 648, 648, 253: 648, 648, 648, 648, 258: 648, 648, 648, 263: 648, 648, 648, 648, 648, 274: 648, 648, 648, 648, 648, 648, 648, 648, 284: 648, 648, 648, 288: 648, 648, 648, 648, 648, 648, 295: 648}, - // 105 - {647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 209: 647, 211: 647, 243: 647, 647, 647, 247: 647, 647, 647, 647, 647, 253: 647, 647, 647, 647, 258: 647, 647, 647, 263: 647, 647, 647, 647, 647, 274: 647, 647, 647, 647, 647, 647, 647, 647, 284: 647, 647, 647, 288: 647, 647, 647, 647, 647, 647, 295: 647}, - {646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 209: 646, 211: 646, 243: 646, 646, 646, 247: 646, 646, 646, 646, 646, 253: 646, 646, 646, 646, 258: 646, 646, 646, 263: 646, 646, 646, 646, 646, 274: 646, 646, 646, 646, 646, 646, 646, 646, 284: 646, 646, 646, 288: 646, 646, 646, 646, 646, 646, 295: 646}, - {645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 209: 645, 211: 645, 243: 645, 645, 645, 247: 645, 645, 645, 645, 645, 253: 645, 645, 645, 645, 258: 645, 645, 645, 263: 645, 645, 645, 645, 645, 274: 645, 645, 645, 645, 645, 645, 645, 645, 284: 645, 645, 645, 288: 645, 645, 645, 645, 645, 645, 295: 645}, - {644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 209: 644, 211: 644, 243: 644, 644, 644, 247: 644, 644, 644, 644, 644, 253: 644, 644, 644, 644, 258: 644, 644, 644, 263: 644, 644, 644, 644, 644, 274: 644, 644, 644, 644, 644, 644, 644, 644, 284: 644, 644, 644, 288: 644, 644, 644, 644, 644, 644, 295: 644}, - {643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 209: 643, 211: 643, 243: 643, 643, 643, 247: 643, 643, 643, 643, 643, 253: 643, 643, 643, 643, 258: 643, 643, 643, 263: 643, 643, 643, 643, 643, 274: 643, 643, 643, 643, 643, 643, 643, 643, 284: 643, 643, 643, 288: 643, 643, 643, 643, 643, 643, 295: 643}, - // 110 - {642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 209: 642, 211: 642, 243: 642, 642, 642, 247: 642, 642, 642, 642, 642, 253: 642, 642, 642, 642, 258: 642, 642, 642, 263: 642, 642, 642, 642, 642, 274: 642, 642, 642, 642, 642, 642, 642, 642, 284: 642, 642, 642, 288: 642, 642, 642, 642, 642, 642, 295: 642}, - {641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 209: 641, 211: 641, 243: 641, 641, 641, 247: 641, 641, 641, 641, 641, 253: 641, 641, 641, 641, 258: 641, 641, 641, 263: 641, 641, 641, 641, 641, 274: 641, 641, 641, 641, 641, 641, 641, 641, 284: 641, 641, 641, 288: 641, 641, 641, 641, 641, 641, 295: 641}, - {640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 209: 640, 211: 640, 243: 640, 640, 640, 247: 640, 640, 640, 640, 640, 253: 640, 640, 640, 640, 258: 640, 640, 640, 263: 640, 640, 640, 640, 640, 274: 640, 640, 640, 640, 640, 640, 640, 640, 284: 640, 640, 640, 288: 640, 640, 640, 640, 640, 640, 295: 640}, - {639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 209: 639, 211: 639, 243: 639, 639, 639, 247: 639, 639, 639, 639, 639, 253: 639, 639, 639, 639, 258: 639, 639, 639, 263: 639, 639, 639, 639, 639, 274: 639, 639, 639, 639, 639, 639, 639, 639, 284: 639, 639, 639, 288: 639, 639, 639, 639, 639, 639, 295: 639}, - {638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 209: 638, 211: 638, 243: 638, 638, 638, 247: 638, 638, 638, 638, 638, 253: 638, 638, 638, 638, 258: 638, 638, 638, 263: 638, 638, 638, 638, 638, 274: 638, 638, 638, 638, 638, 638, 638, 638, 284: 638, 638, 638, 288: 638, 638, 638, 638, 638, 638, 295: 638}, - // 115 - {637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 209: 637, 211: 637, 243: 637, 637, 637, 247: 637, 637, 637, 637, 637, 253: 637, 637, 637, 637, 258: 637, 637, 637, 263: 637, 637, 637, 637, 637, 274: 637, 637, 637, 637, 637, 637, 637, 637, 284: 637, 637, 637, 288: 637, 637, 637, 637, 637, 637, 295: 637}, - {636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 209: 636, 211: 636, 243: 636, 636, 636, 247: 636, 636, 636, 636, 636, 253: 636, 636, 636, 636, 258: 636, 636, 636, 263: 636, 636, 636, 636, 636, 274: 636, 636, 636, 636, 636, 636, 636, 636, 284: 636, 636, 636, 288: 636, 636, 636, 636, 636, 636, 295: 636}, - {635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 209: 635, 211: 635, 243: 635, 635, 635, 247: 635, 635, 635, 635, 635, 253: 635, 635, 635, 635, 258: 635, 635, 635, 263: 635, 635, 635, 635, 635, 274: 635, 635, 635, 635, 635, 635, 635, 635, 284: 635, 635, 635, 288: 635, 635, 635, 635, 635, 635, 295: 635}, - {634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 209: 634, 211: 634, 243: 634, 634, 634, 247: 634, 634, 634, 634, 634, 253: 634, 634, 634, 634, 258: 634, 634, 634, 263: 634, 634, 634, 634, 634, 274: 634, 634, 634, 634, 634, 634, 634, 634, 284: 634, 634, 634, 288: 634, 634, 634, 634, 634, 634, 295: 634}, - {633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 209: 633, 211: 633, 243: 633, 633, 633, 247: 633, 633, 633, 633, 633, 253: 633, 633, 633, 633, 258: 633, 633, 633, 263: 633, 633, 633, 633, 633, 274: 633, 633, 633, 633, 633, 633, 633, 633, 284: 633, 633, 633, 288: 633, 633, 633, 633, 633, 633, 295: 633}, - // 120 - {632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 209: 632, 211: 632, 243: 632, 632, 632, 247: 632, 632, 632, 632, 632, 253: 632, 632, 632, 632, 258: 632, 632, 632, 263: 632, 632, 632, 632, 632, 274: 632, 632, 632, 632, 632, 632, 632, 632, 284: 632, 632, 632, 288: 632, 632, 632, 632, 632, 632, 295: 632}, - {631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 209: 631, 211: 631, 243: 631, 631, 631, 247: 631, 631, 631, 631, 631, 253: 631, 631, 631, 631, 258: 631, 631, 631, 263: 631, 631, 631, 631, 631, 274: 631, 631, 631, 631, 631, 631, 631, 631, 284: 631, 631, 631, 288: 631, 631, 631, 631, 631, 631, 295: 631}, - {630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 209: 630, 211: 630, 243: 630, 630, 630, 247: 630, 630, 630, 630, 630, 253: 630, 630, 630, 630, 258: 630, 630, 630, 263: 630, 630, 630, 630, 630, 274: 630, 630, 630, 630, 630, 630, 630, 630, 284: 630, 630, 630, 288: 630, 630, 630, 630, 630, 630, 295: 630}, - {629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 209: 629, 211: 629, 243: 629, 629, 629, 247: 629, 629, 629, 629, 629, 253: 629, 629, 629, 629, 258: 629, 629, 629, 263: 629, 629, 629, 629, 629, 274: 629, 629, 629, 629, 629, 629, 629, 629, 284: 629, 629, 629, 288: 629, 629, 629, 629, 629, 629, 295: 629}, - {628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 209: 628, 211: 628, 243: 628, 628, 628, 247: 628, 628, 628, 628, 628, 253: 628, 628, 628, 628, 258: 628, 628, 628, 263: 628, 628, 628, 628, 628, 274: 628, 628, 628, 628, 628, 628, 628, 628, 284: 628, 628, 628, 288: 628, 628, 628, 628, 628, 628, 295: 628}, - // 125 - {627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 209: 627, 211: 627, 243: 627, 627, 627, 247: 627, 627, 627, 627, 627, 253: 627, 627, 627, 627, 258: 627, 627, 627, 263: 627, 627, 627, 627, 627, 274: 627, 627, 627, 627, 627, 627, 627, 627, 284: 627, 627, 627, 288: 627, 627, 627, 627, 627, 627, 295: 627}, - {626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 209: 626, 211: 626, 243: 626, 626, 626, 247: 626, 626, 626, 626, 626, 253: 626, 626, 626, 626, 258: 626, 626, 626, 263: 626, 626, 626, 626, 626, 274: 626, 626, 626, 626, 626, 626, 626, 626, 284: 626, 626, 626, 288: 626, 626, 626, 626, 626, 626, 295: 626}, - {625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 209: 625, 211: 625, 243: 625, 625, 625, 247: 625, 625, 625, 625, 625, 253: 625, 625, 625, 625, 258: 625, 625, 625, 263: 625, 625, 625, 625, 625, 274: 625, 625, 625, 625, 625, 625, 625, 625, 284: 625, 625, 625, 288: 625, 625, 625, 625, 625, 625, 295: 625}, - {624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 209: 624, 211: 624, 243: 624, 624, 624, 247: 624, 624, 624, 624, 624, 253: 624, 624, 624, 624, 258: 624, 624, 624, 263: 624, 624, 624, 624, 624, 274: 624, 624, 624, 624, 624, 624, 624, 624, 284: 624, 624, 624, 288: 624, 624, 624, 624, 624, 624, 295: 624}, - {623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 209: 623, 211: 623, 243: 623, 623, 623, 247: 623, 623, 623, 623, 623, 253: 623, 623, 623, 623, 258: 623, 623, 623, 263: 623, 623, 623, 623, 623, 274: 623, 623, 623, 623, 623, 623, 623, 623, 284: 623, 623, 623, 288: 623, 623, 623, 623, 623, 623, 295: 623}, - // 130 - {622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 209: 622, 211: 622, 243: 622, 622, 622, 247: 622, 622, 622, 622, 622, 253: 622, 622, 622, 622, 258: 622, 622, 622, 263: 622, 622, 622, 622, 622, 274: 622, 622, 622, 622, 622, 622, 622, 622, 284: 622, 622, 622, 288: 622, 622, 622, 622, 622, 622, 295: 622}, - {621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 209: 621, 211: 621, 243: 621, 621, 621, 247: 621, 621, 621, 621, 621, 253: 621, 621, 621, 621, 258: 621, 621, 621, 263: 621, 621, 621, 621, 621, 274: 621, 621, 621, 621, 621, 621, 621, 621, 284: 621, 621, 621, 288: 621, 621, 621, 621, 621, 621, 295: 621}, - {620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 209: 620, 211: 620, 243: 620, 620, 620, 247: 620, 620, 620, 620, 620, 253: 620, 620, 620, 620, 258: 620, 620, 620, 263: 620, 620, 620, 620, 620, 274: 620, 620, 620, 620, 620, 620, 620, 620, 284: 620, 620, 620, 288: 620, 620, 620, 620, 620, 620, 295: 620}, - {619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 209: 619, 211: 619, 243: 619, 619, 619, 247: 619, 619, 619, 619, 619, 253: 619, 619, 619, 619, 258: 619, 619, 619, 263: 619, 619, 619, 619, 619, 274: 619, 619, 619, 619, 619, 619, 619, 619, 284: 619, 619, 619, 288: 619, 619, 619, 619, 619, 619, 295: 619}, - {618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 209: 618, 211: 618, 243: 618, 618, 618, 247: 618, 618, 618, 618, 618, 253: 618, 618, 618, 618, 258: 618, 618, 618, 263: 618, 618, 618, 618, 618, 274: 618, 618, 618, 618, 618, 618, 618, 618, 284: 618, 618, 618, 288: 618, 618, 618, 618, 618, 618, 295: 618}, - // 135 - {617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 209: 617, 211: 617, 243: 617, 617, 617, 247: 617, 617, 617, 617, 617, 253: 617, 617, 617, 617, 258: 617, 617, 617, 263: 617, 617, 617, 617, 617, 274: 617, 617, 617, 617, 617, 617, 617, 617, 284: 617, 617, 617, 288: 617, 617, 617, 617, 617, 617, 295: 617}, - {616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 209: 616, 211: 616, 243: 616, 616, 616, 247: 616, 616, 616, 616, 616, 253: 616, 616, 616, 616, 258: 616, 616, 616, 263: 616, 616, 616, 616, 616, 274: 616, 616, 616, 616, 616, 616, 616, 616, 284: 616, 616, 616, 288: 616, 616, 616, 616, 616, 616, 295: 616}, - {615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 209: 615, 211: 615, 243: 615, 615, 615, 247: 615, 615, 615, 615, 615, 253: 615, 615, 615, 615, 258: 615, 615, 615, 263: 615, 615, 615, 615, 615, 274: 615, 615, 615, 615, 615, 615, 615, 615, 284: 615, 615, 615, 288: 615, 615, 615, 615, 615, 615, 295: 615}, - {614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 209: 614, 211: 614, 243: 614, 614, 614, 247: 614, 614, 614, 614, 614, 253: 614, 614, 614, 614, 258: 614, 614, 614, 263: 614, 614, 614, 614, 614, 274: 614, 614, 614, 614, 614, 614, 614, 614, 284: 614, 614, 614, 288: 614, 614, 614, 614, 614, 614, 295: 614}, - {613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 209: 613, 211: 613, 243: 613, 613, 613, 247: 613, 613, 613, 613, 613, 253: 613, 613, 613, 613, 258: 613, 613, 613, 263: 613, 613, 613, 613, 613, 274: 613, 613, 613, 613, 613, 613, 613, 613, 284: 613, 613, 613, 288: 613, 613, 613, 613, 613, 613, 295: 613}, - // 140 - {612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 209: 612, 211: 612, 243: 612, 612, 612, 247: 612, 612, 612, 612, 612, 253: 612, 612, 612, 612, 258: 612, 612, 612, 263: 612, 612, 612, 612, 612, 274: 612, 612, 612, 612, 612, 612, 612, 612, 284: 612, 612, 612, 288: 612, 612, 612, 612, 612, 612, 295: 612}, - {611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 209: 611, 211: 611, 243: 611, 611, 611, 247: 611, 611, 611, 611, 611, 253: 611, 611, 611, 611, 258: 611, 611, 611, 263: 611, 611, 611, 611, 611, 274: 611, 611, 611, 611, 611, 611, 611, 611, 284: 611, 611, 611, 288: 611, 611, 611, 611, 611, 611, 295: 611}, - {610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 209: 610, 211: 610, 243: 610, 610, 610, 247: 610, 610, 610, 610, 610, 253: 610, 610, 610, 610, 258: 610, 610, 610, 263: 610, 610, 610, 610, 610, 274: 610, 610, 610, 610, 610, 610, 610, 610, 284: 610, 610, 610, 288: 610, 610, 610, 610, 610, 610, 295: 610}, - {609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 209: 609, 211: 609, 243: 609, 609, 609, 247: 609, 609, 609, 609, 609, 253: 609, 609, 609, 609, 258: 609, 609, 609, 263: 609, 609, 609, 609, 609, 274: 609, 609, 609, 609, 609, 609, 609, 609, 284: 609, 609, 609, 288: 609, 609, 609, 609, 609, 609, 295: 609}, - {608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 209: 608, 211: 608, 243: 608, 608, 608, 247: 608, 608, 608, 608, 608, 253: 608, 608, 608, 608, 258: 608, 608, 608, 263: 608, 608, 608, 608, 608, 274: 608, 608, 608, 608, 608, 608, 608, 608, 284: 608, 608, 608, 288: 608, 608, 608, 608, 608, 608, 295: 608}, - // 145 - {607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 209: 607, 211: 607, 243: 607, 607, 607, 247: 607, 607, 607, 607, 607, 253: 607, 607, 607, 607, 258: 607, 607, 607, 263: 607, 607, 607, 607, 607, 274: 607, 607, 607, 607, 607, 607, 607, 607, 284: 607, 607, 607, 288: 607, 607, 607, 607, 607, 607, 295: 607}, - {606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 209: 606, 211: 606, 243: 606, 606, 606, 247: 606, 606, 606, 606, 606, 253: 606, 606, 606, 606, 258: 606, 606, 606, 263: 606, 606, 606, 606, 606, 274: 606, 606, 606, 606, 606, 606, 606, 606, 284: 606, 606, 606, 288: 606, 606, 606, 606, 606, 606, 295: 606}, - {605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 209: 605, 211: 605, 243: 605, 605, 605, 247: 605, 605, 605, 605, 605, 253: 605, 605, 605, 605, 258: 605, 605, 605, 263: 605, 605, 605, 605, 605, 274: 605, 605, 605, 605, 605, 605, 605, 605, 284: 605, 605, 605, 288: 605, 605, 605, 605, 605, 605, 295: 605}, - {604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 209: 604, 211: 604, 243: 604, 604, 604, 247: 604, 604, 604, 604, 604, 253: 604, 604, 604, 604, 258: 604, 604, 604, 263: 604, 604, 604, 604, 604, 274: 604, 604, 604, 604, 604, 604, 604, 604, 284: 604, 604, 604, 288: 604, 604, 604, 604, 604, 604, 295: 604}, - {603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 209: 603, 211: 603, 243: 603, 603, 603, 247: 603, 603, 603, 603, 603, 253: 603, 603, 603, 603, 258: 603, 603, 603, 263: 603, 603, 603, 603, 603, 274: 603, 603, 603, 603, 603, 603, 603, 603, 284: 603, 603, 603, 288: 603, 603, 603, 603, 603, 603, 295: 603}, - // 150 - {602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 209: 602, 211: 602, 243: 602, 602, 602, 247: 602, 602, 602, 602, 602, 253: 602, 602, 602, 602, 258: 602, 602, 602, 263: 602, 602, 602, 602, 602, 274: 602, 602, 602, 602, 602, 602, 602, 602, 284: 602, 602, 602, 288: 602, 602, 602, 602, 602, 602, 295: 602}, - {601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 209: 601, 211: 601, 243: 601, 601, 601, 247: 601, 601, 601, 601, 601, 253: 601, 601, 601, 601, 258: 601, 601, 601, 263: 601, 601, 601, 601, 601, 274: 601, 601, 601, 601, 601, 601, 601, 601, 284: 601, 601, 601, 288: 601, 601, 601, 601, 601, 601, 295: 601}, - {600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 209: 600, 211: 600, 243: 600, 600, 600, 247: 600, 600, 600, 600, 600, 253: 600, 600, 600, 600, 258: 600, 600, 600, 263: 600, 600, 600, 600, 600, 274: 600, 600, 600, 600, 600, 600, 600, 600, 284: 600, 600, 600, 288: 600, 600, 600, 600, 600, 600, 295: 600}, - {599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 209: 599, 211: 599, 243: 599, 599, 599, 247: 599, 599, 599, 599, 599, 253: 599, 599, 599, 599, 258: 599, 599, 599, 263: 599, 599, 599, 599, 599, 274: 599, 599, 599, 599, 599, 599, 599, 599, 284: 599, 599, 599, 288: 599, 599, 599, 599, 599, 599, 295: 599}, - {598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 209: 598, 211: 598, 243: 598, 598, 598, 247: 598, 598, 598, 598, 598, 253: 598, 598, 598, 598, 258: 598, 598, 598, 263: 598, 598, 598, 598, 598, 274: 598, 598, 598, 598, 598, 598, 598, 598, 284: 598, 598, 598, 288: 598, 598, 598, 598, 598, 598, 295: 598}, - // 155 - {597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 209: 597, 211: 597, 243: 597, 597, 597, 247: 597, 597, 597, 597, 597, 253: 597, 597, 597, 597, 258: 597, 597, 597, 263: 597, 597, 597, 597, 597, 274: 597, 597, 597, 597, 597, 597, 597, 597, 284: 597, 597, 597, 288: 597, 597, 597, 597, 597, 597, 295: 597}, - {596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 209: 596, 211: 596, 243: 596, 596, 596, 247: 596, 596, 596, 596, 596, 253: 596, 596, 596, 596, 258: 596, 596, 596, 263: 596, 596, 596, 596, 596, 274: 596, 596, 596, 596, 596, 596, 596, 596, 284: 596, 596, 596, 288: 596, 596, 596, 596, 596, 596, 295: 596}, - {595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 209: 595, 211: 595, 243: 595, 595, 595, 247: 595, 595, 595, 595, 595, 253: 595, 595, 595, 595, 258: 595, 595, 595, 263: 595, 595, 595, 595, 595, 274: 595, 595, 595, 595, 595, 595, 595, 595, 284: 595, 595, 595, 288: 595, 595, 595, 595, 595, 595, 295: 595}, - {594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 209: 594, 211: 594, 243: 594, 594, 594, 247: 594, 594, 594, 594, 594, 253: 594, 594, 594, 594, 258: 594, 594, 594, 263: 594, 594, 594, 594, 594, 274: 594, 594, 594, 594, 594, 594, 594, 594, 284: 594, 594, 594, 288: 594, 594, 594, 594, 594, 594, 295: 594}, - {593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 209: 593, 211: 593, 243: 593, 593, 593, 247: 593, 593, 593, 593, 593, 253: 593, 593, 593, 593, 258: 593, 593, 593, 263: 593, 593, 593, 593, 593, 274: 593, 593, 593, 593, 593, 593, 593, 593, 284: 593, 593, 593, 288: 593, 593, 593, 593, 593, 593, 295: 593}, - // 160 - {592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 209: 592, 211: 592, 243: 592, 592, 592, 247: 592, 592, 592, 592, 592, 253: 592, 592, 592, 592, 258: 592, 592, 592, 263: 592, 592, 592, 592, 592, 274: 592, 592, 592, 592, 592, 592, 592, 592, 284: 592, 592, 592, 288: 592, 592, 592, 592, 592, 592, 295: 592}, - {591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 209: 591, 211: 591, 243: 591, 591, 591, 247: 591, 591, 591, 591, 591, 253: 591, 591, 591, 591, 258: 591, 591, 591, 263: 591, 591, 591, 591, 591, 274: 591, 591, 591, 591, 591, 591, 591, 591, 284: 591, 591, 591, 288: 591, 591, 591, 591, 591, 591, 295: 591}, - {590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 209: 590, 211: 590, 243: 590, 590, 590, 247: 590, 590, 590, 590, 590, 253: 590, 590, 590, 590, 258: 590, 590, 590, 263: 590, 590, 590, 590, 590, 274: 590, 590, 590, 590, 590, 590, 590, 590, 284: 590, 590, 590, 288: 590, 590, 590, 590, 590, 590, 295: 590}, - {589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 209: 589, 211: 589, 243: 589, 589, 589, 247: 589, 589, 589, 589, 589, 253: 589, 589, 589, 589, 258: 589, 589, 589, 263: 589, 589, 589, 589, 589, 274: 589, 589, 589, 589, 589, 589, 589, 589, 284: 589, 589, 589, 288: 589, 589, 589, 589, 589, 589, 295: 589}, - {588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 209: 588, 211: 588, 243: 588, 588, 588, 247: 588, 588, 588, 588, 588, 253: 588, 588, 588, 588, 258: 588, 588, 588, 263: 588, 588, 588, 588, 588, 274: 588, 588, 588, 588, 588, 588, 588, 588, 284: 588, 588, 588, 288: 588, 588, 588, 588, 588, 588, 295: 588}, - // 165 - {587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 209: 587, 211: 587, 243: 587, 587, 587, 247: 587, 587, 587, 587, 587, 253: 587, 587, 587, 587, 258: 587, 587, 587, 263: 587, 587, 587, 587, 587, 274: 587, 587, 587, 587, 587, 587, 587, 587, 284: 587, 587, 587, 288: 587, 587, 587, 587, 587, 587, 295: 587}, - {586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 209: 586, 211: 586, 243: 586, 586, 586, 247: 586, 586, 586, 586, 586, 253: 586, 586, 586, 586, 258: 586, 586, 586, 263: 586, 586, 586, 586, 586, 274: 586, 586, 586, 586, 586, 586, 586, 586, 284: 586, 586, 586, 288: 586, 586, 586, 586, 586, 586, 295: 586}, - {585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 209: 585, 211: 585, 243: 585, 585, 585, 247: 585, 585, 585, 585, 585, 253: 585, 585, 585, 585, 258: 585, 585, 585, 263: 585, 585, 585, 585, 585, 274: 585, 585, 585, 585, 585, 585, 585, 585, 284: 585, 585, 585, 288: 585, 585, 585, 585, 585, 585, 295: 585}, - {584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 209: 584, 211: 584, 243: 584, 584, 584, 247: 584, 584, 584, 584, 584, 253: 584, 584, 584, 584, 258: 584, 584, 584, 263: 584, 584, 584, 584, 584, 274: 584, 584, 584, 584, 584, 584, 584, 584, 284: 584, 584, 584, 288: 584, 584, 584, 584, 584, 584, 295: 584}, - {583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 209: 583, 211: 583, 243: 583, 583, 583, 247: 583, 583, 583, 583, 583, 253: 583, 583, 583, 583, 258: 583, 583, 583, 263: 583, 583, 583, 583, 583, 274: 583, 583, 583, 583, 583, 583, 583, 583, 284: 583, 583, 583, 288: 583, 583, 583, 583, 583, 583, 295: 583}, - // 170 - {582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 209: 582, 211: 582, 243: 582, 582, 582, 247: 582, 582, 582, 582, 582, 253: 582, 582, 582, 582, 258: 582, 582, 582, 263: 582, 582, 582, 582, 582, 274: 582, 582, 582, 582, 582, 582, 582, 582, 284: 582, 582, 582, 288: 582, 582, 582, 582, 582, 582, 295: 582}, - {581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 209: 581, 211: 581, 243: 581, 581, 581, 247: 581, 581, 581, 581, 581, 253: 581, 581, 581, 581, 258: 581, 581, 581, 263: 581, 581, 581, 581, 581, 274: 581, 581, 581, 581, 581, 581, 581, 581, 284: 581, 581, 581, 288: 581, 581, 581, 581, 581, 581, 295: 581}, - {580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 209: 580, 211: 580, 243: 580, 580, 580, 247: 580, 580, 580, 580, 580, 253: 580, 580, 580, 580, 258: 580, 580, 580, 263: 580, 580, 580, 580, 580, 274: 580, 580, 580, 580, 580, 580, 580, 580, 284: 580, 580, 580, 288: 580, 580, 580, 580, 580, 580, 295: 580}, - {579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 209: 579, 211: 579, 243: 579, 579, 579, 247: 579, 579, 579, 579, 579, 253: 579, 579, 579, 579, 258: 579, 579, 579, 263: 579, 579, 579, 579, 579, 274: 579, 579, 579, 579, 579, 579, 579, 579, 284: 579, 579, 579, 288: 579, 579, 579, 579, 579, 579, 295: 579}, - {578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 209: 578, 211: 578, 243: 578, 578, 578, 247: 578, 578, 578, 578, 578, 253: 578, 578, 578, 578, 258: 578, 578, 578, 263: 578, 578, 578, 578, 578, 274: 578, 578, 578, 578, 578, 578, 578, 578, 284: 578, 578, 578, 288: 578, 578, 578, 578, 578, 578, 295: 578}, - // 175 - {577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 209: 577, 211: 577, 243: 577, 577, 577, 247: 577, 577, 577, 577, 577, 253: 577, 577, 577, 577, 258: 577, 577, 577, 263: 577, 577, 577, 577, 577, 274: 577, 577, 577, 577, 577, 577, 577, 577, 284: 577, 577, 577, 288: 577, 577, 577, 577, 577, 577, 295: 577}, - {576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 209: 576, 211: 576, 243: 576, 576, 576, 247: 576, 576, 576, 576, 576, 253: 576, 576, 576, 576, 258: 576, 576, 576, 263: 576, 576, 576, 576, 576, 274: 576, 576, 576, 576, 576, 576, 576, 576, 284: 576, 576, 576, 288: 576, 576, 576, 576, 576, 576, 295: 576}, - {575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 209: 575, 211: 575, 243: 575, 575, 575, 247: 575, 575, 575, 575, 575, 253: 575, 575, 575, 575, 258: 575, 575, 575, 263: 575, 575, 575, 575, 575, 274: 575, 575, 575, 575, 575, 575, 575, 575, 284: 575, 575, 575, 288: 575, 575, 575, 575, 575, 575, 295: 575}, - {574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 209: 574, 211: 574, 243: 574, 574, 574, 247: 574, 574, 574, 574, 574, 253: 574, 574, 574, 574, 258: 574, 574, 574, 263: 574, 574, 574, 574, 574, 274: 574, 574, 574, 574, 574, 574, 574, 574, 284: 574, 574, 574, 288: 574, 574, 574, 574, 574, 574, 295: 574}, - {573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 209: 573, 211: 573, 243: 573, 573, 573, 247: 573, 573, 573, 573, 573, 253: 573, 573, 573, 573, 258: 573, 573, 573, 263: 573, 573, 573, 573, 573, 274: 573, 573, 573, 573, 573, 573, 573, 573, 284: 573, 573, 573, 288: 573, 573, 573, 573, 573, 573, 295: 573}, - // 180 - {572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 209: 572, 211: 572, 243: 572, 572, 572, 247: 572, 572, 572, 572, 572, 253: 572, 572, 572, 572, 258: 572, 572, 572, 263: 572, 572, 572, 572, 572, 274: 572, 572, 572, 572, 572, 572, 572, 572, 284: 572, 572, 572, 288: 572, 572, 572, 572, 572, 572, 295: 572}, - {571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 209: 571, 211: 571, 243: 571, 571, 571, 247: 571, 571, 571, 571, 571, 253: 571, 571, 571, 571, 258: 571, 571, 571, 263: 571, 571, 571, 571, 571, 274: 571, 571, 571, 571, 571, 571, 571, 571, 284: 571, 571, 571, 288: 571, 571, 571, 571, 571, 571, 295: 571}, - {570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 209: 570, 211: 570, 243: 570, 570, 570, 247: 570, 570, 570, 570, 570, 253: 570, 570, 570, 570, 258: 570, 570, 570, 263: 570, 570, 570, 570, 570, 274: 570, 570, 570, 570, 570, 570, 570, 570, 284: 570, 570, 570, 288: 570, 570, 570, 570, 570, 570, 295: 570}, - {569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 209: 569, 211: 569, 243: 569, 569, 569, 247: 569, 569, 569, 569, 569, 253: 569, 569, 569, 569, 258: 569, 569, 569, 263: 569, 569, 569, 569, 569, 274: 569, 569, 569, 569, 569, 569, 569, 569, 284: 569, 569, 569, 288: 569, 569, 569, 569, 569, 569, 295: 569}, - {568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 209: 568, 211: 568, 243: 568, 568, 568, 247: 568, 568, 568, 568, 568, 253: 568, 568, 568, 568, 258: 568, 568, 568, 263: 568, 568, 568, 568, 568, 274: 568, 568, 568, 568, 568, 568, 568, 568, 284: 568, 568, 568, 288: 568, 568, 568, 568, 568, 568, 295: 568}, - // 185 - {567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 209: 567, 211: 567, 243: 567, 567, 567, 247: 567, 567, 567, 567, 567, 253: 567, 567, 567, 567, 258: 567, 567, 567, 263: 567, 567, 567, 567, 567, 274: 567, 567, 567, 567, 567, 567, 567, 567, 284: 567, 567, 567, 288: 567, 567, 567, 567, 567, 567, 295: 567}, - {566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 209: 566, 211: 566, 243: 566, 566, 566, 247: 566, 566, 566, 566, 566, 253: 566, 566, 566, 566, 258: 566, 566, 566, 263: 566, 566, 566, 566, 566, 274: 566, 566, 566, 566, 566, 566, 566, 566, 284: 566, 566, 566, 288: 566, 566, 566, 566, 566, 566, 295: 566}, - {565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 209: 565, 211: 565, 243: 565, 565, 565, 247: 565, 565, 565, 565, 565, 253: 565, 565, 565, 565, 258: 565, 565, 565, 263: 565, 565, 565, 565, 565, 274: 565, 565, 565, 565, 565, 565, 565, 565, 284: 565, 565, 565, 288: 565, 565, 565, 565, 565, 565, 295: 565}, - {564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 209: 564, 211: 564, 243: 564, 564, 564, 247: 564, 564, 564, 564, 564, 253: 564, 564, 564, 564, 258: 564, 564, 564, 263: 564, 564, 564, 564, 564, 274: 564, 564, 564, 564, 564, 564, 564, 564, 284: 564, 564, 564, 288: 564, 564, 564, 564, 564, 564, 295: 564}, - {563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 209: 563, 211: 563, 243: 563, 563, 563, 247: 563, 563, 563, 563, 563, 253: 563, 563, 563, 563, 258: 563, 563, 563, 263: 563, 563, 563, 563, 563, 274: 563, 563, 563, 563, 563, 563, 563, 563, 284: 563, 563, 563, 288: 563, 563, 563, 563, 563, 563, 295: 563}, - // 190 - {562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 209: 562, 211: 562, 243: 562, 562, 562, 247: 562, 562, 562, 562, 562, 253: 562, 562, 562, 562, 258: 562, 562, 562, 263: 562, 562, 562, 562, 562, 274: 562, 562, 562, 562, 562, 562, 562, 562, 284: 562, 562, 562, 288: 562, 562, 562, 562, 562, 562, 295: 562}, - {561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 209: 561, 211: 561, 243: 561, 561, 561, 247: 561, 561, 561, 561, 561, 253: 561, 561, 561, 561, 258: 561, 561, 561, 263: 561, 561, 561, 561, 561, 274: 561, 561, 561, 561, 561, 561, 561, 561, 284: 561, 561, 561, 288: 561, 561, 561, 561, 561, 561, 295: 561}, - {560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 209: 560, 211: 560, 243: 560, 560, 560, 247: 560, 560, 560, 560, 560, 253: 560, 560, 560, 560, 258: 560, 560, 560, 263: 560, 560, 560, 560, 560, 274: 560, 560, 560, 560, 560, 560, 560, 560, 284: 560, 560, 560, 288: 560, 560, 560, 560, 560, 560, 295: 560}, - {559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 209: 559, 211: 559, 243: 559, 559, 559, 247: 559, 559, 559, 559, 559, 253: 559, 559, 559, 559, 258: 559, 559, 559, 263: 559, 559, 559, 559, 559, 274: 559, 559, 559, 559, 559, 559, 559, 559, 284: 559, 559, 559, 288: 559, 559, 559, 559, 559, 559, 295: 559}, - {558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 209: 558, 211: 558, 243: 558, 558, 558, 247: 558, 558, 558, 558, 558, 253: 558, 558, 558, 558, 258: 558, 558, 558, 263: 558, 558, 558, 558, 558, 274: 558, 558, 558, 558, 558, 558, 558, 558, 284: 558, 558, 558, 288: 558, 558, 558, 558, 558, 558, 295: 558}, - // 195 - {557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 209: 557, 211: 557, 243: 557, 557, 557, 247: 557, 557, 557, 557, 557, 253: 557, 557, 557, 557, 258: 557, 557, 557, 263: 557, 557, 557, 557, 557, 274: 557, 557, 557, 557, 557, 557, 557, 557, 284: 557, 557, 557, 288: 557, 557, 557, 557, 557, 557, 295: 557}, - {556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 209: 556, 211: 556, 243: 556, 556, 556, 247: 556, 556, 556, 556, 556, 253: 556, 556, 556, 556, 258: 556, 556, 556, 263: 556, 556, 556, 556, 556, 274: 556, 556, 556, 556, 556, 556, 556, 556, 284: 556, 556, 556, 288: 556, 556, 556, 556, 556, 556, 295: 556}, - {342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 130: 342, 132: 342, 342, 136: 342, 139: 342, 144: 342, 342, 342, 342, 342, 342, 342, 152: 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 180: 342, 202: 342, 209: 342, 211: 1083, 243: 342, 248: 342, 250: 342, 258: 342, 295: 342}, - {2: 7, 7, 8: 1081}, - {250: 1078, 295: 1079, 503: 1077}, - // 200 - {2: 2, 2, 8: 2}, - {2: 6, 6, 8: 6}, - {2: 5, 5, 8: 5, 73: 1080}, - {2: 3, 3, 8: 3}, - {2: 4, 4, 8: 4}, - // 205 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1075, 451: 1082}, - {2: 1, 1, 8: 1}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1084, 948, 947}, - {341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 130: 341, 132: 341, 341, 136: 341, 139: 341, 144: 341, 341, 341, 341, 341, 341, 341, 152: 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 180: 341, 202: 341, 209: 341, 243: 341, 248: 341, 250: 341, 258: 341, 295: 341}, - {2: 8, 8}, - // 210 - {8: 1116, 130: 1115}, - {8: 32, 130: 32, 133: 1104}, - {8: 30, 130: 30}, - {8: 28, 130: 28, 133: 28}, - {8: 27, 130: 27, 133: 27}, - // 215 - {8: 26, 60: 1103, 130: 26, 133: 26}, - {8: 24, 130: 24, 133: 24}, - {8: 23, 130: 23, 133: 23}, - {8: 22, 130: 22, 133: 22}, - {8: 21, 130: 21, 133: 21}, - // 220 - {8: 20, 130: 20, 133: 20}, - {8: 19, 130: 19, 133: 19}, - {407: 1102}, - {8: 17, 130: 17, 133: 17}, - {509: 1101}, - // 225 - {8: 16, 130: 16, 133: 16}, - {8: 18, 130: 18, 133: 18}, - {8: 25, 130: 25, 133: 25}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1106, 398: 1107}, - {844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 138: 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 211: 1111, 247: 844, 253: 844, 844, 256: 844, 259: 844, 844, 263: 844, 844, 844, 844, 844, 274: 844, 844, 844, 844, 844, 844, 844, 844, 284: 844, 844, 844, 288: 844, 844, 844, 844, 844, 844}, - // 230 - {7: 841, 841}, - {7: 1109, 1108}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1110}, - {8: 31, 130: 31}, - {7: 840, 840}, - // 235 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1112, 948, 947}, - {843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 138: 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 211: 1113, 247: 843, 253: 843, 843, 256: 843, 259: 843, 843, 263: 843, 843, 843, 843, 843, 274: 843, 843, 843, 843, 843, 843, 843, 843, 284: 843, 843, 843, 288: 843, 843, 843, 843, 843, 843}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1114, 948, 947}, - {842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 138: 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 247: 842, 253: 842, 842, 256: 842, 259: 842, 842, 263: 842, 842, 842, 842, 842, 274: 842, 842, 842, 842, 842, 842, 842, 842, 284: 842, 842, 842, 288: 842, 842, 842, 842, 842, 842}, - {15, 15, 4: 15, 15, 15, 9: 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 165: 15, 327: 1119, 506: 1118}, - // 240 - {24: 1094, 243: 1097, 245: 1095, 248: 1093, 305: 1089, 322: 1099, 329: 1092, 332: 1096, 343: 1091, 350: 1098, 355: 1090, 358: 1100, 441: 1117, 1087}, - {8: 29, 130: 29}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 165: 1121, 206: 1122, 948, 947, 516: 1120}, - {14, 14, 4: 14, 14, 14, 9: 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 165: 14}, - {255: 1128}, - // 245 - {211: 1126, 255: 13}, - {211: 1123, 255: 9}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 165: 1124, 206: 1125, 948, 947}, - {255: 11}, - {255: 10}, - // 250 - {165: 1127}, - {255: 12}, - {131: 1129, 354: 1130, 387: 1131, 457: 1132}, - {463: 1143}, - {2: 37, 37, 8: 37, 53: 1136, 464: 1135}, - // 255 - {2: 39, 39, 8: 39}, - {2: 33, 33, 8: 1133}, - {131: 1129, 354: 1130, 387: 1134}, - {2: 38, 38, 8: 38}, - {2: 40, 40, 8: 40}, - // 260 - {366: 1137}, - {10: 1140, 131: 1138, 392: 1139}, - {2: 234, 234, 7: 234, 234}, - {2: 36, 36, 8: 36}, - {131: 1142, 495: 1141}, - // 265 - {2: 35, 35, 8: 35}, - {2: 34, 34, 8: 34}, - {131: 1144}, - {2: 237, 237, 8: 237, 53: 237, 151: 237}, - {2: 793, 793, 6: 793, 136: 793, 148: 793, 793, 161: 793, 209: 793}, - // 270 - {2: 47, 47}, - {343, 343, 4: 343, 343, 343, 9: 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 133: 343, 146: 343, 313: 343, 318: 343}, - {694, 694, 4: 694, 694, 694, 9: 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 133: 694, 313: 1149, 318: 694, 359: 1150}, - {693, 693, 4: 693, 693, 693, 9: 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 133: 693, 146: 693, 318: 693, 320: 693, 327: 693}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1158, 206: 1073, 948, 947, 303: 1157, 318: 1154, 325: 1156, 1155, 328: 1153, 334: 1151, 342: 1152}, - // 275 - {2: 320, 320, 7: 320, 320, 130: 320, 139: 320, 144: 320, 320, 147: 320, 320, 150: 320, 152: 320, 320, 156: 320}, - {8: 1721, 153: 1756}, - {8: 318, 132: 1175, 153: 1729, 1177, 157: 1178, 1179, 1176, 344: 1173, 347: 1174}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1726, 948, 947}, - {2: 316, 316, 7: 316, 316, 130: 316, 132: 316, 139: 316, 144: 316, 316, 147: 316, 316, 150: 316, 152: 316, 316, 316, 156: 316, 316, 316, 316, 316}, - // 280 - {2: 315, 315, 7: 315, 315, 130: 315, 132: 315, 139: 315, 144: 315, 315, 147: 315, 315, 150: 315, 152: 315, 315, 315, 156: 315, 315, 315, 315, 315}, - {1005, 949, 310, 310, 950, 971, 957, 310, 310, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 130: 310, 132: 310, 139: 310, 144: 310, 310, 147: 310, 310, 150: 310, 152: 310, 310, 310, 156: 310, 310, 310, 310, 310, 162: 1167, 206: 1166, 948, 947, 364: 1725, 536: 1724}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1161, 206: 1073, 948, 947, 243: 899, 303: 1157, 307: 1162, 315: 902, 901, 1163, 1154, 325: 1156, 1155, 328: 1160, 334: 1151, 342: 1159}, - {7: 1722, 1721}, - {2: 318, 318, 7: 318, 318, 130: 318, 132: 1175, 139: 318, 144: 318, 318, 147: 318, 318, 150: 318, 152: 318, 318, 1177, 156: 318, 1178, 1179, 1176, 344: 1173, 347: 1174}, - // 285 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1161, 206: 1073, 948, 947, 243: 899, 303: 1157, 307: 1171, 315: 902, 901, 1163, 1154, 325: 1156, 1155, 328: 1160, 334: 1151, 342: 1159}, - {7: 1169, 139: 272}, - {7: 1164}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 162: 1167, 206: 1166, 948, 947, 364: 1165}, - {2: 312, 312, 7: 312, 312, 130: 312, 132: 312, 139: 312, 144: 312, 312, 147: 312, 312, 150: 312, 152: 312, 312, 312, 156: 312, 312, 312, 312, 312}, - // 290 - {2: 308, 308, 7: 308, 308, 130: 308, 132: 308, 139: 308, 144: 308, 308, 147: 308, 308, 150: 308, 152: 308, 308, 308, 156: 308, 308, 308, 308, 308}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1168, 948, 947}, - {2: 307, 307, 7: 307, 307, 130: 307, 132: 307, 139: 307, 144: 307, 307, 147: 307, 307, 150: 307, 152: 307, 307, 307, 156: 307, 307, 307, 307, 307}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 162: 1167, 206: 1166, 948, 947, 364: 1170}, - {2: 313, 313, 7: 313, 313, 130: 313, 132: 313, 139: 313, 144: 313, 313, 147: 313, 313, 150: 313, 152: 313, 313, 313, 156: 313, 313, 313, 313, 313}, - // 295 - {7: 1172, 139: 272}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 139: 271, 162: 1167, 206: 1166, 948, 947, 364: 1170}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1158, 206: 1073, 948, 947, 303: 1157, 325: 1156, 1155, 328: 1718}, - {154: 301, 378: 1183, 510: 1182}, - {154: 303, 378: 303}, - // 300 - {154: 302, 378: 302}, - {299, 299, 4: 299, 299, 299, 9: 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 133: 299}, - {154: 1181}, - {154: 1180}, - {297, 297, 4: 297, 297, 297, 9: 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 133: 297}, - // 305 - {298, 298, 4: 298, 298, 298, 9: 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 133: 298}, - {154: 1184}, - {154: 300}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1158, 206: 1073, 948, 947, 303: 1157, 325: 1156, 1155, 328: 1185}, - {130: 1186, 132: 1175, 154: 1177, 157: 1178, 1179, 1176, 344: 1173, 347: 1174}, - // 310 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1187, 1189}, - {2: 304, 304, 7: 304, 304, 130: 304, 132: 304, 138: 1303, 304, 1302, 1301, 1300, 1298, 304, 304, 147: 304, 304, 150: 304, 152: 304, 304, 304, 156: 304, 304, 304, 304, 304, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1717, 1189}, - {750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 130: 750, 750, 750, 138: 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 150: 750, 1704, 750, 750, 750, 750, 750, 750, 750, 750, 750, 162: 750, 750, 750, 166: 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 181: 1701, 1699, 1698, 1696, 1700, 1702, 1703, 1705, 473: 1697}, - {737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 130: 737, 737, 737, 138: 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 150: 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 162: 737, 737, 737, 166: 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 181: 737, 737, 737, 737, 737, 737, 737, 737}, - // 315 - {720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 1653, 720, 720, 720, 134: 1658, 1659, 138: 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 150: 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 715, 720, 720, 720, 1660, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 715, 720, 720, 720, 720, 720, 720, 720, 720, 715, 715, 715, 1662, 1655, 1661, 1665, 1654, 198: 1663, 1656, 1664, 1657, 434: 1652}, - {677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 1648, 677, 677, 138: 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 198: 677, 677, 677, 677, 211: 677}, - {666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 1645, 666, 666, 138: 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 198: 666, 666, 666, 666, 211: 666}, - {631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 1642, 631, 631, 138: 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 198: 631, 631, 631, 631, 211: 631}, - {629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 1639, 629, 629, 138: 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 198: 629, 629, 629, 629, 211: 629}, - // 320 - {626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 1637, 626, 626, 138: 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 198: 626, 626, 626, 626, 211: 626}, - {614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 1632, 614, 614, 138: 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 198: 614, 614, 614, 614, 211: 614}, - {598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 1629, 598, 598, 138: 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 198: 598, 598, 598, 598, 211: 598}, - {597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 413, 597, 597, 138: 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 198: 597, 597, 597, 597, 211: 597}, - {595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 1626, 595, 595, 138: 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 198: 595, 595, 595, 595, 211: 595}, - // 325 - {594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 1623, 594, 594, 138: 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 198: 594, 594, 594, 594, 211: 594}, - {593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 1620, 593, 593, 138: 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 198: 593, 593, 593, 593, 211: 593}, - {592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 1618, 592, 592, 138: 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 198: 592, 592, 592, 592, 211: 592}, - {591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 1615, 591, 591, 138: 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 198: 591, 591, 591, 591, 211: 591}, - {590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 1609, 590, 590, 138: 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 198: 590, 590, 590, 590, 211: 590}, - // 330 - {589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 1606, 589, 589, 138: 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 198: 589, 589, 589, 589, 211: 589}, - {588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 415, 588, 588, 138: 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 198: 588, 588, 588, 588, 211: 588}, - {587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 414, 587, 587, 138: 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 198: 587, 587, 587, 587, 211: 587}, - {586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 1603, 586, 586, 138: 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 198: 586, 586, 586, 586, 211: 586}, - {585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1600, 585, 585, 138: 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 198: 585, 585, 585, 585, 211: 585}, - // 335 - {584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 1597, 584, 584, 138: 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 198: 584, 584, 584, 584, 211: 584}, - {583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 1594, 583, 583, 138: 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 198: 583, 583, 583, 583, 211: 583}, - {582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 1592, 582, 582, 138: 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 198: 582, 582, 582, 582, 211: 582}, - {581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 1588, 581, 581, 138: 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 198: 581, 581, 581, 581, 211: 581}, - {580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1585, 580, 580, 138: 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 198: 580, 580, 580, 580, 211: 580}, - // 340 - {579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 1582, 579, 579, 138: 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 198: 579, 579, 579, 579, 211: 579}, - {578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 1579, 578, 578, 138: 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 198: 578, 578, 578, 578, 211: 578}, - {577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 1571, 577, 577, 138: 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 198: 577, 577, 577, 577, 211: 577}, - {576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 1567, 576, 576, 138: 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 198: 576, 576, 576, 576, 211: 576}, - {575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 1564, 575, 575, 138: 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 198: 575, 575, 575, 575, 211: 575}, - // 345 - {574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 1560, 574, 574, 138: 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 198: 574, 574, 574, 574, 211: 574}, - {573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 1557, 573, 573, 138: 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 198: 573, 573, 573, 573, 211: 573}, - {572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 1554, 572, 572, 138: 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 198: 572, 572, 572, 572, 211: 572}, - {571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 1551, 571, 571, 138: 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 198: 571, 571, 571, 571, 211: 571}, - {570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 1548, 570, 570, 138: 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 198: 570, 570, 570, 570, 211: 570}, - // 350 - {569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 1543, 569, 569, 138: 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 198: 569, 569, 569, 569, 211: 569}, - {568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 1538, 568, 568, 138: 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 198: 568, 568, 568, 568, 211: 568}, - {567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 1535, 567, 567, 138: 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 198: 567, 567, 567, 567, 211: 567}, - {566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 1532, 566, 566, 138: 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 198: 566, 566, 566, 566, 211: 566}, - {564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 412, 564, 564, 138: 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 198: 564, 564, 564, 564, 211: 564}, - // 355 - {563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 1518, 563, 563, 138: 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 198: 563, 563, 563, 563, 211: 563}, - {562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 1511, 562, 562, 138: 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 198: 562, 562, 562, 562, 211: 562}, - {561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1504, 561, 561, 138: 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 198: 561, 561, 561, 561, 211: 561}, - {560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1487, 560, 560, 138: 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 198: 560, 560, 560, 560, 211: 560}, - {559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 481, 559, 559, 138: 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 198: 559, 559, 559, 559, 211: 559}, - // 360 - {558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 1484, 558, 558, 138: 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 198: 558, 558, 558, 558, 211: 558}, - {557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 1481, 557, 557, 138: 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 198: 557, 557, 557, 557, 211: 557}, - {556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1478, 556, 556, 138: 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 198: 556, 556, 556, 556, 211: 556}, - {529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 134: 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 198: 529, 529, 529, 529, 203: 529, 529, 529}, - {528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 134: 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 198: 528, 528, 528, 528, 203: 528, 528, 528}, - // 365 - {527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 134: 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 198: 527, 527, 527, 527, 203: 527, 527, 527}, - {526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 134: 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 198: 526, 526, 526, 526, 203: 526, 526, 526}, - {525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 134: 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 198: 525, 525, 525, 525, 203: 525, 525, 525}, - {524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 134: 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 198: 524, 524, 524, 524, 203: 524, 524, 524}, - {131: 1477}, - // 370 - {522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 134: 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 198: 522, 522, 522, 522, 203: 522, 522, 522}, - {521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 134: 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 198: 521, 521, 521, 521, 203: 521, 521, 521}, - {520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 134: 520, 520, 138: 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 198: 520, 520, 520, 520}, - {519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 134: 519, 519, 138: 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 198: 519, 519, 519, 519}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1470, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 899, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1469, 1189, 307: 1459, 315: 902, 901, 1460}, - // 375 - {517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 1466, 517, 517, 138: 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 198: 517, 517, 517, 517}, - {515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 134: 515, 515, 138: 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 198: 515, 515, 515, 515}, - {514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 134: 514, 514, 138: 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 198: 514, 514, 514, 514}, - {133: 1458, 246: 1457}, - {501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 134: 501, 501, 138: 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 198: 501, 501, 501, 501}, - // 380 - {500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 134: 500, 500, 138: 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 198: 500, 500, 500, 500}, - {499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 134: 499, 499, 138: 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 198: 499, 499, 499, 499}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1456, 287: 1291, 294: 1252}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1455, 287: 1291, 294: 1252}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1454, 287: 1291, 294: 1252}, - // 385 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1453, 287: 1291, 294: 1252}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1452, 287: 1291, 294: 1252}, - {349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 134: 349, 349, 138: 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 1450, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 198: 349, 349, 349, 349}, - {492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 134: 492, 492, 138: 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 198: 492, 492, 492, 492}, - {491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 134: 491, 491, 138: 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 198: 491, 491, 491, 491}, - // 390 - {490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 134: 490, 490, 138: 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 198: 490, 490, 490, 490}, - {489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 134: 489, 489, 138: 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 198: 489, 489, 489, 489}, - {133: 488}, - {133: 487}, - {133: 486}, - // 395 - {133: 485}, - {133: 484}, - {479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 483, 479, 479, 138: 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 198: 479, 479, 479, 479}, - {478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 482, 478, 478, 138: 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 198: 478, 478, 478, 478}, - {133: 1443}, - // 400 - {133: 1438}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 164: 376, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1309, 1189, 346: 1426}, - {133: 1379}, - {133: 1376}, - {133: 1374}, - // 405 - {399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 1369, 399, 399, 138: 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 198: 399, 399, 399, 399, 423: 1373}, - {399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 1369, 399, 399, 138: 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 198: 399, 399, 399, 399, 423: 1368}, - {133: 1361}, - {133: 1352}, - {133: 1327}, - // 410 - {133: 1324}, - {133: 1317}, - {133: 1312}, - {133: 1308}, - {133: 1295}, - // 415 - {241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 134: 241, 241, 138: 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 198: 241, 241, 241, 241}, - {240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 134: 240, 240, 138: 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 198: 240, 240, 240, 240}, - {239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 134: 239, 239, 138: 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 198: 239, 239, 239, 239}, - {238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 134: 238, 238, 138: 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 198: 238, 238, 238, 238}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1296, 1189}, - // 420 - {7: 1304, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1307, 1189}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1306, 1189}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1305, 1189}, - {749, 749, 4: 749, 749, 749, 9: 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 131: 749, 749, 749, 749, 749, 749, 749, 197: 749, 202: 749, 210: 749, 212: 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749}, - // 425 - {748, 748, 4: 748, 748, 748, 9: 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 131: 748, 748, 748, 748, 748, 748, 748, 197: 748, 202: 748, 210: 748, 212: 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748}, - {747, 747, 4: 747, 747, 747, 9: 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 131: 747, 747, 747, 747, 747, 747, 747, 197: 747, 202: 747, 210: 747, 212: 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747}, - {746, 746, 4: 746, 746, 746, 9: 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 131: 746, 746, 746, 746, 746, 746, 746, 197: 746, 202: 746, 210: 746, 212: 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746}, - {420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 134: 420, 420, 138: 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 198: 420, 420, 420, 420}, - {755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 130: 755, 755, 755, 138: 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 150: 755, 152: 755, 755, 755, 755, 755, 755, 755, 755, 755, 162: 755, 755, 755, 166: 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 300: 1299, 1297}, - // 430 - {756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 130: 756, 756, 756, 138: 1303, 756, 1302, 756, 756, 756, 756, 756, 756, 756, 756, 150: 756, 152: 756, 756, 756, 756, 756, 756, 756, 756, 756, 162: 756, 756, 756, 166: 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 300: 1299, 1297}, - {757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 130: 757, 757, 757, 138: 1303, 757, 1302, 757, 757, 1298, 757, 757, 757, 757, 757, 150: 757, 152: 757, 757, 757, 757, 757, 757, 757, 757, 757, 162: 757, 757, 757, 166: 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 376, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1309, 1189, 346: 1310}, - {7: 375, 138: 1303, 140: 1302, 1301, 1300, 1298, 164: 375, 300: 1299, 1297}, - {7: 1311}, - // 435 - {425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 134: 425, 425, 138: 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 198: 425, 425, 425, 425}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1313, 1189}, - {8: 1314, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1315, 1189}, - {7: 1316, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 440 - {431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 134: 431, 431, 138: 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, 198: 431, 431, 431, 431}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1318, 1189}, - {8: 1319, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1320, 1189}, - {8: 1321, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 445 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1322, 1189}, - {7: 1323, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 134: 433, 433, 138: 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 198: 433, 433, 433, 433}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1325, 1189}, - {7: 1326, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 450 - {442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 134: 442, 442, 138: 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 198: 442, 442, 442, 442}, - {26: 1337, 30: 1333, 32: 1332, 34: 1329, 1331, 1335, 38: 1336, 1330, 43: 1334, 168: 1347, 1344, 1346, 1345, 1341, 1343, 1342, 1339, 1340, 1338, 1348, 384: 1328}, - {146: 1349}, - {7: 396, 146: 396}, - {7: 395, 146: 395}, - // 455 - {7: 394, 146: 394}, - {7: 393, 146: 393}, - {7: 392, 146: 392}, - {7: 391, 146: 391}, - {7: 390, 146: 390}, - // 460 - {7: 389, 146: 389}, - {7: 388, 146: 388}, - {7: 387, 146: 387}, - {7: 386, 146: 386}, - {7: 385, 146: 385}, - // 465 - {7: 384, 146: 384}, - {7: 383, 146: 383}, - {7: 382, 146: 382}, - {7: 381, 146: 381}, - {7: 380, 146: 380}, - // 470 - {7: 379, 146: 379}, - {7: 378, 146: 378}, - {7: 377, 146: 377}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1350, 1189}, - {7: 1351, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 475 - {449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 134: 449, 449, 138: 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 198: 449, 449, 449, 449}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1353, 1189}, - {8: 1354, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1355, 1189, 427: 1357, 479: 1356}, - {7: 411, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 480 - {7: 1360}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1358, 1189}, - {26: 1337, 30: 1333, 32: 1332, 34: 1329, 1331, 1335, 38: 1336, 1330, 43: 1334, 138: 1303, 140: 1302, 1301, 1300, 1298, 168: 1347, 1344, 1346, 1345, 1341, 1343, 1342, 1339, 1340, 1338, 1348, 300: 1299, 1297, 384: 1359}, - {7: 410}, - {450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 134: 450, 450, 138: 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 198: 450, 450, 450, 450}, - // 485 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1362, 1189}, - {8: 1363, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {427: 1364}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1365, 1189}, - {26: 1337, 30: 1333, 32: 1332, 34: 1329, 1331, 1335, 38: 1336, 1330, 43: 1334, 138: 1303, 140: 1302, 1301, 1300, 1298, 168: 1347, 1344, 1346, 1345, 1341, 1343, 1342, 1339, 1340, 1338, 1348, 300: 1299, 1297, 384: 1366}, - // 490 - {7: 1367}, - {451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 134: 451, 451, 138: 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 198: 451, 451, 451, 451}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 134: 460, 460, 138: 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 198: 460, 460, 460, 460}, - {1005, 949, 4: 950, 971, 957, 1371, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1370, 1189}, - {7: 1372, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 495 - {398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 134: 398, 398, 138: 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 198: 398, 398, 398, 398}, - {397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 134: 397, 397, 138: 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 198: 397, 397, 397, 397}, - {461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 134: 461, 461, 138: 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 198: 461, 461, 461, 461}, - {7: 1375}, - {463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 134: 463, 463, 138: 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 198: 463, 463, 463, 463}, - // 500 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1377}, - {7: 1378}, - {467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 134: 467, 467, 138: 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 198: 467, 467, 467, 467}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1380, 1189}, - {8: 1382, 138: 1303, 140: 1302, 1301, 1300, 1298, 155: 1381, 300: 1299, 1297}, - // 505 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 1424}, - {28: 1387, 1386, 40: 1389, 57: 1390, 197: 1384, 247: 1385, 253: 1388, 302: 1391, 395: 1383}, - {7: 1423}, - {7: 71, 133: 1396, 306: 1397, 312: 1422}, - {6: 71, 71, 133: 1396, 197: 71, 209: 71, 306: 1397, 312: 1411}, - // 510 - {7: 367}, - {7: 71, 133: 1396, 306: 1397, 312: 1410}, - {7: 65, 133: 1403, 306: 1404, 375: 1402, 379: 1405}, - {7: 71, 133: 1396, 306: 1397, 312: 1395}, - {7: 105, 254: 1393, 437: 1394}, - // 515 - {7: 105, 254: 1393, 437: 1392}, - {7: 362}, - {7: 104}, - {7: 363}, - {7: 364}, - // 520 - {210: 1399, 310: 1400, 1398}, - {70, 70, 70, 70, 70, 70, 70, 70, 70, 129: 70, 70, 136: 70, 70, 149: 70, 163: 70, 166: 70, 197: 70, 203: 70, 70, 70, 209: 70, 302: 70, 304: 70}, - {759, 759, 759, 759, 6: 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, 37: 759, 130: 759, 136: 759, 139: 759, 144: 759, 147: 759, 149: 759, 209: 759}, - {758, 758, 758, 758, 6: 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 37: 758, 130: 758, 136: 758, 139: 758, 144: 758, 147: 758, 149: 758, 209: 758}, - {7: 1401}, - // 525 - {72, 72, 72, 72, 72, 72, 72, 72, 72, 129: 72, 72, 136: 72, 72, 149: 72, 163: 72, 166: 72, 197: 72, 203: 72, 72, 72, 209: 72, 302: 72, 304: 72}, - {7: 365}, - {210: 1399, 310: 1406, 1398}, - {64, 64, 64, 64, 64, 64, 7: 64, 64, 129: 64, 64, 136: 64, 64, 203: 64, 64, 64, 302: 64, 304: 64}, - {63, 63, 63, 63, 63, 63, 7: 63, 63, 129: 63, 63, 136: 63, 63, 203: 63, 63, 63, 302: 63, 304: 63}, - // 530 - {7: 1401, 1407}, - {210: 1399, 310: 1408, 1398}, - {7: 1409}, - {62, 62, 62, 62, 62, 62, 7: 62, 62, 129: 62, 62, 136: 62, 62, 203: 62, 62, 62, 302: 62, 304: 62}, - {7: 366}, - // 535 - {6: 61, 61, 197: 1413, 209: 61, 348: 1412}, - {6: 1417, 59, 209: 1416, 323: 1415, 336: 1414}, - {60, 60, 60, 60, 60, 60, 60, 60, 60, 129: 60, 60, 136: 60, 60, 149: 60, 203: 60, 60, 60, 209: 60}, - {7: 368}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 1419}, - // 540 - {153: 1418}, - {56, 56, 4: 56, 56, 56, 9: 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 131: 56, 151: 56}, - {57, 57, 4: 57, 57, 57, 9: 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 131: 57, 151: 57}, - {58, 58, 58, 58, 58, 58, 7: 58, 58, 129: 58, 58, 136: 58, 58, 149: 58, 203: 58, 58, 58}, - {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 134: 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 198: 51, 51, 51, 51, 203: 51, 51, 51, 209: 51}, - // 545 - {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 134: 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 198: 50, 50, 50, 50, 203: 50, 50, 50, 209: 50}, - {7: 369}, - {470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 134: 470, 470, 138: 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 198: 470, 470, 470, 470}, - {7: 1425}, - {471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 134: 471, 471, 138: 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 198: 471, 471, 471, 471}, - // 550 - {164: 1429, 460: 1428, 548: 1427}, - {20: 371, 164: 1429, 167: 1435, 460: 1434, 484: 1433}, - {20: 374, 164: 374, 167: 374}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1430, 1189}, - {138: 1303, 140: 1302, 1301, 1300, 1298, 179: 1431, 300: 1299, 1297}, - // 555 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1432, 1189}, - {20: 372, 138: 1303, 140: 1302, 1301, 1300, 1298, 164: 372, 167: 372, 300: 1299, 1297}, - {20: 1437}, - {20: 373, 164: 373, 167: 373}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1436, 1189}, - // 560 - {20: 370, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 134: 472, 472, 138: 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 198: 472, 472, 472, 472}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1439, 1189}, - {138: 1303, 140: 1302, 1301, 1300, 1298, 162: 1440, 300: 1299, 1297}, - {28: 1387, 1386, 40: 1389, 57: 1390, 197: 1384, 247: 1385, 253: 1388, 302: 1391, 395: 1441}, - // 565 - {7: 1442}, - {473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 134: 473, 473, 138: 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 198: 473, 473, 473, 473}, - {1005, 949, 4: 950, 971, 957, 742, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1445, 486: 1446}, - {2: 744, 744, 7: 744, 744, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {7: 741, 1448}, - // 570 - {7: 1447}, - {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 134: 480, 480, 138: 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 198: 480, 480, 480, 480}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1449, 1189}, - {2: 743, 743, 7: 743, 743, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 1451}, - // 575 - {493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 134: 493, 493, 138: 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 198: 493, 493, 493, 493}, - {494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 134: 494, 494, 138: 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 1450, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 198: 494, 494, 494, 494}, - {495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 134: 495, 495, 138: 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 1450, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 198: 495, 495, 495, 495}, - {496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 134: 496, 496, 138: 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 1450, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 198: 496, 496, 496, 496}, - {497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 134: 497, 497, 138: 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 1450, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 198: 497, 497, 497, 497}, - // 580 - {498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 134: 498, 498, 138: 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 1450, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 198: 498, 498, 498, 498}, - {511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 134: 511, 511, 138: 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 198: 511, 511, 511, 511}, - {133: 1461, 243: 899, 307: 1459, 315: 902, 901, 1460}, - {7: 1465, 139: 272}, - {7: 1464}, - // 585 - {243: 899, 307: 1462}, - {7: 1463}, - {139: 271}, - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 134: 280, 280, 138: 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 198: 280, 280, 280, 280}, - {281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 134: 281, 281, 138: 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 198: 281, 281, 281, 281}, - // 590 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1467}, - {7: 1468}, - {516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 134: 516, 516, 138: 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 198: 516, 516, 516, 516}, - {7: 1473, 1474, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1470, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 899, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1469, 1189, 307: 1471, 315: 902, 901, 1460}, - // 595 - {7: 1472, 139: 272}, - {2: 281, 281, 7: 281, 281, 129: 281, 134: 281, 281, 138: 281, 271, 281, 281, 281, 281, 149: 281, 151: 281, 161: 281, 165: 281, 180: 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 198: 281, 281, 281, 281}, - {518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 134: 518, 518, 138: 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 198: 518, 518, 518, 518}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1475}, - {7: 1476, 1448}, - // 600 - {512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 134: 512, 512, 138: 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 198: 512, 512, 512, 512}, - {523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 134: 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 198: 523, 523, 523, 523, 203: 523, 523, 523}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1479}, - {7: 1480, 1448}, - {417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 134: 417, 417, 138: 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 198: 417, 417, 417, 417}, - // 605 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1482, 1189}, - {7: 1483, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 134: 418, 418, 138: 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 198: 418, 418, 418, 418}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1485, 1189}, - {7: 1486, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 610 - {419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 134: 419, 419, 138: 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 198: 419, 419, 419, 419}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1488, 1189, 467: 1490, 501: 1491, 542: 1492, 1489}, - {7: 1500, 138: 1303, 140: 1302, 1301, 1300, 1298, 146: 1501, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 146: 1494, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1493, 1189}, - {409, 409, 4: 409, 409, 409, 9: 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 131: 409, 409, 409, 409, 409, 409, 409, 146: 409, 197: 409, 202: 409, 210: 409, 212: 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409}, - // 615 - {408, 408, 4: 408, 408, 408, 9: 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 131: 408, 408, 408, 408, 408, 408, 408, 146: 408, 197: 408, 202: 408, 210: 408, 212: 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408}, - {407, 407, 4: 407, 407, 407, 9: 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 131: 407, 407, 407, 407, 407, 407, 407, 146: 407, 197: 407, 202: 407, 210: 407, 212: 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407}, - {138: 1303, 140: 1302, 1301, 1300, 1298, 146: 1497, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1495, 1189}, - {7: 1496, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 620 - {422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 134: 422, 422, 138: 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 198: 422, 422, 422, 422}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1498, 1189}, - {7: 1499, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 134: 421, 421, 138: 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 198: 421, 421, 421, 421}, - {424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 134: 424, 424, 138: 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 198: 424, 424, 424, 424}, - // 625 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1502, 1189}, - {7: 1503, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 134: 423, 423, 138: 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 198: 423, 423, 423, 423}, - {477, 477, 4: 477, 477, 477, 9: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 131: 477, 477, 477, 477, 477, 477, 477, 197: 477, 202: 477, 210: 477, 212: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 305: 1505, 330: 1506, 339: 1507}, - {476, 476, 4: 476, 476, 476, 9: 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 131: 476, 476, 476, 476, 476, 476, 476, 165: 476, 197: 476, 202: 476, 210: 476, 212: 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476}, - // 630 - {475, 475, 4: 475, 475, 475, 9: 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 131: 475, 475, 475, 475, 475, 475, 475, 165: 475, 197: 475, 202: 475, 210: 475, 212: 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 305: 1510}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1508, 1189}, - {7: 1509, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 134: 400, 400, 138: 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 198: 400, 400, 400, 400}, - {474, 474, 4: 474, 474, 474, 9: 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 131: 474, 474, 474, 474, 474, 474, 474, 165: 474, 197: 474, 202: 474, 210: 474, 212: 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474}, - // 635 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1512, 1189}, - {8: 1513, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1514, 1189}, - {8: 1515, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1516, 1189}, - // 640 - {7: 1517, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 134: 426, 426, 138: 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 198: 426, 426, 426, 426}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1519, 1189}, - {8: 1520, 138: 1303, 140: 1302, 1301, 1300, 1298, 146: 1521, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1527, 1189}, - // 645 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1522, 1189}, - {7: 1523, 138: 1303, 140: 1302, 1301, 1300, 1298, 1524, 300: 1299, 1297}, - {429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 134: 429, 429, 138: 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 198: 429, 429, 429, 429}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1525, 1189}, - {7: 1526, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 650 - {427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 134: 427, 427, 138: 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 198: 427, 427, 427, 427}, - {7: 1528, 1529, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 134: 430, 430, 138: 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 198: 430, 430, 430, 430}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1530, 1189}, - {7: 1531, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 655 - {428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 134: 428, 428, 138: 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 198: 428, 428, 428, 428}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1533, 1189}, - {7: 1534, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 134: 432, 432, 138: 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 198: 432, 432, 432, 432}, - {1005, 949, 4: 950, 971, 957, 376, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1309, 1189, 346: 1536}, - // 660 - {7: 1537}, - {434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 134: 434, 434, 138: 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 198: 434, 434, 434, 434}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1539, 1189}, - {8: 1540, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1541, 1189}, - // 665 - {7: 1542, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 134: 435, 435, 138: 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 198: 435, 435, 435, 435}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1544, 1189}, - {8: 1545, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1546, 1189}, - // 670 - {7: 1547, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 134: 436, 436, 138: 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 198: 436, 436, 436, 436}, - {1005, 949, 4: 950, 971, 957, 376, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1309, 1189, 346: 1549}, - {7: 1550}, - {438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 134: 438, 438, 138: 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 198: 438, 438, 438, 438}, - // 675 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1552, 1189}, - {7: 1553, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 134: 439, 439, 138: 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 198: 439, 439, 439, 439}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1555}, - {7: 1556, 1448}, - // 680 - {437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 134: 437, 437, 138: 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 198: 437, 437, 437, 437}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1558, 1189}, - {7: 1559, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 134: 440, 440, 138: 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 198: 440, 440, 440, 440}, - {477, 477, 4: 477, 477, 477, 9: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 131: 477, 477, 477, 477, 477, 477, 477, 197: 477, 202: 477, 210: 477, 212: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 305: 1505, 330: 1506, 339: 1561}, - // 685 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1562, 1189}, - {7: 1563, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 134: 401, 401, 138: 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 198: 401, 401, 401, 401}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1565, 1189}, - {7: 1566, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 690 - {441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 134: 441, 441, 138: 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 198: 441, 441, 441, 441}, - {477, 477, 4: 477, 477, 477, 9: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 131: 477, 477, 477, 477, 477, 477, 477, 197: 477, 202: 477, 210: 477, 212: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 305: 1505, 330: 1506, 339: 1568}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1569, 1189}, - {7: 1570, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 134: 402, 402, 138: 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 198: 402, 402, 402, 402}, - // 695 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1572, 1189}, - {8: 1573, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1574, 1189}, - {7: 1575, 1576, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 134: 444, 444, 138: 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 198: 444, 444, 444, 444}, - // 700 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1577, 1189}, - {7: 1578, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 134: 443, 443, 138: 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 198: 443, 443, 443, 443}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1580, 1189}, - {7: 1581, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 705 - {445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 134: 445, 445, 138: 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 198: 445, 445, 445, 445}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1583}, - {7: 1584, 1448}, - {446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 134: 446, 446, 138: 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 198: 446, 446, 446, 446}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1586, 1189}, - // 710 - {7: 1587, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 134: 447, 447, 138: 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 198: 447, 447, 447, 447}, - {477, 477, 4: 477, 477, 477, 9: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 131: 477, 477, 477, 477, 477, 477, 477, 197: 477, 202: 477, 210: 477, 212: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 305: 1505, 330: 1506, 339: 1589}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1590}, - {7: 1591, 1448}, - // 715 - {403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 134: 403, 403, 138: 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 198: 403, 403, 403, 403}, - {7: 1593}, - {448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 134: 448, 448, 138: 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 198: 448, 448, 448, 448}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1595, 1189}, - {7: 1596, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 720 - {452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 134: 452, 452, 138: 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 198: 452, 452, 452, 452}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1598, 1189}, - {7: 1599, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 134: 454, 454, 138: 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 198: 454, 454, 454, 454}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1601, 1189}, - // 725 - {7: 1602, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 134: 453, 453, 138: 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 198: 453, 453, 453, 453}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1604, 1189}, - {7: 1605, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 134: 455, 455, 138: 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 198: 455, 455, 455, 455}, - // 730 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1607, 1189}, - {7: 1608, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 134: 456, 456, 138: 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 198: 456, 456, 456, 456}, - {477, 477, 4: 477, 477, 477, 9: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 131: 477, 477, 477, 477, 477, 477, 477, 165: 477, 197: 477, 202: 477, 210: 477, 212: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 305: 1505, 330: 1506, 339: 1610}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 165: 1612, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1611}, - // 735 - {7: 1614, 1448}, - {7: 1613}, - {404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 134: 404, 404, 138: 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 198: 404, 404, 404, 404}, - {405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 134: 405, 405, 138: 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 198: 405, 405, 405, 405}, - {1005, 949, 4: 950, 971, 957, 376, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1309, 1189, 346: 1616}, - // 740 - {7: 1617}, - {462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 134: 462, 462, 138: 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 198: 462, 462, 462, 462}, - {7: 1619}, - {416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 134: 416, 416, 138: 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 198: 416, 416, 416, 416}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1621}, - // 745 - {7: 1622, 1448}, - {457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 134: 457, 457, 138: 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 198: 457, 457, 457, 457}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1624}, - {7: 1625, 1448}, - {458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 134: 458, 458, 138: 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 198: 458, 458, 458, 458}, - // 750 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1627}, - {7: 1628, 1448}, - {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 134: 464, 464, 138: 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 198: 464, 464, 464, 464}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1630, 1189}, - {7: 1631, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 755 - {459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 134: 459, 459, 138: 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 198: 459, 459, 459, 459}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1633, 1189}, - {8: 1634, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1635}, - {7: 1636, 1448}, - // 760 - {513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 134: 513, 513, 138: 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 198: 513, 513, 513, 513}, - {7: 1638}, - {468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 134: 468, 468, 138: 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 198: 468, 468, 468, 468}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1640}, - {7: 1641, 1448}, - // 765 - {466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 134: 466, 466, 138: 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 198: 466, 466, 466, 466}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1643, 1189}, - {7: 1644, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 134: 465, 465, 138: 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 198: 465, 465, 465, 465}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1646, 1189}, - // 770 - {7: 1647, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 134: 469, 469, 138: 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 198: 469, 469, 469, 469}, - {477, 477, 4: 477, 477, 477, 9: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 131: 477, 477, 477, 477, 477, 477, 477, 197: 477, 202: 477, 210: 477, 212: 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 305: 1505, 330: 1506, 339: 1649}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1650}, - {7: 1651, 1448}, - // 775 - {406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 134: 406, 406, 138: 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 198: 406, 406, 406, 406}, - {161: 1680, 180: 1678, 189: 1679, 1682, 1683, 521: 1681}, - {41: 714, 137: 714, 161: 714, 180: 714, 189: 714, 714, 714, 215: 714, 714}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1677}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1676}, - // 780 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1675}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1674}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1673}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1672}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1671}, - // 785 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1670}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1669}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1668}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1667}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1666}, - // 790 - {350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 134: 350, 350, 138: 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 150: 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 198: 350, 350, 350, 350}, - {351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 134: 351, 351, 138: 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 150: 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 1665, 351, 198: 351, 351, 351, 351}, - {352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 134: 352, 352, 138: 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 150: 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1665, 352, 198: 352, 352, 352, 352}, - {353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 134: 353, 353, 138: 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 150: 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 1665, 353, 198: 353, 353, 353, 353}, - {354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 134: 354, 354, 138: 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 150: 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 1665, 354, 198: 354, 354, 354, 354}, - // 795 - {355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 134: 355, 355, 138: 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 150: 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 1665, 355, 198: 355, 355, 355, 355}, - {356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 134: 356, 356, 138: 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 150: 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 1660, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 1662, 356, 1661, 1665, 356, 198: 1663, 356, 1664, 356}, - {357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 134: 357, 357, 138: 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 150: 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1660, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 1662, 357, 1661, 1665, 357, 198: 1663, 357, 1664, 357}, - {358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 134: 1658, 1659, 138: 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 150: 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 1660, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 1662, 358, 1661, 1665, 358, 198: 1663, 358, 1664, 358}, - {359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 134: 1658, 1659, 138: 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 150: 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 1660, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 1662, 359, 1661, 1665, 359, 198: 1663, 359, 1664, 359}, - // 800 - {360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 134: 1658, 1659, 138: 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 150: 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 1660, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 1662, 360, 1661, 1665, 360, 198: 1663, 1656, 1664, 1657}, - {361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 134: 1658, 1659, 138: 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 150: 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 1660, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 1662, 1655, 1661, 1665, 361, 198: 1663, 1656, 1664, 1657}, - {133: 1692, 246: 1693}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1689}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1685, 287: 1291, 294: 1252}, - // 805 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1684, 287: 1291, 294: 1252}, - {719, 719, 4: 719, 719, 719, 9: 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 131: 719, 719, 719, 719, 719, 719, 719, 197: 719, 202: 719, 210: 719, 212: 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719}, - {718, 718, 4: 718, 718, 718, 9: 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 131: 718, 718, 718, 718, 718, 718, 718, 197: 718, 202: 718, 210: 718, 212: 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718}, - {721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 130: 721, 721, 721, 138: 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 1450, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 162: 721, 721, 721, 166: 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 181: 721, 721, 721, 721, 721, 721, 721, 721}, - {717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 1687, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 130: 717, 717, 717, 138: 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 1450, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 162: 717, 717, 717, 166: 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 181: 717, 717, 717, 717, 717, 717, 717, 717, 502: 1686}, - // 810 - {722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 130: 722, 722, 722, 138: 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 150: 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 162: 722, 722, 722, 166: 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 181: 722, 722, 722, 722, 722, 722, 722, 722}, - {131: 1688}, - {716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 130: 716, 716, 716, 138: 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 150: 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 162: 716, 716, 716, 166: 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 181: 716, 716, 716, 716, 716, 716, 716, 716}, - {134: 1658, 1659, 138: 1690, 165: 1660, 192: 1662, 1655, 1661, 1665, 1654, 198: 1663, 1656, 1664, 1657}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1691}, - // 815 - {723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 130: 723, 723, 723, 138: 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 150: 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 162: 723, 723, 723, 166: 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 181: 723, 723, 723, 723, 723, 723, 723, 723}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1470, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 899, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 307: 1459, 309: 1694, 315: 902, 901, 1460}, - {724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 130: 724, 724, 724, 138: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 150: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 162: 724, 724, 724, 166: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 181: 724, 724, 724, 724, 724, 724, 724, 724}, - {7: 1695, 1448}, - {725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 130: 725, 725, 725, 138: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 150: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 162: 725, 725, 725, 166: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 181: 725, 725, 725, 725, 725, 725, 725, 725}, - // 820 - {41: 715, 129: 1653, 137: 715, 215: 715, 715, 434: 1712}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1708, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1709, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1706, 305: 1710, 462: 1707}, - {736, 736, 4: 736, 736, 736, 9: 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 131: 736, 736, 736, 736, 736, 736, 736, 197: 736, 202: 736, 210: 736, 212: 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 305: 736}, - {735, 735, 4: 735, 735, 735, 9: 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 131: 735, 735, 735, 735, 735, 735, 735, 197: 735, 202: 735, 210: 735, 212: 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 305: 735}, - {734, 734, 4: 734, 734, 734, 9: 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 131: 734, 734, 734, 734, 734, 734, 734, 197: 734, 202: 734, 210: 734, 212: 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 305: 734}, - // 825 - {733, 733, 4: 733, 733, 733, 9: 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 131: 733, 733, 733, 733, 733, 733, 733, 197: 733, 202: 733, 210: 733, 212: 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 305: 733}, - {732, 732, 4: 732, 732, 732, 9: 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 131: 732, 732, 732, 732, 732, 732, 732, 197: 732, 202: 732, 210: 732, 212: 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 305: 732}, - {731, 731, 4: 731, 731, 731, 9: 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 131: 731, 731, 731, 731, 731, 731, 731, 197: 731, 202: 731, 210: 731, 212: 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 305: 731}, - {730, 730, 4: 730, 730, 730, 9: 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 131: 730, 730, 730, 730, 730, 730, 730, 197: 730, 202: 730, 210: 730, 212: 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 305: 730}, - {729, 729, 4: 729, 729, 729, 9: 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 131: 729, 729, 729, 729, 729, 729, 729, 197: 729, 202: 729, 210: 729, 212: 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 305: 729}, - // 830 - {739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 130: 739, 739, 739, 138: 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 150: 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 162: 739, 739, 739, 166: 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 181: 739, 739, 739, 739, 739, 739, 739, 739}, - {133: 1458, 246: 1711}, - {628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 728, 628, 628, 138: 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 198: 628, 628, 628, 628, 211: 628}, - {627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 727, 627, 627, 138: 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 198: 627, 627, 627, 627, 211: 627}, - {133: 726}, - // 835 - {738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 130: 738, 738, 738, 138: 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 150: 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 162: 738, 738, 738, 166: 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 181: 738, 738, 738, 738, 738, 738, 738, 738}, - {41: 1715, 137: 1716, 215: 1714, 1713}, - {753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 130: 753, 753, 753, 138: 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 150: 753, 152: 753, 753, 753, 753, 753, 753, 753, 753, 753, 162: 753, 753, 753, 166: 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753}, - {752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 130: 752, 752, 752, 138: 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 150: 752, 152: 752, 752, 752, 752, 752, 752, 752, 752, 752, 162: 752, 752, 752, 166: 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752}, - {751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 130: 751, 751, 751, 138: 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 150: 751, 152: 751, 751, 751, 751, 751, 751, 751, 751, 751, 162: 751, 751, 751, 166: 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751}, - // 840 - {740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 130: 740, 740, 740, 138: 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 150: 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 162: 740, 740, 740, 166: 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 181: 740, 740, 740, 740, 740, 740, 740, 740}, - {754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 130: 754, 754, 754, 138: 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 150: 754, 152: 754, 754, 754, 754, 754, 754, 754, 754, 754, 162: 754, 754, 754, 166: 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 300: 1299, 1297}, - {2: 306, 306, 7: 306, 306, 130: 1719, 132: 306, 139: 306, 144: 306, 306, 147: 306, 306, 150: 306, 152: 306, 306, 306, 156: 306, 306, 306, 306, 306, 344: 1173, 347: 1174}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1720, 1189}, - {2: 305, 305, 7: 305, 305, 130: 305, 132: 305, 138: 1303, 305, 1302, 1301, 1300, 1298, 305, 305, 147: 305, 305, 150: 305, 152: 305, 305, 305, 156: 305, 305, 305, 305, 305, 300: 1299, 1297}, - // 845 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1158, 206: 1073, 948, 947, 303: 1157, 318: 1154, 325: 1156, 1155, 328: 1160, 334: 1723}, - {2: 311, 311, 7: 311, 311, 130: 311, 132: 311, 139: 311, 144: 311, 311, 147: 311, 311, 150: 311, 152: 311, 311, 311, 156: 311, 311, 311, 311, 311}, - {2: 319, 319, 7: 319, 319, 130: 319, 139: 319, 144: 319, 319, 147: 319, 319, 150: 319, 152: 319, 319, 156: 319}, - {2: 314, 314, 7: 314, 314, 130: 314, 132: 314, 139: 314, 144: 314, 314, 147: 314, 314, 150: 314, 152: 314, 314, 314, 156: 314, 314, 314, 314, 314}, - {2: 309, 309, 7: 309, 309, 130: 309, 132: 309, 139: 309, 144: 309, 309, 147: 309, 309, 150: 309, 152: 309, 309, 309, 156: 309, 309, 309, 309, 309}, - // 850 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1158, 206: 1073, 948, 947, 303: 1157, 325: 1156, 1155, 328: 1727}, - {132: 1175, 154: 1177, 157: 1178, 1179, 1176, 1728, 344: 1173, 347: 1174}, - {2: 317, 317, 7: 317, 317, 130: 317, 139: 317, 144: 317, 317, 147: 317, 317, 150: 317, 152: 317, 317, 156: 317}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1730, 356: 1731, 365: 1732}, - {151: 1754}, - // 855 - {2: 851, 851, 8: 851, 145: 851, 148: 851, 150: 851}, - {2: 45, 45, 8: 1733, 145: 45, 148: 1735, 150: 45, 337: 1736, 1734}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1730, 356: 1753}, - {2: 503, 503, 145: 503, 150: 1738, 361: 1739, 1740}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1737, 1189}, - // 860 - {2: 44, 44, 7: 44, 130: 44, 139: 44, 144: 44, 44, 147: 44, 150: 44, 152: 44, 156: 44}, - {2: 46, 46, 7: 46, 130: 46, 138: 1303, 46, 1302, 1301, 1300, 1298, 46, 46, 147: 46, 150: 46, 152: 46, 156: 46, 300: 1299, 1297}, - {366: 1744}, - {2: 502, 502, 7: 502, 130: 502, 139: 502, 144: 502, 502, 147: 502}, - {2: 296, 296, 145: 1741, 429: 1742}, - // 865 - {210: 1399, 310: 1743, 1398}, - {2: 49, 49}, - {2: 295, 295}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1745, 1189, 367: 1747, 394: 1746}, - {2: 506, 506, 7: 506, 506, 130: 506, 138: 1303, 506, 1302, 1301, 1300, 1298, 506, 506, 147: 506, 150: 506, 152: 506, 163: 1752, 166: 1751, 300: 1299, 1297, 438: 1750}, - // 870 - {2: 510, 510, 7: 510, 1748, 130: 510, 139: 510, 144: 510, 510, 147: 510}, - {2: 509, 509, 7: 509, 509, 130: 509, 139: 509, 144: 509, 509, 147: 509, 150: 509, 152: 509}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1745, 1189, 367: 1749}, - {2: 508, 508, 7: 508, 508, 130: 508, 139: 508, 144: 508, 508, 147: 508, 150: 508, 152: 508}, - {2: 507, 507, 7: 507, 507, 130: 507, 139: 507, 144: 507, 507, 147: 507, 150: 507, 152: 507}, - // 875 - {2: 505, 505, 7: 505, 505, 130: 505, 139: 505, 144: 505, 505, 147: 505, 150: 505, 152: 505}, - {2: 504, 504, 7: 504, 504, 130: 504, 139: 504, 144: 504, 504, 147: 504, 150: 504, 152: 504}, - {2: 850, 850, 8: 850, 145: 850, 148: 850, 150: 850}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1755, 1189}, - {2: 852, 852, 8: 852, 138: 1303, 140: 1302, 1301, 1300, 1298, 145: 852, 148: 852, 150: 852, 300: 1299, 1297}, - // 880 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1730, 356: 1731, 365: 1757}, - {2: 45, 45, 8: 1733, 148: 1735, 337: 1736, 1758}, - {2: 48, 48}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1760}, - {2: 133, 133}, - // 885 - {2: 212, 212, 148: 1810, 161: 1809, 530: 1808}, - {327: 1806}, - {2: 229, 229, 144: 1804}, - {146: 1802}, - {2: 226, 226, 148: 226, 161: 226}, - // 890 - {2: 225, 225, 148: 225, 161: 225}, - {2: 224, 224, 148: 224, 161: 224}, - {153: 1801}, - {22: 1789, 27: 1790, 31: 1791}, - {21: 1787}, - // 895 - {2: 218, 218, 148: 218, 161: 218}, - {21: 1786, 25: 1785}, - {2: 215, 215, 148: 215, 161: 215}, - {2: 204, 204, 146: 1781, 148: 204, 161: 204, 180: 1782, 351: 1780}, - {21: 1779}, - // 900 - {21: 208, 25: 208}, - {21: 207, 25: 207}, - {22: 205, 27: 205, 31: 205}, - {2: 213, 213, 148: 213, 161: 213}, - {2: 214, 214, 148: 214, 161: 214}, - // 905 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1145, 948, 947, 345: 1784}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1145, 948, 947, 345: 1783}, - {2: 202, 202, 148: 202, 161: 202}, - {2: 203, 203, 148: 203, 161: 203}, - {2: 217, 217, 148: 217, 161: 217}, - // 910 - {2: 216, 216, 148: 216, 161: 216}, - {2: 204, 204, 146: 1781, 148: 204, 161: 204, 180: 1782, 351: 1788}, - {2: 221, 221, 148: 221, 161: 221}, - {2: 204, 204, 146: 1781, 148: 204, 161: 204, 180: 1782, 351: 1800}, - {146: 1793, 180: 1794, 446: 1798}, - // 915 - {146: 1793, 180: 1794, 446: 1792}, - {2: 204, 204, 146: 1781, 148: 204, 161: 204, 180: 1782, 351: 1797}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1796}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1795}, - {2: 200, 200, 146: 200, 148: 200, 161: 200, 180: 200}, - // 920 - {2: 201, 201, 146: 201, 148: 201, 161: 201, 180: 201}, - {2: 219, 219, 148: 219, 161: 219}, - {2: 204, 204, 146: 1781, 148: 204, 161: 204, 180: 1782, 351: 1799}, - {2: 220, 220, 148: 220, 161: 220}, - {2: 222, 222, 148: 222, 161: 222}, - // 925 - {2: 223, 223, 148: 223, 161: 223}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1803}, - {2: 227, 227}, - {131: 1129, 354: 1805}, - {2: 228, 228}, - // 930 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1807}, - {2: 230, 230}, - {2: 231, 231}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1812, 287: 1291, 294: 1252}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1811, 1189}, - // 935 - {2: 210, 210, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {2: 211, 211, 149: 1450}, - {480: 1820}, - {327: 1815}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1816, 352: 1817}, - // 940 - {2: 340, 340, 8: 340, 146: 340}, - {2: 232, 232, 8: 1818}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1819}, - {2: 339, 339, 8: 339, 146: 339, 155: 339}, - {2: 233, 233}, - // 945 - {56, 56, 4: 56, 56, 56, 9: 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 131: 56, 151: 671}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 151: 653, 206: 1883, 948, 947}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 151: 652, 206: 1421, 948, 947, 321: 1880}, - {144: 1870, 151: 1869}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 1867, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 151: 645, 206: 1847, 948, 947}, - // 950 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 1850, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 151: 641, 206: 1844, 948, 947}, - {2: 267, 267, 8: 1840}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 1839}, - {151: 1837}, - {151: 1835}, - // 955 - {151: 1833}, - {2: 243, 243, 8: 243}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1834, 1189}, - {2: 245, 245, 8: 245, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1836, 1189}, - // 960 - {2: 246, 246, 8: 246, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1838, 1189}, - {2: 250, 250, 8: 250, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {2: 264, 264}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 1842, 1018, 974, 1028, 1822, 998, 1013, 1026, 1023, 1027, 1841, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1829, 948, 947, 214: 1831, 222: 1830, 459: 1843}, - // 965 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 151: 645, 206: 1847, 948, 947}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 151: 641, 206: 1844, 948, 947}, - {2: 242, 242, 8: 242}, - {151: 1845}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1846, 1189}, - // 970 - {2: 249, 249, 8: 249, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {151: 1848}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1849, 1189}, - {2: 248, 248, 8: 248, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {33: 1853, 151: 636, 250: 1854, 385: 1852, 452: 1851}, - // 975 - {2: 261, 261, 8: 1865}, - {2: 259, 259, 8: 259}, - {72: 1857}, - {76: 1856, 295: 1855}, - {2: 256, 256, 8: 256}, - // 980 - {2: 255, 255, 8: 255}, - {77: 1859, 1861, 250: 1860, 499: 1858}, - {2: 257, 257, 8: 257}, - {250: 1864}, - {66: 1862, 84: 1863}, - // 985 - {2: 251, 251, 8: 251}, - {2: 253, 253, 8: 253}, - {2: 252, 252, 8: 252}, - {2: 254, 254, 8: 254}, - {33: 1853, 250: 1854, 385: 1866}, - // 990 - {2: 258, 258, 8: 258}, - {33: 1853, 151: 636, 250: 1854, 385: 1852, 452: 1868}, - {2: 260, 260, 8: 1865}, - {10: 1875, 131: 1874, 439: 1879}, - {131: 1129, 354: 1871}, - // 995 - {151: 1872}, - {10: 1875, 131: 1874, 439: 1873}, - {2: 262, 262}, - {2: 236, 236}, - {133: 1876}, - // 1000 - {131: 1138, 392: 1877}, - {7: 1878}, - {2: 235, 235}, - {2: 263, 263}, - {2: 266, 266, 149: 1881}, - // 1005 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 1882}, - {2: 265, 265}, - {151: 1884}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1885, 1189}, - {2: 247, 247, 8: 247, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - // 1010 - {133: 270, 243: 270, 305: 1888, 330: 1889, 545: 1887}, - {133: 1891, 243: 899, 307: 1890, 315: 1892}, - {133: 269, 243: 269}, - {133: 268, 243: 268}, - {2: 276, 276, 7: 276, 130: 276, 139: 272}, - // 1015 - {243: 899, 307: 1893}, - {139: 273}, - {7: 1894}, - {2: 503, 503, 7: 503, 130: 503, 139: 271, 145: 503, 150: 1738, 361: 1739, 1895}, - {2: 294, 294, 7: 294, 130: 294, 145: 1896, 363: 1897}, - // 1020 - {210: 1399, 310: 1898, 1398}, - {2: 275, 275, 7: 275, 130: 275}, - {2: 293, 293, 7: 293, 1899, 37: 1900, 130: 293, 139: 293, 144: 293, 147: 293}, - {210: 1399, 310: 1902, 1398}, - {210: 1399, 310: 1901, 1398}, - // 1025 - {2: 291, 291, 7: 291, 130: 291, 139: 291, 144: 291, 147: 291}, - {2: 292, 292, 7: 292, 130: 292, 139: 292, 144: 292, 147: 292}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 165: 1911, 197: 1262, 202: 1279, 206: 1909, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1910, 1189, 422: 1912, 489: 1913, 526: 1914}, - {289, 289, 4: 289, 289, 289, 9: 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 131: 289, 289, 289, 289, 289, 289, 289, 165: 289, 197: 289, 202: 289, 210: 289, 212: 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289}, - {288, 288, 4: 288, 288, 288, 9: 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 131: 288, 288, 288, 288, 288, 288, 288, 165: 288, 197: 288, 202: 288, 210: 288, 212: 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288}, - // 1030 - {286, 286, 4: 286, 286, 286, 9: 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 1908, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 131: 286, 286, 286, 286, 286, 286, 286, 165: 286, 197: 286, 202: 286, 210: 286, 212: 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 524: 1907}, - {287, 287, 4: 287, 287, 287, 9: 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 131: 287, 287, 287, 287, 287, 287, 287, 165: 287, 197: 287, 202: 287, 210: 287, 212: 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287}, - {285, 285, 4: 285, 285, 285, 9: 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 131: 285, 285, 285, 285, 285, 285, 285, 165: 285, 197: 285, 202: 285, 210: 285, 212: 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285}, - {844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 134: 844, 844, 138: 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 149: 844, 151: 844, 161: 844, 844, 165: 844, 180: 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 198: 844, 844, 844, 844, 211: 1952}, - {1005, 949, 709, 709, 950, 971, 957, 709, 709, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 130: 709, 1949, 138: 1303, 709, 1302, 1301, 1300, 1298, 709, 709, 709, 709, 162: 1948, 206: 1947, 948, 947, 300: 1299, 1297, 487: 1946, 1945}, - // 1035 - {2: 713, 713, 7: 713, 713, 130: 713, 139: 713, 144: 713, 713, 713, 713}, - {2: 703, 703, 7: 703, 703, 130: 703, 139: 703, 144: 703, 703, 703, 703}, - {2: 284, 284, 7: 284, 1943, 130: 284, 139: 284, 144: 284, 284, 284, 284}, - {2: 294, 294, 7: 294, 130: 294, 139: 294, 144: 294, 1896, 1917, 294, 363: 1915, 492: 1916}, - {2: 279, 279, 7: 279, 130: 279, 139: 279, 144: 1930, 147: 1931, 381: 1942}, - // 1040 - {2: 45, 45, 7: 45, 130: 45, 139: 45, 144: 45, 45, 147: 45, 1735, 337: 1736, 1939}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1158, 206: 1073, 948, 947, 303: 1157, 318: 1154, 325: 1156, 1155, 328: 1160, 334: 1151, 342: 1920, 482: 1919, 540: 1918}, - {2: 45, 45, 7: 45, 130: 45, 139: 45, 144: 45, 45, 147: 45, 1735, 150: 45, 152: 45, 156: 45, 337: 1736, 1921}, - {2: 322, 322, 7: 322, 130: 322, 139: 322, 144: 322, 322, 147: 322, 322}, - {2: 321, 321, 7: 321, 1721, 130: 321, 139: 321, 144: 321, 321, 147: 321, 321, 150: 321, 152: 321, 156: 321}, - // 1045 - {2: 283, 283, 7: 283, 130: 283, 139: 283, 144: 283, 283, 147: 283, 150: 283, 152: 283, 156: 1922, 494: 1924, 527: 1923}, - {366: 1937}, - {2: 700, 700, 7: 700, 130: 700, 139: 700, 144: 700, 700, 147: 700, 150: 700, 152: 1925, 496: 1926}, - {2: 282, 282, 7: 282, 130: 282, 139: 282, 144: 282, 282, 147: 282, 150: 282, 152: 282}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1936, 1189}, - // 1050 - {2: 503, 503, 7: 503, 130: 503, 139: 503, 144: 503, 503, 147: 503, 150: 1738, 361: 1739, 1927}, - {2: 294, 294, 7: 294, 130: 294, 139: 294, 144: 294, 1896, 147: 294, 363: 1928}, - {2: 279, 279, 7: 279, 130: 279, 139: 279, 144: 1930, 147: 1931, 381: 1929}, - {2: 323, 323, 7: 323, 130: 323, 139: 323}, - {322: 1935}, - // 1055 - {180: 1932}, - {529: 1933}, - {74: 1934}, - {2: 277, 277, 7: 277, 130: 277, 139: 277}, - {2: 278, 278, 7: 278, 130: 278, 139: 278}, - // 1060 - {2: 699, 699, 7: 699, 130: 699, 138: 1303, 699, 1302, 1301, 1300, 1298, 699, 699, 147: 699, 150: 699, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1745, 1189, 367: 1747, 394: 1938}, - {2: 701, 701, 7: 701, 1748, 130: 701, 139: 701, 144: 701, 701, 147: 701, 150: 701, 152: 701}, - {2: 294, 294, 7: 294, 130: 294, 139: 294, 144: 294, 1896, 147: 294, 363: 1940}, - {2: 279, 279, 7: 279, 130: 279, 139: 279, 144: 1930, 147: 1931, 381: 1941}, - // 1065 - {2: 324, 324, 7: 324, 130: 324, 139: 324}, - {2: 325, 325, 7: 325, 130: 325, 139: 325}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 165: 1911, 197: 1262, 202: 1279, 206: 1909, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1910, 1189, 422: 1944}, - {2: 702, 702, 7: 702, 702, 130: 702, 139: 702, 144: 702, 702, 702, 702}, - {2: 710, 710, 7: 710, 710, 130: 710, 139: 710, 144: 710, 710, 710, 710}, - // 1070 - {2: 708, 708, 7: 708, 708, 130: 708, 139: 708, 144: 708, 708, 708, 708}, - {2: 707, 707, 7: 707, 707, 130: 707, 139: 707, 144: 707, 707, 707, 707}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1951, 206: 1950, 948, 947}, - {2: 705, 705, 7: 705, 705, 130: 705, 139: 705, 144: 705, 705, 705, 705}, - {2: 706, 706, 7: 706, 706, 130: 706, 139: 706, 144: 706, 706, 706, 706}, - // 1075 - {2: 704, 704, 7: 704, 704, 130: 704, 139: 704, 144: 704, 704, 704, 704}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 165: 1954, 206: 1953, 948, 947}, - {843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 134: 843, 843, 138: 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 149: 843, 151: 843, 161: 843, 843, 165: 843, 180: 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 198: 843, 843, 843, 843, 211: 1955}, - {2: 712, 712, 7: 712, 712, 130: 712, 139: 712, 144: 712, 712, 712, 712}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 165: 1956, 206: 1114, 948, 947}, - // 1080 - {2: 711, 711, 7: 711, 711, 130: 711, 139: 711, 144: 711, 711, 711, 711}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1958, 948, 947}, - {2: 329, 329}, - {2: 333, 333, 155: 1960}, - {214: 1294, 252: 1962, 546: 1961}, - // 1085 - {2: 332, 332, 8: 1963}, - {2: 331, 331, 8: 331}, - {214: 1294, 252: 1964}, - {2: 330, 330, 8: 330}, - {146: 1966}, - // 1090 - {131: 1968, 214: 1294, 252: 1969, 513: 1967}, - {2: 336, 336}, - {2: 335, 335}, - {2: 334, 334}, - {554, 554, 4: 554, 554, 554, 9: 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 320: 1973, 428: 1974}, - // 1095 - {531, 531, 4: 531, 531, 531, 9: 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 320: 531}, - {530, 530, 4: 530, 530, 530, 9: 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 320: 530}, - {553, 553, 4: 553, 553, 553, 9: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1975}, - {42: 1981, 133: 1976, 153: 1980, 202: 1982, 243: 899, 307: 1978, 315: 902, 901, 1979, 388: 1977, 426: 1983}, - // 1100 - {1005, 949, 4: 950, 971, 957, 839, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1106, 899, 307: 1462, 398: 2000, 468: 2001}, - {133: 1992, 357: 1991}, - {2: 548, 548, 130: 548, 139: 272}, - {2: 547, 547, 130: 547}, - {1005, 949, 538, 538, 950, 971, 957, 8: 538, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 130: 538, 206: 1105, 948, 947, 242: 1985, 400: 1986, 472: 1984}, - // 1105 - {133: 545}, - {133: 544}, - {2: 533, 533}, - {2: 546, 546, 8: 1989, 130: 546}, - {151: 1987}, - // 1110 - {2: 537, 537, 8: 537, 130: 537}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1988, 1189}, - {2: 539, 539, 8: 539, 130: 539, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1985, 400: 1990}, - {2: 536, 536, 8: 536, 130: 536}, - // 1115 - {2: 549, 549, 130: 549}, - {1005, 949, 4: 950, 971, 957, 1994, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 1444, 1189, 309: 1993}, - {7: 1997, 1448}, - {2: 543, 543, 8: 1995, 130: 543}, - {133: 1992, 357: 1996}, - // 1120 - {2: 542, 542, 130: 542}, - {2: 541, 541, 8: 1998, 130: 541}, - {133: 1992, 357: 1999}, - {2: 540, 540, 130: 540}, - {7: 838, 1108}, - // 1125 - {7: 2002}, - {42: 1981, 133: 1461, 202: 1982, 243: 899, 307: 2004, 315: 902, 901, 2005, 388: 2003}, - {133: 1992, 357: 2006}, - {2: 551, 551, 130: 551, 139: 272}, - {2: 550, 550, 130: 550}, - // 1130 - {2: 552, 552, 130: 552}, - {694, 694, 4: 694, 694, 694, 9: 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 313: 1149, 320: 694, 359: 2011}, - {347, 347, 4: 347, 347, 347, 9: 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 313: 347, 320: 347}, - {346, 346, 4: 346, 346, 346, 9: 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 313: 346, 320: 346}, - {345, 345, 4: 345, 345, 345, 9: 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 313: 345, 320: 345}, - // 1135 - {554, 554, 4: 554, 554, 554, 9: 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 320: 1973, 428: 2012}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 2013}, - {42: 1981, 133: 1976, 153: 1980, 202: 1982, 243: 899, 307: 1978, 315: 902, 901, 1979, 388: 1977, 426: 2014}, - {2: 535, 535, 130: 2016, 507: 2015}, - {2: 555, 555}, - // 1140 - {483: 2017}, - {244: 2018}, - {322: 2019}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 1730, 356: 1731, 365: 2020}, - {2: 534, 534, 8: 1733}, - // 1145 - {1005, 949, 762, 762, 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2028}, - {2: 760, 760}, - {2: 167, 167}, - {2: 166, 166}, - {2: 165, 165}, - // 1150 - {2: 164, 164}, - {2: 163, 163}, - {2: 761, 761}, - {776, 776, 4: 776, 776, 776, 9: 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 212: 776}, - {775, 775, 4: 775, 775, 775, 9: 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 212: 775}, - // 1155 - {698, 698, 4: 698, 698, 698, 9: 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 212: 2041, 425: 2046}, - {698, 698, 4: 698, 698, 698, 9: 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 212: 2041, 425: 2040}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 212: 2037, 303: 1816, 352: 2036}, - {770, 770, 4: 770, 770, 770, 9: 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 212: 770}, - {769, 769, 4: 769, 769, 769, 9: 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 212: 769}, - // 1160 - {2: 772, 772, 8: 1818}, - {217: 2038}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 1816, 352: 2039}, - {2: 771, 771, 8: 1818}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 2043, 948, 947}, - // 1165 - {217: 2042}, - {697, 697, 4: 697, 697, 697, 9: 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697}, - {130: 2044}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 2045}, - {2: 773, 773}, - // 1170 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1145, 948, 947, 345: 2047}, - {2: 774, 774}, - {338, 338, 4: 338, 338, 338, 9: 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 2050, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 146: 338, 313: 338, 518: 2049}, - {694, 694, 4: 694, 694, 694, 9: 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 146: 694, 313: 1149, 359: 2051}, - {337, 337, 4: 337, 337, 337, 9: 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 146: 337, 313: 337}, - // 1175 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 146: 2052, 206: 1073, 948, 947, 303: 1816, 352: 2053}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 2057, 352: 2058}, - {8: 1818, 146: 2054}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1158, 206: 1073, 948, 947, 303: 1157, 318: 1154, 325: 1156, 1155, 328: 1160, 334: 1151, 342: 2055}, - {2: 45, 45, 8: 1721, 148: 1735, 337: 1736, 2056}, - // 1180 - {2: 778, 778}, - {2: 45, 45, 8: 340, 145: 45, 148: 1735, 150: 45, 155: 340, 337: 1736, 2062}, - {8: 1818, 155: 2059}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 1158, 206: 1073, 948, 947, 303: 1157, 318: 1154, 325: 1156, 1155, 328: 1160, 334: 1151, 342: 2060}, - {2: 45, 45, 8: 1721, 148: 1735, 337: 1736, 2061}, - // 1185 - {2: 777, 777}, - {2: 503, 503, 145: 503, 150: 1738, 361: 1739, 2063}, - {2: 296, 296, 145: 1741, 429: 2064}, - {2: 779, 779}, - {2: 780, 780, 8: 1448}, - // 1190 - {245: 2385}, - {245: 799}, - {696, 696, 4: 696, 696, 696, 9: 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 212: 2071, 376: 2372}, - {696, 696, 4: 696, 696, 696, 9: 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, 212: 2071, 376: 2076}, - {131: 696, 212: 2071, 376: 2072}, - // 1195 - {129: 2074}, - {131: 1129, 354: 1130, 387: 1131, 457: 2073}, - {2: 41, 41, 8: 1133}, - {217: 2075}, - {695, 695, 4: 695, 695, 695, 9: 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 131: 695}, - // 1200 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 2077}, - {133: 2078}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 203: 856, 856, 2085, 1105, 948, 947, 242: 2080, 244: 856, 856, 249: 856, 251: 856, 368: 2083, 2079, 2084, 2082, 450: 2086, 537: 2081}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 203: 855, 855, 206: 2371, 948, 947, 244: 855, 855, 249: 855, 251: 855, 449: 2370}, - {26: 2281, 28: 2278, 2277, 40: 2280, 61: 2260, 2254, 2253, 75: 2268, 80: 2274, 2279, 153: 2267, 197: 2262, 247: 87, 253: 2255, 2251, 256: 87, 259: 2252, 2270, 263: 2259, 2266, 2237, 2238, 2257, 274: 2239, 2250, 2272, 2276, 2271, 2249, 2275, 2256, 284: 2258, 2248, 2240, 288: 2269, 2247, 2273, 2242, 2241, 2263, 465: 2246, 2264, 478: 2236, 490: 2244, 2245, 498: 2243, 504: 2261, 2234, 535: 2235, 541: 2265, 544: 2233}, - // 1205 - {7: 2170, 2171}, - {203: 2090, 2094, 244: 2093, 2092, 249: 2095, 251: 2091, 474: 2096}, - {7: 159, 159}, - {7: 158, 158}, - {133: 2087}, - // 1210 - {7: 156, 156}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 2088, 1189}, - {7: 2089, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {7: 157, 157}, - {244: 2164}, - // 1215 - {244: 2158}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 692, 155: 692, 206: 2099, 948, 947, 331: 2152}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 692, 155: 692, 206: 2099, 948, 947, 331: 2146}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 692, 155: 692, 206: 2099, 948, 947, 244: 2117, 2116, 331: 2115}, - {244: 2097}, - // 1220 - {2: 160, 160, 7: 160, 160}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 692, 206: 2099, 948, 947, 331: 2098}, - {133: 2100}, - {2: 691, 691, 8: 691, 133: 691, 155: 691}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2101}, - // 1225 - {7: 2106, 2107}, - {7: 71, 71, 133: 1396, 163: 71, 166: 71, 306: 1397, 312: 2104}, - {7: 796, 796}, - {7: 506, 506, 163: 1752, 166: 1751, 438: 2105}, - {7: 798, 798}, - // 1230 - {519: 2109, 2110}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2108}, - {7: 795, 795}, - {2: 815, 815, 7: 815, 815}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 2111}, - // 1235 - {133: 2112}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2113}, - {7: 2114, 2107}, - {2: 814, 814, 7: 814, 814}, - {133: 684, 155: 2120, 314: 2121, 340: 2141}, - // 1240 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 692, 155: 692, 206: 2099, 948, 947, 331: 2135}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 692, 155: 692, 206: 2099, 948, 947, 331: 2118}, - {133: 684, 155: 2120, 314: 2121, 340: 2119}, - {133: 2124}, - {64: 2122, 71: 2123}, - // 1245 - {133: 683}, - {2: 686, 686, 7: 686, 686, 133: 686}, - {2: 685, 685, 7: 685, 685, 133: 685}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2125}, - {7: 2126, 2107}, - // 1250 - {2130, 2: 690, 690, 7: 690, 690, 2128, 155: 2120, 314: 2129, 335: 2127}, - {2: 816, 816, 7: 816, 816}, - {151: 2132, 210: 768, 308: 2133}, - {2: 688, 688, 7: 688, 688}, - {131: 2131}, - // 1255 - {2: 687, 687, 7: 687, 687}, - {767, 767, 4: 767, 767, 767, 9: 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 131: 767, 136: 767, 210: 767}, - {210: 1399, 310: 2134, 1398}, - {2: 689, 689, 7: 689, 689}, - {133: 684, 155: 2120, 314: 2121, 340: 2136}, - // 1260 - {133: 2137}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2138}, - {7: 2139, 2107}, - {2130, 2: 690, 690, 7: 690, 690, 2128, 155: 2120, 314: 2129, 335: 2140}, - {2: 817, 817, 7: 817, 817}, - // 1265 - {133: 2142}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2143}, - {7: 2144, 2107}, - {2130, 2: 690, 690, 7: 690, 690, 2128, 155: 2120, 314: 2129, 335: 2145}, - {2: 818, 818, 7: 818, 818}, - // 1270 - {133: 684, 155: 2120, 314: 2121, 340: 2147}, - {133: 2148}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2149}, - {7: 2150, 2107}, - {2130, 2: 690, 690, 7: 690, 690, 2128, 155: 2120, 314: 2129, 335: 2151}, - // 1275 - {2: 819, 819, 7: 819, 819}, - {133: 684, 155: 2120, 314: 2121, 340: 2153}, - {133: 2154}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2155}, - {7: 2156, 2107}, - // 1280 - {2130, 2: 690, 690, 7: 690, 690, 2128, 155: 2120, 314: 2129, 335: 2157}, - {2: 820, 820, 7: 820, 820}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 133: 692, 206: 2099, 948, 947, 331: 2159}, - {133: 2160}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2161}, - // 1285 - {7: 2162, 2107}, - {2130, 2: 690, 690, 7: 690, 690, 2128, 155: 2120, 314: 2129, 335: 2163}, - {2: 821, 821, 7: 821, 821}, - {133: 684, 155: 2120, 314: 2121, 340: 2165}, - {133: 2166}, - // 1290 - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2167}, - {7: 2168, 2107}, - {2130, 2: 690, 690, 7: 690, 690, 2128, 155: 2120, 314: 2129, 335: 2169}, - {2: 822, 822, 7: 822, 822}, - {2178, 2177, 138, 138, 6: 782, 9: 2184, 2182, 2179, 2181, 2183, 2180, 2187, 2175, 2185, 2186, 2191, 136: 2174, 149: 782, 209: 782, 333: 2176, 349: 2188, 353: 2190, 382: 2189, 2173}, - // 1295 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 203: 856, 856, 2085, 1105, 948, 947, 242: 2080, 244: 856, 856, 249: 856, 251: 856, 368: 2083, 2079, 2084, 2082, 450: 2172}, - {7: 155, 155}, - {2: 786, 786}, - {6: 781, 149: 781, 209: 781}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 151: 2231, 206: 2230, 948, 947}, - // 1300 - {6: 1417, 149: 2225, 209: 1416, 323: 2224}, - {151: 2222}, - {131: 768, 151: 2132, 308: 2220}, - {151: 2132, 210: 768, 308: 2218}, - {131: 768, 151: 2132, 308: 2216}, - // 1305 - {151: 2132, 210: 768, 308: 2214}, - {131: 768, 151: 2132, 308: 2212}, - {768, 768, 4: 768, 768, 768, 9: 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 151: 2132, 308: 2210}, - {151: 2132, 210: 768, 308: 2208}, - {151: 2132, 210: 768, 308: 2206}, - // 1310 - {151: 2132, 210: 768, 308: 2204}, - {151: 2132, 210: 768, 308: 2202}, - {139, 139, 139, 139, 6: 139, 8: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 136: 139, 149: 139, 209: 139}, - {2178, 2177, 137, 137, 6: 782, 8: 2200, 2184, 2182, 2179, 2181, 2183, 2180, 2187, 2175, 2185, 2186, 2191, 136: 2174, 149: 782, 209: 782, 333: 2176, 349: 2188, 353: 2199}, - {136, 136, 136, 136, 6: 136, 8: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136: 136, 149: 136, 209: 136}, - // 1315 - {47: 768, 768, 51: 768, 768, 55: 768, 136: 768, 151: 2132, 308: 2192}, - {47: 2198, 2196, 51: 2194, 2195, 55: 2197, 136: 2193}, - {132, 132, 132, 132, 6: 132, 8: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 136: 132, 149: 132, 209: 132}, - {131, 131, 131, 131, 6: 131, 8: 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 136: 131, 149: 131, 209: 131}, - {130, 130, 130, 130, 6: 130, 8: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 136: 130, 149: 130, 209: 130}, - // 1320 - {129, 129, 129, 129, 6: 129, 8: 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 136: 129, 149: 129, 209: 129}, - {128, 128, 128, 128, 6: 128, 8: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 136: 128, 149: 128, 209: 128}, - {127, 127, 127, 127, 6: 127, 8: 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 136: 127, 149: 127, 209: 127}, - {135, 135, 135, 135, 6: 135, 8: 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136: 135, 149: 135, 209: 135}, - {2178, 2177, 6: 782, 9: 2184, 2182, 2179, 2181, 2183, 2180, 2187, 2175, 2185, 2186, 2191, 136: 2174, 149: 782, 209: 782, 333: 2176, 349: 2188, 353: 2201}, - // 1325 - {134, 134, 134, 134, 6: 134, 8: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 136: 134, 149: 134, 209: 134}, - {210: 1399, 310: 2203, 1398}, - {140, 140, 140, 140, 6: 140, 8: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 136: 140, 149: 140, 209: 140}, - {210: 1399, 310: 2205, 1398}, - {141, 141, 141, 141, 6: 141, 8: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 136: 141, 149: 141, 209: 141}, - // 1330 - {210: 1399, 310: 2207, 1398}, - {142, 142, 142, 142, 6: 142, 8: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 136: 142, 149: 142, 209: 142}, - {210: 1399, 310: 2209, 1398}, - {143, 143, 143, 143, 6: 143, 8: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 136: 143, 149: 143, 209: 143}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 2211, 948, 947}, - // 1335 - {144, 144, 144, 144, 6: 144, 8: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 136: 144, 149: 144, 209: 144}, - {131: 2213}, - {145, 145, 145, 145, 6: 145, 8: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 136: 145, 149: 145, 209: 145}, - {210: 1399, 310: 2215, 1398}, - {146, 146, 146, 146, 6: 146, 8: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 136: 146, 149: 146, 209: 146}, - // 1340 - {131: 2217}, - {147, 147, 147, 147, 6: 147, 8: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 136: 147, 149: 147, 209: 147}, - {210: 1399, 310: 2219, 1398}, - {148, 148, 148, 148, 6: 148, 8: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 136: 148, 149: 148, 209: 148}, - {131: 2221}, - // 1345 - {149, 149, 149, 149, 6: 149, 8: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 136: 149, 149: 149, 209: 149}, - {210: 1399, 310: 2223, 1398}, - {150, 150, 150, 150, 6: 150, 8: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 136: 150, 149: 150, 209: 150}, - {768, 768, 4: 768, 768, 768, 9: 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 131: 768, 151: 2132, 308: 2228}, - {768, 768, 4: 768, 768, 768, 9: 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 131: 768, 151: 2132, 308: 2226}, - // 1350 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 2227}, - {151, 151, 151, 151, 6: 151, 8: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 136: 151, 149: 151, 209: 151}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 2229}, - {152, 152, 152, 152, 6: 152, 8: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 136: 152, 149: 152, 209: 152}, - {154, 154, 154, 154, 6: 154, 8: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 136: 154, 149: 154, 209: 154}, - // 1355 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 2232, 948, 947}, - {153, 153, 153, 153, 6: 153, 8: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 136: 153, 149: 153, 209: 153}, - {2340, 2335, 824, 824, 824, 824, 7: 824, 824, 129: 2333, 2339, 136: 2338, 2334, 203: 2336, 2337, 2341, 399: 2342, 469: 2343, 2332}, - {126, 126, 126, 126, 126, 126, 7: 126, 126, 129: 126, 126, 136: 126, 126, 203: 126, 126, 126}, - {125, 125, 125, 125, 125, 125, 7: 125, 125, 129: 125, 125, 136: 125, 125, 203: 125, 125, 125}, - // 1360 - {124, 124, 124, 124, 124, 124, 7: 124, 124, 129: 124, 124, 136: 124, 124, 203: 124, 124, 124}, - {123, 123, 123, 123, 123, 123, 7: 123, 123, 129: 123, 123, 136: 123, 123, 203: 123, 123, 123}, - {122, 122, 122, 122, 122, 122, 7: 122, 122, 129: 122, 122, 136: 122, 122, 203: 122, 122, 122}, - {121, 121, 121, 121, 121, 121, 7: 121, 121, 129: 121, 121, 136: 121, 121, 203: 121, 121, 121}, - {120, 120, 120, 120, 120, 120, 7: 120, 120, 129: 120, 120, 136: 120, 120, 203: 120, 120, 120}, - // 1365 - {119, 119, 119, 119, 119, 119, 7: 119, 119, 129: 119, 119, 136: 119, 119, 203: 119, 119, 119}, - {118, 118, 118, 118, 118, 118, 7: 118, 118, 129: 118, 118, 136: 118, 118, 203: 118, 118, 118}, - {71, 71, 71, 71, 71, 71, 7: 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 203: 71, 71, 71, 302: 71, 304: 71, 306: 1397, 312: 2330}, - {65, 65, 65, 65, 65, 65, 7: 65, 65, 129: 65, 65, 133: 1403, 136: 65, 65, 203: 65, 65, 65, 302: 65, 304: 65, 306: 1404, 375: 2328, 379: 1405}, - {65, 65, 65, 65, 65, 65, 7: 65, 65, 129: 65, 65, 133: 1403, 136: 65, 65, 203: 65, 65, 65, 302: 65, 304: 65, 306: 1404, 375: 2323, 379: 1405}, - // 1370 - {71, 71, 71, 71, 71, 71, 7: 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 203: 71, 71, 71, 306: 1397, 312: 2322}, - {113, 113, 113, 113, 113, 113, 7: 113, 113, 129: 113, 113, 133: 113, 136: 113, 113, 203: 113, 113, 113, 302: 113, 304: 113}, - {112, 112, 112, 112, 112, 112, 7: 112, 112, 129: 112, 112, 133: 112, 136: 112, 112, 203: 112, 112, 112, 302: 112, 304: 112}, - {111, 111, 111, 111, 111, 111, 7: 111, 111, 129: 111, 111, 133: 111, 136: 111, 111, 203: 111, 111, 111, 302: 111, 304: 111}, - {110, 110, 110, 110, 110, 110, 7: 110, 110, 129: 110, 110, 133: 110, 136: 110, 110, 203: 110, 110, 110, 302: 110, 304: 110}, - // 1375 - {109, 109, 109, 109, 109, 109, 7: 109, 109, 129: 109, 109, 133: 109, 136: 109, 109, 203: 109, 109, 109, 302: 109, 304: 109}, - {108, 108, 108, 108, 108, 108, 7: 108, 108, 129: 108, 108, 133: 108, 136: 108, 108, 203: 108, 108, 108, 302: 108, 304: 108}, - {107, 107, 107, 107, 107, 107, 7: 107, 107, 129: 107, 107, 133: 107, 136: 107, 107, 203: 107, 107, 107, 302: 107, 304: 107}, - {106, 106, 106, 106, 106, 106, 7: 106, 106, 129: 106, 106, 133: 106, 136: 106, 106, 203: 106, 106, 106, 302: 106, 304: 106}, - {103, 103, 103, 103, 103, 103, 7: 103, 103, 129: 103, 103, 133: 103, 136: 103, 103, 203: 103, 103, 103, 302: 103, 304: 103}, - // 1380 - {102, 102, 102, 102, 102, 102, 7: 102, 102, 129: 102, 102, 133: 102, 136: 102, 102, 203: 102, 102, 102, 302: 102, 304: 102}, - {101, 101, 101, 101, 101, 101, 7: 101, 101, 129: 101, 101, 133: 101, 136: 101, 101, 203: 101, 101, 101, 302: 101, 304: 101}, - {100, 100, 100, 100, 100, 100, 7: 100, 100, 129: 100, 100, 133: 100, 136: 100, 100, 203: 100, 100, 100, 302: 100, 304: 100}, - {99, 99, 99, 99, 99, 99, 7: 99, 99, 129: 99, 99, 133: 99, 136: 99, 99, 203: 99, 99, 99, 302: 99, 304: 99, 512: 2321}, - {97, 97, 97, 97, 97, 97, 7: 97, 97, 129: 97, 97, 133: 97, 136: 97, 97, 203: 97, 97, 97}, - // 1385 - {247: 2308, 256: 2309}, - {71, 71, 71, 71, 71, 71, 7: 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 203: 71, 71, 71, 306: 1397, 312: 2307}, - {133: 1396, 306: 2306}, - {91, 91, 91, 91, 91, 91, 7: 91, 91, 129: 91, 91, 136: 91, 91, 203: 91, 91, 91}, - {61, 61, 61, 61, 61, 61, 61, 61, 61, 129: 61, 61, 136: 61, 61, 149: 61, 197: 1413, 203: 61, 61, 61, 209: 61, 348: 2303}, - // 1390 - {133: 2298}, - {133: 2288}, - {247: 86, 256: 86}, - {85, 85, 85, 85, 85, 85, 7: 85, 85, 129: 85, 85, 136: 85, 85, 203: 85, 85, 85}, - {71, 71, 71, 71, 71, 71, 7: 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 203: 71, 71, 71, 306: 1397, 312: 2287}, - // 1395 - {83, 83, 83, 83, 83, 83, 7: 83, 83, 129: 83, 83, 136: 83, 83, 203: 83, 83, 83}, - {82, 82, 82, 82, 82, 82, 7: 82, 82, 129: 82, 82, 136: 82, 82, 203: 82, 82, 82}, - {81, 81, 81, 81, 81, 81, 81, 81, 81, 129: 81, 81, 136: 81, 81, 149: 81, 197: 81, 203: 81, 81, 81, 209: 81}, - {71, 71, 71, 71, 71, 71, 71, 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 149: 71, 197: 71, 203: 71, 71, 71, 209: 71, 306: 1397, 312: 2286}, - {79, 79, 79, 79, 79, 79, 79, 79, 79, 129: 79, 79, 136: 79, 79, 149: 79, 197: 79, 203: 79, 79, 79, 209: 79}, - // 1400 - {78, 78, 78, 78, 78, 78, 78, 78, 78, 129: 78, 78, 136: 78, 78, 149: 78, 197: 78, 203: 78, 78, 78, 209: 78}, - {77, 77, 77, 77, 77, 77, 7: 77, 77, 129: 77, 77, 136: 77, 77, 203: 77, 77, 77}, - {71, 71, 71, 71, 71, 71, 7: 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 203: 71, 71, 71, 306: 1397, 312: 2285}, - {71, 71, 71, 71, 71, 71, 7: 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 203: 71, 71, 71, 306: 1397, 312: 2284}, - {71, 71, 71, 71, 71, 71, 7: 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 203: 71, 71, 71, 306: 1397, 312: 2283}, - // 1405 - {71, 71, 71, 71, 71, 71, 7: 71, 71, 129: 71, 71, 133: 1396, 136: 71, 71, 203: 71, 71, 71, 306: 1397, 312: 2282}, - {73, 73, 73, 73, 73, 73, 7: 73, 73, 129: 73, 73, 136: 73, 73, 203: 73, 73, 73}, - {74, 74, 74, 74, 74, 74, 7: 74, 74, 129: 74, 74, 136: 74, 74, 203: 74, 74, 74}, - {75, 75, 75, 75, 75, 75, 7: 75, 75, 129: 75, 75, 136: 75, 75, 203: 75, 75, 75}, - {76, 76, 76, 76, 76, 76, 7: 76, 76, 129: 76, 76, 136: 76, 76, 203: 76, 76, 76}, - // 1410 - {80, 80, 80, 80, 80, 80, 80, 80, 80, 129: 80, 80, 136: 80, 80, 149: 80, 197: 80, 203: 80, 80, 80, 209: 80}, - {84, 84, 84, 84, 84, 84, 7: 84, 84, 129: 84, 84, 136: 84, 84, 203: 84, 84, 84}, - {131: 2290, 448: 2289}, - {7: 2291, 2292}, - {7: 53, 53}, - // 1415 - {59, 59, 59, 59, 59, 59, 1417, 59, 59, 129: 59, 59, 136: 59, 59, 149: 59, 203: 59, 59, 59, 209: 1416, 323: 1415, 336: 2294}, - {131: 2293}, - {7: 52, 52}, - {55, 55, 55, 55, 55, 55, 7: 55, 55, 129: 55, 55, 136: 55, 55, 149: 2296, 203: 55, 55, 55, 341: 2295}, - {88, 88, 88, 88, 88, 88, 7: 88, 88, 129: 88, 88, 136: 88, 88, 203: 88, 88, 88}, - // 1420 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 2297}, - {54, 54, 54, 54, 54, 54, 7: 54, 54, 129: 54, 54, 136: 54, 54, 203: 54, 54, 54}, - {131: 2290, 448: 2299}, - {7: 2300, 2292}, - {59, 59, 59, 59, 59, 59, 1417, 59, 59, 129: 59, 59, 136: 59, 59, 149: 59, 203: 59, 59, 59, 209: 1416, 323: 1415, 336: 2301}, - // 1425 - {55, 55, 55, 55, 55, 55, 7: 55, 55, 129: 55, 55, 136: 55, 55, 149: 2296, 203: 55, 55, 55, 341: 2302}, - {89, 89, 89, 89, 89, 89, 7: 89, 89, 129: 89, 89, 136: 89, 89, 203: 89, 89, 89}, - {59, 59, 59, 59, 59, 59, 1417, 59, 59, 129: 59, 59, 136: 59, 59, 149: 59, 203: 59, 59, 59, 209: 1416, 323: 1415, 336: 2304}, - {55, 55, 55, 55, 55, 55, 7: 55, 55, 129: 55, 55, 136: 55, 55, 149: 2296, 203: 55, 55, 55, 341: 2305}, - {90, 90, 90, 90, 90, 90, 7: 90, 90, 129: 90, 90, 136: 90, 90, 203: 90, 90, 90}, - // 1430 - {92, 92, 92, 92, 92, 92, 7: 92, 92, 129: 92, 92, 136: 92, 92, 203: 92, 92, 92}, - {93, 93, 93, 93, 93, 93, 7: 93, 93, 129: 93, 93, 136: 93, 93, 203: 93, 93, 93}, - {61, 61, 61, 61, 61, 61, 61, 61, 61, 129: 61, 61, 133: 1396, 136: 61, 61, 149: 61, 197: 1413, 203: 61, 61, 61, 209: 61, 306: 2314, 348: 2315}, - {133: 1396, 306: 2310}, - {61, 61, 61, 61, 61, 61, 61, 61, 61, 129: 61, 61, 136: 61, 61, 149: 61, 197: 1413, 203: 61, 61, 61, 209: 61, 348: 2311}, - // 1435 - {59, 59, 59, 59, 59, 59, 1417, 59, 59, 129: 59, 59, 136: 59, 59, 149: 59, 203: 59, 59, 59, 209: 1416, 323: 1415, 336: 2312}, - {55, 55, 55, 55, 55, 55, 7: 55, 55, 129: 55, 55, 136: 55, 55, 149: 2296, 203: 55, 55, 55, 341: 2313}, - {94, 94, 94, 94, 94, 94, 7: 94, 94, 129: 94, 94, 136: 94, 94, 203: 94, 94, 94}, - {61, 61, 61, 61, 61, 61, 61, 61, 61, 129: 61, 61, 136: 61, 61, 149: 61, 197: 1413, 203: 61, 61, 61, 209: 61, 348: 2318}, - {59, 59, 59, 59, 59, 59, 1417, 59, 59, 129: 59, 59, 136: 59, 59, 149: 59, 203: 59, 59, 59, 209: 1416, 323: 1415, 336: 2316}, - // 1440 - {55, 55, 55, 55, 55, 55, 7: 55, 55, 129: 55, 55, 136: 55, 55, 149: 2296, 203: 55, 55, 55, 341: 2317}, - {95, 95, 95, 95, 95, 95, 7: 95, 95, 129: 95, 95, 136: 95, 95, 203: 95, 95, 95}, - {59, 59, 59, 59, 59, 59, 1417, 59, 59, 129: 59, 59, 136: 59, 59, 149: 59, 203: 59, 59, 59, 209: 1416, 323: 1415, 336: 2319}, - {55, 55, 55, 55, 55, 55, 7: 55, 55, 129: 55, 55, 136: 55, 55, 149: 2296, 203: 55, 55, 55, 341: 2320}, - {96, 96, 96, 96, 96, 96, 7: 96, 96, 129: 96, 96, 136: 96, 96, 203: 96, 96, 96}, - // 1445 - {98, 98, 98, 98, 98, 98, 7: 98, 98, 129: 98, 98, 133: 98, 136: 98, 98, 203: 98, 98, 98, 302: 98, 304: 98}, - {114, 114, 114, 114, 114, 114, 7: 114, 114, 129: 114, 114, 136: 114, 114, 203: 114, 114, 114}, - {67, 67, 67, 67, 67, 67, 7: 67, 67, 129: 67, 67, 136: 67, 67, 203: 67, 67, 67, 302: 67, 304: 67, 374: 2324}, - {115, 115, 115, 115, 115, 115, 7: 115, 115, 129: 115, 115, 136: 115, 115, 203: 115, 115, 115, 302: 2325, 304: 2326, 373: 2327}, - {69, 69, 69, 69, 69, 69, 7: 69, 69, 129: 69, 69, 136: 69, 69, 203: 69, 69, 69, 302: 69, 304: 69}, - // 1450 - {68, 68, 68, 68, 68, 68, 7: 68, 68, 129: 68, 68, 136: 68, 68, 203: 68, 68, 68, 302: 68, 304: 68}, - {66, 66, 66, 66, 66, 66, 7: 66, 66, 129: 66, 66, 136: 66, 66, 203: 66, 66, 66, 302: 66, 304: 66}, - {67, 67, 67, 67, 67, 67, 7: 67, 67, 129: 67, 67, 136: 67, 67, 203: 67, 67, 67, 302: 67, 304: 67, 374: 2329}, - {116, 116, 116, 116, 116, 116, 7: 116, 116, 129: 116, 116, 136: 116, 116, 203: 116, 116, 116, 302: 2325, 304: 2326, 373: 2327}, - {67, 67, 67, 67, 67, 67, 7: 67, 67, 129: 67, 67, 136: 67, 67, 203: 67, 67, 67, 302: 67, 304: 67, 374: 2331}, - // 1455 - {117, 117, 117, 117, 117, 117, 7: 117, 117, 129: 117, 117, 136: 117, 117, 203: 117, 117, 117, 302: 2325, 304: 2326, 373: 2327}, - {2: 845, 845, 845, 845, 7: 845, 845}, - {137: 2369}, - {835, 835, 835, 835, 835, 835, 7: 835, 835, 129: 835, 835, 136: 835, 835, 203: 835, 835, 835}, - {834, 834, 834, 834, 834, 834, 7: 834, 834, 129: 834, 834, 136: 834, 834, 203: 834, 834, 834}, - // 1460 - {244: 2368}, - {832, 832, 832, 832, 832, 832, 7: 832, 832, 129: 832, 832, 136: 832, 832, 203: 832, 832, 832, 244: 2367}, - {54: 2354, 131: 1244, 134: 2359, 2360, 137: 1240, 210: 1243, 215: 1239, 1241, 218: 1242, 2351, 223: 1247, 1246, 1245, 257: 2358, 430: 2352, 2353, 435: 2356, 481: 2355, 532: 2357}, - {322: 2349}, - {131: 2348}, - // 1465 - {133: 2345}, - {826, 826, 826, 826, 826, 826, 7: 826, 826, 129: 826, 826, 136: 826, 826, 203: 826, 826, 826}, - {2340, 2335, 823, 823, 823, 823, 7: 823, 823, 129: 2333, 2339, 136: 2338, 2334, 203: 2336, 2337, 2341, 399: 2344}, - {825, 825, 825, 825, 825, 825, 7: 825, 825, 129: 825, 825, 136: 825, 825, 203: 825, 825, 825}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 1194, 958, 963, 1193, 1206, 1019, 1215, 1022, 1220, 1222, 1224, 977, 1016, 1229, 990, 994, 995, 1195, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1225, 981, 982, 984, 985, 993, 1196, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1198, 1199, 1000, 1192, 1063, 1200, 1201, 1202, 1203, 1205, 1204, 1207, 1208, 1209, 1210, 1211, 1212, 1017, 1213, 1214, 946, 1216, 1217, 1218, 1219, 1221, 976, 1223, 1226, 1227, 980, 1228, 1197, 1001, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1188, 131: 1244, 1271, 1250, 1261, 1260, 1251, 1240, 197: 1262, 202: 1279, 206: 1105, 948, 947, 210: 1243, 212: 1270, 1287, 1294, 1239, 1241, 1254, 1242, 1282, 1268, 1269, 1293, 1247, 1246, 1245, 1258, 1259, 1277, 1276, 1278, 1280, 1274, 1281, 1273, 1285, 1286, 1253, 1272, 1288, 1289, 1290, 1249, 246: 1257, 252: 1292, 257: 1248, 261: 1284, 1283, 268: 1256, 1267, 1266, 1264, 1265, 1275, 282: 1255, 1263, 287: 1291, 294: 1252, 296: 1191, 1190, 2346, 1189}, - // 1470 - {7: 2347, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {827, 827, 827, 827, 827, 827, 7: 827, 827, 129: 827, 827, 136: 827, 827, 203: 827, 827, 827}, - {828, 828, 828, 828, 828, 828, 7: 828, 828, 129: 828, 828, 136: 828, 828, 203: 828, 828, 828}, - {54: 2354, 219: 2351, 430: 2352, 2353, 435: 2350}, - {829, 829, 829, 829, 829, 829, 7: 829, 829, 129: 829, 829, 136: 829, 829, 203: 829, 829, 829}, - // 1475 - {810, 810, 810, 810, 810, 810, 7: 810, 810, 129: 810, 810, 133: 810, 136: 810, 810, 203: 810, 810, 810}, - {809, 809, 809, 809, 809, 809, 7: 809, 809, 129: 809, 809, 133: 809, 136: 809, 809, 203: 809, 809, 809}, - {808, 808, 808, 808, 808, 808, 7: 808, 808, 129: 808, 808, 133: 808, 136: 808, 808, 203: 808, 808, 808}, - {807, 807, 807, 807, 807, 807, 7: 807, 807, 129: 807, 807, 133: 807, 136: 807, 807, 203: 807, 807, 807}, - {830, 830, 830, 830, 830, 830, 7: 830, 830, 129: 830, 830, 136: 830, 830, 203: 830, 830, 830}, - // 1480 - {813, 813, 813, 813, 813, 813, 7: 813, 813, 129: 813, 813, 133: 2365, 136: 813, 813, 203: 813, 813, 813}, - {811, 811, 811, 811, 811, 811, 7: 811, 811, 129: 811, 811, 136: 811, 811, 203: 811, 811, 811}, - {806, 806, 806, 806, 806, 806, 7: 806, 806, 129: 806, 806, 136: 806, 806, 203: 806, 806, 806}, - {210: 2362, 218: 2363, 436: 2364}, - {210: 2362, 218: 2363, 436: 2361}, - // 1485 - {804, 804, 804, 804, 804, 804, 7: 804, 804, 129: 804, 804, 136: 804, 804, 203: 804, 804, 804}, - {803, 803, 803, 803, 803, 803, 7: 803, 803, 129: 803, 803, 136: 803, 803, 203: 803, 803, 803}, - {802, 802, 802, 802, 802, 802, 7: 802, 802, 129: 802, 802, 136: 802, 802, 203: 802, 802, 802}, - {805, 805, 805, 805, 805, 805, 7: 805, 805, 129: 805, 805, 136: 805, 805, 203: 805, 805, 805}, - {7: 2366}, - // 1490 - {812, 812, 812, 812, 812, 812, 7: 812, 812, 129: 812, 812, 136: 812, 812, 203: 812, 812, 812}, - {831, 831, 831, 831, 831, 831, 7: 831, 831, 129: 831, 831, 136: 831, 831, 203: 831, 831, 831}, - {833, 833, 833, 833, 833, 833, 7: 833, 833, 129: 833, 833, 136: 833, 833, 203: 833, 833, 833}, - {836, 836, 836, 836, 836, 836, 7: 836, 836, 129: 836, 836, 136: 836, 836, 203: 836, 836, 836}, - {203: 854, 854, 244: 854, 854, 249: 854, 251: 854}, - // 1495 - {2: 853, 853, 8: 853, 203: 853, 853, 244: 853, 853, 249: 853, 251: 853}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1145, 948, 947, 345: 2373}, - {2: 790, 790, 6: 782, 136: 2174, 149: 782, 209: 782, 333: 2375, 406: 2377, 476: 2376, 2374}, - {2: 794, 794}, - {6: 1417, 149: 2380, 209: 1416, 323: 2379}, - // 1500 - {2: 789, 789, 6: 782, 136: 2174, 149: 782, 209: 782, 333: 2375, 406: 2378}, - {2: 788, 788, 6: 788, 136: 788, 149: 788, 209: 788}, - {2: 787, 787, 6: 787, 136: 787, 149: 787, 209: 787}, - {768, 768, 4: 768, 768, 768, 9: 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 131: 768, 151: 2132, 308: 2383}, - {768, 768, 4: 768, 768, 768, 9: 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 131: 768, 151: 2132, 308: 2381}, - // 1505 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 2382}, - {2: 791, 791, 6: 791, 136: 791, 149: 791, 209: 791}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 131: 1420, 206: 1421, 948, 947, 321: 2384}, - {2: 792, 792, 6: 792, 136: 792, 149: 792, 209: 792}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 2386, 948, 947}, - // 1510 - {130: 2387}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 2388}, - {133: 2389}, - {1005, 949, 4: 950, 971, 957, 797, 797, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2102, 319: 2103, 324: 2390}, - {7: 2391, 2107}, - // 1515 - {2: 801, 801}, - {2: 846, 846}, - {327: 2394}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1073, 948, 947, 303: 2395}, - {2178, 2177, 138, 138, 6: 782, 8: 138, 2184, 2182, 2179, 2181, 2183, 2180, 2187, 2175, 2185, 2186, 2191, 136: 2174, 149: 782, 209: 782, 248: 2399, 258: 2398, 333: 2176, 349: 2188, 353: 2190, 382: 2189, 2397, 390: 2400, 461: 2396}, - // 1520 - {2: 873, 873, 8: 2420}, - {2: 872, 872, 8: 872}, - {863, 863, 4: 863, 863, 863, 9: 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 203: 856, 856, 244: 856, 856, 249: 856, 251: 856, 369: 2079, 2414, 2082, 396: 2407, 2413}, - {863, 863, 4: 863, 863, 863, 9: 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 203: 2402, 244: 2405, 2406, 249: 2404, 396: 2407, 2401, 500: 2403}, - {2: 858, 858, 8: 858}, - // 1525 - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2412}, - {244: 2411}, - {1005, 949, 692, 692, 950, 971, 957, 8: 692, 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 2099, 948, 947, 331: 2410}, - {244: 2408}, - {865, 865, 865, 865, 865, 865, 865, 8: 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865}, - // 1530 - {864, 864, 864, 864, 864, 864, 864, 8: 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864}, - {862, 862, 4: 862, 862, 862, 9: 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 2371, 948, 947, 449: 2409}, - {2: 866, 866, 8: 866}, - {2: 867, 867, 8: 867}, - // 1535 - {2: 868, 868, 8: 868}, - {2: 869, 869, 8: 869}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2080, 368: 2415}, - {2: 870, 870, 8: 870}, - {2: 861, 861, 2418, 2417, 8: 861, 471: 2416}, - // 1540 - {2: 871, 871, 8: 871}, - {2: 860, 860, 8: 860}, - {1005, 949, 4: 950, 971, 957, 9: 1010, 978, 1006, 1008, 1009, 1007, 1021, 968, 1011, 1012, 1015, 967, 986, 988, 979, 970, 1029, 997, 958, 963, 962, 1039, 1019, 1048, 1022, 1053, 1055, 1057, 977, 1016, 1062, 990, 994, 995, 999, 1032, 952, 959, 960, 961, 964, 965, 966, 972, 1003, 1058, 981, 982, 984, 985, 993, 1002, 953, 955, 954, 956, 1004, 1024, 969, 973, 987, 1018, 974, 1028, 975, 998, 1013, 1026, 1023, 1027, 983, 989, 991, 992, 1020, 1025, 996, 1030, 1031, 1000, 951, 1063, 1033, 1034, 1035, 1036, 1038, 1037, 1040, 1041, 1042, 1043, 1044, 1045, 1017, 1046, 1047, 946, 1049, 1050, 1051, 1052, 1054, 976, 1056, 1059, 1060, 980, 1061, 1014, 1001, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 206: 1105, 948, 947, 242: 2419}, - {2: 859, 859, 8: 859}, - {2178, 2177, 138, 138, 6: 782, 8: 138, 2184, 2182, 2179, 2181, 2183, 2180, 2187, 2175, 2185, 2186, 2191, 136: 2174, 149: 782, 209: 782, 248: 2399, 258: 2398, 333: 2176, 349: 2188, 353: 2190, 382: 2189, 2397, 390: 2421}, - // 1545 - {2: 857, 857, 8: 857}, - {2: 874, 138: 1303, 140: 1302, 1301, 1300, 1298, 300: 1299, 1297}, - {2: 766, 766, 23: 894, 895, 44: 905, 881, 883, 49: 897, 885, 56: 898, 58: 882, 939, 133: 900, 147: 944, 153: 904, 163: 890, 213: 893, 243: 899, 246: 935, 248: 887, 307: 903, 315: 902, 901, 929, 322: 940, 329: 886, 332: 892, 343: 884, 350: 906, 355: 880, 358: 942, 372: 913, 377: 925, 380: 928, 386: 933, 389: 908, 391: 909, 393: 910, 401: 911, 916, 917, 918, 919, 409: 912, 896, 412: 889, 920, 921, 922, 923, 907, 914, 888, 915, 891, 424: 924, 432: 937, 440: 926, 443: 927, 930, 931, 447: 2424, 453: 932, 943, 936, 941, 458: 934}, - {2: 161, 161}, - } -) - -var yyDebug = 0 - -type yyLexer interface { - Lex(lval *yySymType) int - Error(s string) -} - -type yyLexerEx interface { - yyLexer - Reduced(rule, state int, lval *yySymType) bool -} - -func yySymName(c int) (s string) { - x, ok := yyXLAT[c] - if ok { - return yySymNames[x] - } - - return __yyfmt__.Sprintf("%d", c) -} - -func yylex1(yylex yyLexer, lval *yySymType) (n int) { - n = yylex.Lex(lval) - if n <= 0 { - n = yyEOFCode - } - if yyDebug >= 3 { - __yyfmt__.Printf("\nlex %s(%#x %d), lval: %+v\n", yySymName(n), n, n, lval) - } - return n -} - -func yyParse(yylex yyLexer) int { - const yyError = 556 - - yyEx, _ := yylex.(yyLexerEx) - var yyn int - var yylval yySymType - var yyVAL yySymType - yyS := make([]yySymType, 200) - - Nerrs := 0 /* number of errors */ - Errflag := 0 /* error recovery flag */ - yyerrok := func() { - if yyDebug >= 2 { - __yyfmt__.Printf("yyerrok()\n") - } - Errflag = 0 - } - _ = yyerrok - yystate := 0 - yychar := -1 - var yyxchar int - var yyshift int - yyp := -1 - goto yystack - -ret0: - return 0 - -ret1: - return 1 - -yystack: - /* put a state and value onto the stack */ - yyp++ - if yyp >= len(yyS) { - nyys := make([]yySymType, len(yyS)*2) - copy(nyys, yyS) - yyS = nyys - } - yyS[yyp] = yyVAL - yyS[yyp].yys = yystate - -yynewstate: - if yychar < 0 { - yychar = yylex1(yylex, &yylval) - var ok bool - if yyxchar, ok = yyXLAT[yychar]; !ok { - yyxchar = len(yySymNames) // > tab width - } - } - if yyDebug >= 4 { - var a []int - for _, v := range yyS[:yyp+1] { - a = append(a, v.yys) - } - __yyfmt__.Printf("state stack %v\n", a) - } - row := yyParseTab[yystate] - yyn = 0 - if yyxchar < len(row) { - if yyn = int(row[yyxchar]); yyn != 0 { - yyn += yyTabOfs - } - } - switch { - case yyn > 0: // shift - yychar = -1 - yyVAL = yylval - yystate = yyn - yyshift = yyn - if yyDebug >= 2 { - __yyfmt__.Printf("shift, and goto state %d\n", yystate) - } - if Errflag > 0 { - Errflag-- - } - goto yystack - case yyn < 0: // reduce - case yystate == 1: // accept - if yyDebug >= 2 { - __yyfmt__.Println("accept") - } - goto ret0 - } - - if yyn == 0 { - /* error ... attempt to resume parsing */ - switch Errflag { - case 0: /* brand new error */ - if yyDebug >= 1 { - __yyfmt__.Printf("no action for %s in state %d\n", yySymName(yychar), yystate) - } - msg, ok := yyXErrors[yyXError{yystate, yyxchar}] - if !ok { - msg, ok = yyXErrors[yyXError{yystate, -1}] - } - if !ok && yyshift != 0 { - msg, ok = yyXErrors[yyXError{yyshift, yyxchar}] - } - if !ok { - msg, ok = yyXErrors[yyXError{yyshift, -1}] - } - if !ok || msg == "" { - msg = "syntax error" - } - yylex.Error(msg) - Nerrs++ - fallthrough - - case 1, 2: /* incompletely recovered error ... try again */ - Errflag = 3 - - /* find a state where "error" is a legal shift action */ - for yyp >= 0 { - row := yyParseTab[yyS[yyp].yys] - if yyError < len(row) { - yyn = int(row[yyError]) + yyTabOfs - if yyn > 0 { // hit - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery found error shift in state %d\n", yyS[yyp].yys) - } - yystate = yyn /* simulate a shift of "error" */ - goto yystack - } - } - - /* the current p has no shift on "error", pop stack */ - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) - } - yyp-- - } - /* there is no state on the stack with an error shift ... abort */ - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery failed\n") - } - goto ret1 - - case 3: /* no shift yet; clobber input char */ - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery discards %s\n", yySymName(yychar)) - } - if yychar == yyEOFCode { - goto ret1 - } - - yychar = -1 - goto yynewstate /* try again in the same state */ - } - } - - r := -yyn - x0 := yyReductions[r] - x, n := x0.xsym, x0.components - yypt := yyp - _ = yypt // guard against "declared and not used" - - yyp -= n - if yyp+1 >= len(yyS) { - nyys := make([]yySymType, len(yyS)*2) - copy(nyys, yyS) - yyS = nyys - } - yyVAL = yyS[yyp+1] - - /* consult goto table to find next state */ - exState := yystate - yystate = int(yyParseTab[yyS[yyp].yys][x]) + yyTabOfs - /* reduction by production r */ - if yyDebug >= 2 { - __yyfmt__.Printf("reduce using rule %v (%s), and goto state %d\n", r, yySymNames[x], yystate) - } - - switch r { - case 2: - { - yylex.(*lexer).expr = yyS[yypt-0].item.(ast.ExprNode) - } - case 3: - { - yyVAL.item = &ast.AlterTableStmt{ - Table: yyS[yypt-1].item.(*ast.TableName), - Specs: yyS[yypt-0].item.([]*ast.AlterTableSpec), - } - } - case 4: - { - yyVAL.item = &ast.AlterTableSpec{ - Tp: ast.AlterTableOption, - Options: yyS[yypt-0].item.([]*ast.TableOption), - } - } - case 5: - { - yyVAL.item = &ast.AlterTableSpec{ - Tp: ast.AlterTableAddColumn, - Column: yyS[yypt-1].item.(*ast.ColumnDef), - Position: yyS[yypt-0].item.(*ast.ColumnPosition), - } - } - case 6: - { - constraint := yyS[yypt-0].item.(*ast.Constraint) - yyVAL.item = &ast.AlterTableSpec{ - Tp: ast.AlterTableAddConstraint, - Constraint: constraint, - } - } - case 7: - { - yyVAL.item = &ast.AlterTableSpec{ - Tp: ast.AlterTableDropColumn, - DropColumn: yyS[yypt-0].item.(*ast.ColumnName), - } - } - case 8: - { - yyVAL.item = &ast.AlterTableSpec{Tp: ast.AlterTableDropPrimaryKey} - } - case 9: - { - yyVAL.item = &ast.AlterTableSpec{ - Tp: ast.AlterTableDropIndex, - Name: yyS[yypt-0].item.(string), - } - } - case 10: - { - yyVAL.item = &ast.AlterTableSpec{ - Tp: ast.AlterTableDropForeignKey, - Name: yyS[yypt-0].item.(string), - } - } - case 15: - { - yyVAL.item = &ast.ColumnPosition{Tp: ast.ColumnPositionNone} - } - case 16: - { - yyVAL.item = &ast.ColumnPosition{Tp: ast.ColumnPositionFirst} - } - case 17: - { - yyVAL.item = &ast.ColumnPosition{ - Tp: ast.ColumnPositionAfter, - RelativeColumn: yyS[yypt-0].item.(*ast.ColumnName), - } - } - case 18: - { - yyVAL.item = []*ast.AlterTableSpec{yyS[yypt-0].item.(*ast.AlterTableSpec)} - } - case 19: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.AlterTableSpec), yyS[yypt-0].item.(*ast.AlterTableSpec)) - } - case 20: - { - yyVAL.item = nil - } - case 21: - { - yyVAL.item = nil - } - case 22: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 24: - { - yyVAL.item = &ast.Assignment{Column: yyS[yypt-2].item.(*ast.ColumnName), Expr: yyS[yypt-0].item.(ast.ExprNode)} - } - case 25: - { - yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)} - } - case 26: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.Assignment), yyS[yypt-0].item.(*ast.Assignment)) - } - case 27: - { - yyVAL.item = []*ast.Assignment{} - } - case 29: - { - yyVAL.item = &ast.BeginStmt{} - } - case 30: - { - yyVAL.item = &ast.BeginStmt{} - } - case 31: - { - yyVAL.item = &ast.ColumnDef{Name: yyS[yypt-2].item.(*ast.ColumnName), Tp: yyS[yypt-1].item.(*types.FieldType), Options: yyS[yypt-0].item.([]*ast.ColumnOption)} - } - case 32: - { - yyVAL.item = &ast.ColumnName{Name: model.NewCIStr(yyS[yypt-0].item.(string))} - } - case 33: - { - yyVAL.item = &ast.ColumnName{Table: model.NewCIStr(yyS[yypt-2].item.(string)), Name: model.NewCIStr(yyS[yypt-0].item.(string))} - } - case 34: - { - yyVAL.item = &ast.ColumnName{Schema: model.NewCIStr(yyS[yypt-4].item.(string)), Table: model.NewCIStr(yyS[yypt-2].item.(string)), Name: model.NewCIStr(yyS[yypt-0].item.(string))} - } - case 35: - { - yyVAL.item = []*ast.ColumnName{yyS[yypt-0].item.(*ast.ColumnName)} - } - case 36: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.ColumnName), yyS[yypt-0].item.(*ast.ColumnName)) - } - case 37: - { - yyVAL.item = []*ast.ColumnName{} - } - case 38: - { - yyVAL.item = yyS[yypt-0].item.([]*ast.ColumnName) - } - case 39: - { - yyVAL.item = &ast.CommitStmt{} - } - case 40: - { - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionNotNull} - } - case 41: - { - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionNull} - } - case 42: - { - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionAutoIncrement} - } - case 43: - { - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey} - } - case 44: - { - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniq} - } - case 45: - { - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} - } - case 46: - { - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionDefaultValue, Expr: yyS[yypt-0].item.(ast.ExprNode)} - } - case 47: - { - nowFunc := &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionOnUpdate, Expr: nowFunc} - } - case 48: - { - yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionComment} - } - case 49: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/create-table.html - // The CHECK clause is parsed but ignored by all storage engines. - yyVAL.item = &ast.ColumnOption{} - } - case 50: - { - yyVAL.item = []*ast.ColumnOption{yyS[yypt-0].item.(*ast.ColumnOption)} - } - case 51: - { - yyVAL.item = append(yyS[yypt-1].item.([]*ast.ColumnOption), yyS[yypt-0].item.(*ast.ColumnOption)) - } - case 52: - { - yyVAL.item = []*ast.ColumnOption{} - } - case 53: - { - yyVAL.item = yyS[yypt-0].item.([]*ast.ColumnOption) - } - case 54: - { - c := &ast.Constraint{ - Tp: ast.ConstraintPrimaryKey, - Keys: yyS[yypt-2].item.([]*ast.IndexColName), - } - if yyS[yypt-0].item != nil { - c.Option = yyS[yypt-0].item.(*ast.IndexOption) - } - if yyS[yypt-4].item != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = yyS[yypt-4].item.(model.IndexType) - } - yyVAL.item = c - } - case 55: - { - c := &ast.Constraint{ - Tp: ast.ConstraintFulltext, - Keys: yyS[yypt-2].item.([]*ast.IndexColName), - Name: yyS[yypt-4].item.(string), - } - if yyS[yypt-0].item != nil { - c.Option = yyS[yypt-0].item.(*ast.IndexOption) - } - yyVAL.item = c - } - case 56: - { - c := &ast.Constraint{ - Tp: ast.ConstraintIndex, - Keys: yyS[yypt-2].item.([]*ast.IndexColName), - Name: yyS[yypt-5].item.(string), - } - if yyS[yypt-0].item != nil { - c.Option = yyS[yypt-0].item.(*ast.IndexOption) - } - if yyS[yypt-4].item != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = yyS[yypt-4].item.(model.IndexType) - } - yyVAL.item = c - } - case 57: - { - c := &ast.Constraint{ - Tp: ast.ConstraintKey, - Keys: yyS[yypt-2].item.([]*ast.IndexColName), - Name: yyS[yypt-5].item.(string), - } - if yyS[yypt-0].item != nil { - c.Option = yyS[yypt-0].item.(*ast.IndexOption) - } - if yyS[yypt-4].item != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = yyS[yypt-4].item.(model.IndexType) - } - yyVAL.item = c - } - case 58: - { - c := &ast.Constraint{ - Tp: ast.ConstraintUniq, - Keys: yyS[yypt-2].item.([]*ast.IndexColName), - Name: yyS[yypt-5].item.(string), - } - if yyS[yypt-0].item != nil { - c.Option = yyS[yypt-0].item.(*ast.IndexOption) - } - if yyS[yypt-4].item != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = yyS[yypt-4].item.(model.IndexType) - } - yyVAL.item = c - } - case 59: - { - c := &ast.Constraint{ - Tp: ast.ConstraintUniqIndex, - Keys: yyS[yypt-2].item.([]*ast.IndexColName), - Name: yyS[yypt-5].item.(string), - } - if yyS[yypt-0].item != nil { - c.Option = yyS[yypt-0].item.(*ast.IndexOption) - } - if yyS[yypt-4].item != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = yyS[yypt-4].item.(model.IndexType) - } - yyVAL.item = c - } - case 60: - { - c := &ast.Constraint{ - Tp: ast.ConstraintUniqKey, - Keys: yyS[yypt-2].item.([]*ast.IndexColName), - Name: yyS[yypt-5].item.(string), - } - if yyS[yypt-0].item != nil { - c.Option = yyS[yypt-0].item.(*ast.IndexOption) - } - if yyS[yypt-4].item != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = yyS[yypt-4].item.(model.IndexType) - } - yyVAL.item = c - } - case 61: - { - yyVAL.item = &ast.Constraint{ - Tp: ast.ConstraintForeignKey, - Keys: yyS[yypt-2].item.([]*ast.IndexColName), - Name: yyS[yypt-4].item.(string), - Refer: yyS[yypt-0].item.(*ast.ReferenceDef), - } - } - case 62: - { - yyVAL.item = &ast.ReferenceDef{Table: yyS[yypt-3].item.(*ast.TableName), IndexColNames: yyS[yypt-1].item.([]*ast.IndexColName)} - } - case 63: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} - } - case 64: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} - } - case 70: - { - yyVAL.item = ast.NewValueExpr(yyS[yypt-0].item) - } - case 71: - { - yyVAL.item = &ast.UnaryOperationExpr{Op: opcode.Plus, V: ast.NewValueExpr(yyS[yypt-0].item)} - } - case 72: - { - yyVAL.item = &ast.UnaryOperationExpr{Op: opcode.Minus, V: ast.NewValueExpr(yyS[yypt-0].item)} - } - case 75: - { - yyVAL.item = &ast.CreateIndexStmt{ - Unique: yyS[yypt-7].item.(bool), - IndexName: yyS[yypt-5].item.(string), - Table: yyS[yypt-3].item.(*ast.TableName), - IndexColNames: yyS[yypt-1].item.([]*ast.IndexColName), - } - if yylex.(*lexer).root { - break - } - } - case 76: - { - yyVAL.item = false - } - case 77: - { - yyVAL.item = true - } - case 78: - { - //Order is parsed but just ignored as MySQL did - yyVAL.item = &ast.IndexColName{Column: yyS[yypt-2].item.(*ast.ColumnName), Length: yyS[yypt-1].item.(int)} - } - case 79: - { - yyVAL.item = []*ast.IndexColName{} - } - case 80: - { - yyVAL.item = []*ast.IndexColName{yyS[yypt-0].item.(*ast.IndexColName)} - } - case 81: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.IndexColName), yyS[yypt-0].item.(*ast.IndexColName)) - } - case 82: - { - yyVAL.item = &ast.CreateDatabaseStmt{ - IfNotExists: yyS[yypt-2].item.(bool), - Name: yyS[yypt-1].item.(string), - Options: yyS[yypt-0].item.([]*ast.DatabaseOption), - } - - if yylex.(*lexer).root { - break - } - } - case 84: - { - yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionCharset, Value: yyS[yypt-0].item.(string)} - } - case 85: - { - yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionCollate, Value: yyS[yypt-0].item.(string)} - } - case 86: - { - yyVAL.item = []*ast.DatabaseOption{} - } - case 88: - { - yyVAL.item = []*ast.DatabaseOption{yyS[yypt-0].item.(*ast.DatabaseOption)} - } - case 89: - { - yyVAL.item = append(yyS[yypt-1].item.([]*ast.DatabaseOption), yyS[yypt-0].item.(*ast.DatabaseOption)) - } - case 90: - { - tes := yyS[yypt-2].item.([]interface{}) - var columnDefs []*ast.ColumnDef - var constraints []*ast.Constraint - for _, te := range tes { - switch te := te.(type) { - case *ast.ColumnDef: - columnDefs = append(columnDefs, te) - case *ast.Constraint: - constraints = append(constraints, te) - } - } - if len(columnDefs) == 0 { - yylex.(*lexer).err("Column Definition List can't be empty.") - return 1 - } - yyVAL.item = &ast.CreateTableStmt{ - Table: yyS[yypt-4].item.(*ast.TableName), - IfNotExists: yyS[yypt-5].item.(bool), - Cols: columnDefs, - Constraints: constraints, - Options: yyS[yypt-0].item.([]*ast.TableOption), - } - } - case 91: - { - yyVAL.item = yyS[yypt-0].item - } - case 92: - { - yyVAL.item = nil - } - case 96: - { - yyVAL.item = &ast.DoStmt{ - Exprs: yyS[yypt-0].item.([]ast.ExprNode), - } - } - case 97: - { - // Single Table - join := &ast.Join{Left: &ast.TableSource{Source: yyS[yypt-3].item.(ast.ResultSetNode)}, Right: nil} - x := &ast.DeleteStmt{ - TableRefs: &ast.TableRefsClause{TableRefs: join}, - LowPriority: yyS[yypt-7].item.(bool), - Quick: yyS[yypt-6].item.(bool), - Ignore: yyS[yypt-5].item.(bool), - } - if yyS[yypt-2].item != nil { - x.Where = yyS[yypt-2].item.(ast.ExprNode) - } - if yyS[yypt-1].item != nil { - x.Order = yyS[yypt-1].item.(*ast.OrderByClause) - } - if yyS[yypt-0].item != nil { - x.Limit = yyS[yypt-0].item.(*ast.Limit) - } - - yyVAL.item = x - if yylex.(*lexer).root { - break - } - } - case 98: - { - // Multiple Table - x := &ast.DeleteStmt{ - LowPriority: yyS[yypt-6].item.(bool), - Quick: yyS[yypt-5].item.(bool), - Ignore: yyS[yypt-4].item.(bool), - IsMultiTable: true, - BeforeFrom: true, - Tables: &ast.DeleteTableList{Tables: yyS[yypt-3].item.([]*ast.TableName)}, - TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-1].item.(*ast.Join)}, - } - if yyS[yypt-0].item != nil { - x.Where = yyS[yypt-0].item.(ast.ExprNode) - } - yyVAL.item = x - if yylex.(*lexer).root { - break - } - } - case 99: - { - // Multiple Table - x := &ast.DeleteStmt{ - LowPriority: yyS[yypt-7].item.(bool), - Quick: yyS[yypt-6].item.(bool), - Ignore: yyS[yypt-5].item.(bool), - IsMultiTable: true, - Tables: &ast.DeleteTableList{Tables: yyS[yypt-3].item.([]*ast.TableName)}, - TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-1].item.(*ast.Join)}, - } - if yyS[yypt-0].item != nil { - x.Where = yyS[yypt-0].item.(ast.ExprNode) - } - yyVAL.item = x - if yylex.(*lexer).root { - break - } - } - case 102: - { - yyVAL.item = &ast.DropDatabaseStmt{IfExists: yyS[yypt-1].item.(bool), Name: yyS[yypt-0].item.(string)} - if yylex.(*lexer).root { - break - } - } - case 103: - { - yyVAL.item = &ast.DropIndexStmt{IfExists: yyS[yypt-3].item.(bool), IndexName: yyS[yypt-2].item.(string), Table: yyS[yypt-0].item.(*ast.TableName)} - } - case 104: - { - yyVAL.item = &ast.DropTableStmt{Tables: yyS[yypt-0].item.([]*ast.TableName)} - if yylex.(*lexer).root { - break - } - } - case 105: - { - yyVAL.item = &ast.DropTableStmt{IfExists: true, Tables: yyS[yypt-0].item.([]*ast.TableName)} - if yylex.(*lexer).root { - break - } - } - case 110: - { - yyVAL.item = nil - } - case 114: - { - yyVAL.item = &ast.ExplainStmt{ - Stmt: &ast.ShowStmt{ - Tp: ast.ShowColumns, - Table: yyS[yypt-0].item.(*ast.TableName), - }, - } - } - case 115: - { - yyVAL.item = &ast.ExplainStmt{ - Stmt: &ast.ShowStmt{ - Tp: ast.ShowColumns, - Table: yyS[yypt-1].item.(*ast.TableName), - Column: yyS[yypt-0].item.(*ast.ColumnName), - }, - } - } - case 116: - { - yyVAL.item = &ast.ExplainStmt{Stmt: yyS[yypt-0].item.(ast.StmtNode)} - } - case 117: - { - switch v := yyS[yypt-0].item.(type) { - case int64: - yyVAL.item = uint64(v) - case uint64: - yyVAL.item = uint64(v) - } - } - case 119: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.OrOr, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 120: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.LogicXor, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 121: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.AndAnd, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 122: - { - yyVAL.item = &ast.UnaryOperationExpr{Op: opcode.Not, V: yyS[yypt-0].item.(ast.ExprNode)} - } - case 123: - { - yyVAL.item = &ast.IsTruthExpr{Expr: yyS[yypt-3].item.(ast.ExprNode), Not: yyS[yypt-1].item.(bool), True: int64(1)} - } - case 124: - { - yyVAL.item = &ast.IsTruthExpr{Expr: yyS[yypt-3].item.(ast.ExprNode), Not: yyS[yypt-1].item.(bool), True: int64(0)} - } - case 125: - { - /* https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is */ - yyVAL.item = &ast.IsNullExpr{Expr: yyS[yypt-3].item.(ast.ExprNode), Not: yyS[yypt-1].item.(bool)} - } - case 132: - { - yyVAL.item = []ast.ExprNode{yyS[yypt-0].item.(ast.ExprNode)} - } - case 133: - { - yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].item.(ast.ExprNode)) - } - case 134: - { - yyVAL.item = []ast.ExprNode{} - } - case 136: - { - yyVAL.item = &ast.IsNullExpr{Expr: yyS[yypt-3].item.(ast.ExprNode), Not: yyS[yypt-1].item.(bool)} - } - case 137: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: yyS[yypt-1].item.(opcode.Op), L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 138: - { - yyVAL.item = &ast.CompareSubqueryExpr{Op: yyS[yypt-2].item.(opcode.Op), L: yyS[yypt-3].item.(ast.ExprNode), R: yyS[yypt-0].item.(*ast.SubqueryExpr), All: yyS[yypt-1].item.(bool)} - } - case 140: - { - yyVAL.item = opcode.GE - } - case 141: - { - yyVAL.item = opcode.GT - } - case 142: - { - yyVAL.item = opcode.LE - } - case 143: - { - yyVAL.item = opcode.LT - } - case 144: - { - yyVAL.item = opcode.NE - } - case 145: - { - yyVAL.item = opcode.NE - } - case 146: - { - yyVAL.item = opcode.EQ - } - case 147: - { - yyVAL.item = opcode.NullEQ - } - case 148: - { - yyVAL.item = false - } - case 149: - { - yyVAL.item = false - } - case 150: - { - yyVAL.item = true - } - case 151: - { - yyVAL.item = &ast.PatternInExpr{Expr: yyS[yypt-5].item.(ast.ExprNode), Not: yyS[yypt-4].item.(bool), List: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 152: - { - yyVAL.item = &ast.PatternInExpr{Expr: yyS[yypt-3].item.(ast.ExprNode), Not: yyS[yypt-2].item.(bool), Sel: yyS[yypt-0].item.(*ast.SubqueryExpr)} - } - case 153: - { - yyVAL.item = &ast.BetweenExpr{ - Expr: yyS[yypt-5].item.(ast.ExprNode), - Left: yyS[yypt-2].item.(ast.ExprNode), - Right: yyS[yypt-0].item.(ast.ExprNode), - Not: yyS[yypt-4].item.(bool), - } - } - case 154: - { - escape := yyS[yypt-0].item.(string) - if len(escape) > 1 { - yylex.(*lexer).errf("Incorrect arguments %s to ESCAPE", escape) - return 1 - } else if len(escape) == 0 { - escape = "\\" - } - yyVAL.item = &ast.PatternLikeExpr{ - Expr: yyS[yypt-4].item.(ast.ExprNode), - Pattern: yyS[yypt-1].item.(ast.ExprNode), - Not: yyS[yypt-3].item.(bool), - Escape: escape[0], - } - } - case 155: - { - yyVAL.item = &ast.PatternRegexpExpr{Expr: yyS[yypt-3].item.(ast.ExprNode), Pattern: yyS[yypt-0].item.(ast.ExprNode), Not: yyS[yypt-2].item.(bool)} - } - case 159: - { - yyVAL.item = "\\" - } - case 160: - { - yyVAL.item = yyS[yypt-0].item - } - case 161: - { - yyVAL.item = false - } - case 162: - { - yyVAL.item = true - } - case 163: - { - yyVAL.item = &ast.SelectField{WildCard: &ast.WildCardField{}} - } - case 164: - { - wildCard := &ast.WildCardField{Table: model.NewCIStr(yyS[yypt-2].item.(string))} - yyVAL.item = &ast.SelectField{WildCard: wildCard} - } - case 165: - { - wildCard := &ast.WildCardField{Schema: model.NewCIStr(yyS[yypt-4].item.(string)), Table: model.NewCIStr(yyS[yypt-2].item.(string))} - yyVAL.item = &ast.SelectField{WildCard: wildCard} - } - case 166: - { - expr := yyS[yypt-1].item.(ast.ExprNode) - asName := yyS[yypt-0].item.(string) - yyVAL.item = &ast.SelectField{Expr: expr, AsName: model.NewCIStr(asName)} - } - case 167: - { - yyVAL.item = "" - } - case 168: - { - yyVAL.item = yyS[yypt-0].item - } - case 169: - { - yyVAL.item = yyS[yypt-0].item - } - case 170: - { - yyVAL.item = yyS[yypt-0].item - } - case 171: - { - yyVAL.item = yyS[yypt-0].item - } - case 172: - { - yyVAL.item = yyS[yypt-0].item - } - case 173: - { - field := yyS[yypt-0].item.(*ast.SelectField) - field.Offset = yylex.(*lexer).startOffset(yyS[yypt].offset) - yyVAL.item = []*ast.SelectField{field} - } - case 174: - { - - fl := yyS[yypt-2].item.([]*ast.SelectField) - last := fl[len(fl)-1] - l := yylex.(*lexer) - if last.Expr != nil && last.AsName.O == "" { - lastEnd := l.endOffset(yyS[yypt-1].offset) - last.SetText(l.src[last.Offset:lastEnd]) - } - newField := yyS[yypt-0].item.(*ast.SelectField) - newField.Offset = l.startOffset(yyS[yypt].offset) - yyVAL.item = append(fl, newField) - } - case 175: - { - yyVAL.item = &ast.GroupByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} - } - case 176: - { - yyVAL.item = nil - } - case 177: - { - yyVAL.item = &ast.HavingClause{Expr: yyS[yypt-0].item.(ast.ExprNode)} - } - case 178: - { - yyVAL.item = false - } - case 179: - { - yyVAL.item = true - } - case 180: - { - yyVAL.item = false - } - case 181: - { - yyVAL.item = true - } - case 182: - { - yyVAL.item = false - } - case 183: - { - yyVAL.item = true - } - case 184: - { - yyVAL.item = "" - } - case 185: - { - //"index name" - yyVAL.item = yyS[yypt-0].item.(string) - } - case 186: - { - yyVAL.item = nil - } - case 187: - { - yyVAL.item = &ast.IndexOption{ - KeyBlockSize: yyS[yypt-2].item.(uint64), - } - } - case 188: - { - yyVAL.item = &ast.IndexOption{ - Tp: yyS[yypt-0].item.(model.IndexType), - } - } - case 189: - { - yyVAL.item = &ast.IndexOption{ - Comment: yyS[yypt-0].item.(string), - } - } - case 190: - { - yyVAL.item = model.IndexTypeBtree - } - case 191: - { - yyVAL.item = model.IndexTypeHash - } - case 192: - { - yyVAL.item = nil - } - case 193: - { - yyVAL.item = yyS[yypt-0].item - } - case 321: - { - x := yyS[yypt-1].item.(*ast.InsertStmt) - x.Priority = yyS[yypt-5].item.(int) - // Wraps many layers here so that it can be processed the same way as select statement. - ts := &ast.TableSource{Source: yyS[yypt-2].item.(*ast.TableName)} - x.Table = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}} - if yyS[yypt-0].item != nil { - x.OnDuplicate = yyS[yypt-0].item.([]*ast.Assignment) - } - yyVAL.item = x - if yylex.(*lexer).root { - break - } - } - case 324: - { - yyVAL.item = &ast.InsertStmt{ - Columns: yyS[yypt-3].item.([]*ast.ColumnName), - Lists: yyS[yypt-0].item.([][]ast.ExprNode), - } - } - case 325: - { - yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].item.(*ast.SelectStmt)} - } - case 326: - { - yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].item.(*ast.UnionStmt)} - } - case 327: - { - yyVAL.item = &ast.InsertStmt{Lists: yyS[yypt-0].item.([][]ast.ExprNode)} - } - case 328: - { - yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].item.(*ast.SelectStmt)} - } - case 329: - { - yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].item.(*ast.UnionStmt)} - } - case 330: - { - yyVAL.item = &ast.InsertStmt{Setlist: yyS[yypt-0].item.([]*ast.Assignment)} - } - case 333: - { - yyVAL.item = [][]ast.ExprNode{[]ast.ExprNode{}} - } - case 334: - { - yyVAL.item = append([][]ast.ExprNode{[]ast.ExprNode{}}, yyS[yypt-0].item.([][]ast.ExprNode)...) - } - case 335: - { - yyVAL.item = [][]ast.ExprNode{yyS[yypt-1].item.([]ast.ExprNode)} - } - case 336: - { - yyVAL.item = append([][]ast.ExprNode{yyS[yypt-3].item.([]ast.ExprNode)}, yyS[yypt-0].item.([][]ast.ExprNode)...) - } - case 337: - { - yyVAL.item = &ast.Assignment{ - Column: yyS[yypt-2].item.(*ast.ColumnName), - Expr: yyS[yypt-0].item.(ast.ExprNode), - } - } - case 338: - { - yyVAL.item = []*ast.Assignment{} - } - case 339: - { - yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)} - } - case 340: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.Assignment), yyS[yypt-0].item.(*ast.Assignment)) - } - case 341: - { - yyVAL.item = nil - } - case 342: - { - yyVAL.item = yyS[yypt-0].item - } - case 343: - { - x := yyS[yypt-0].item.(*ast.InsertStmt) - x.IsReplace = true - x.Priority = yyS[yypt-3].item.(int) - ts := &ast.TableSource{Source: yyS[yypt-1].item.(*ast.TableName)} - x.Table = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}} - yyVAL.item = x - } - case 344: - { - yyVAL.item = ast.NoPriority - } - case 345: - { - yyVAL.item = ast.LowPriority - } - case 346: - { - yyVAL.item = ast.DelayedPriority - } - case 347: - { - yyVAL.item = int64(0) - } - case 349: - { - yyVAL.item = int64(1) - } - case 352: - { - tp := types.NewFieldType(mysql.TypeString) - l := yylex.(*lexer) - tp.Charset, tp.Collate = l.GetCharsetInfo() - expr := ast.NewValueExpr(yyS[yypt-0].item) - expr.SetType(tp) - yyVAL.item = expr - } - case 353: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/charset-literal.html - tp := types.NewFieldType(mysql.TypeString) - tp.Charset = yyS[yypt-1].item.(string) - co, err := charset.GetDefaultCollation(tp.Charset) - if err != nil { - l := yylex.(*lexer) - l.errf("Get collation error for charset: %s", tp.Charset) - return 1 - } - tp.Collate = co - expr := ast.NewValueExpr(yyS[yypt-0].item) - expr.SetType(tp) - yyVAL.item = expr - } - case 356: - { - yyVAL.item = ast.NewValueExpr(yyS[yypt-0].item) - } - case 357: - { - yyVAL.item = &ast.ColumnNameExpr{Name: yyS[yypt-0].item.(*ast.ColumnName)} - } - case 358: - { - l := yylex.(*lexer) - startOffset := l.startOffset(yyS[yypt-1].offset) - endOffset := l.endOffset(yyS[yypt].offset) - expr := yyS[yypt-1].item.(ast.ExprNode) - expr.SetText(l.src[startOffset:endOffset]) - yyVAL.item = &ast.ParenthesesExpr{Expr: expr} - } - case 359: - { - yyVAL.item = &ast.DefaultExpr{} - } - case 360: - { - yyVAL.item = &ast.DefaultExpr{Name: yyS[yypt-1].item.(*ast.ColumnName)} - } - case 361: - { - yyVAL.item = yyS[yypt-0].item - } - case 362: - { - yyVAL.item = &ast.ParamMarkerExpr{ - Offset: yyS[yypt].offset, - } - } - case 363: - { - values := append([]ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode)}, yyS[yypt-1].item.([]ast.ExprNode)...) - yyVAL.item = &ast.RowExpr{Values: values} - } - case 364: - { - values := append([]ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode)}, yyS[yypt-1].item.([]ast.ExprNode)...) - yyVAL.item = &ast.RowExpr{Values: values} - } - case 365: - { - yyVAL.item = &ast.ExistsSubqueryExpr{Sel: yyS[yypt-0].item.(*ast.SubqueryExpr)} - } - case 366: - { - yyVAL.item = &ast.OrderByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} - } - case 367: - { - yyVAL.item = []*ast.ByItem{yyS[yypt-0].item.(*ast.ByItem)} - } - case 368: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.ByItem), yyS[yypt-0].item.(*ast.ByItem)) - } - case 369: - { - expr := yyS[yypt-1].item - valueExpr, ok := expr.(*ast.ValueExpr) - if ok { - position, isPosition := valueExpr.GetValue().(int64) - if isPosition { - expr = &ast.PositionExpr{N: int(position)} - } - } - yyVAL.item = &ast.ByItem{Expr: expr.(ast.ExprNode), Desc: yyS[yypt-0].item.(bool)} - } - case 370: - { - yyVAL.item = false // ASC by default - } - case 371: - { - yyVAL.item = false - } - case 372: - { - yyVAL.item = true - } - case 373: - { - yyVAL.item = nil - } - case 374: - { - yyVAL.item = yyS[yypt-0].item - } - case 378: - { - yyVAL.item = &ast.UnaryOperationExpr{Op: opcode.Not, V: yyS[yypt-0].item.(ast.ExprNode)} - } - case 379: - { - yyVAL.item = &ast.UnaryOperationExpr{Op: opcode.BitNeg, V: yyS[yypt-0].item.(ast.ExprNode)} - } - case 380: - { - yyVAL.item = &ast.UnaryOperationExpr{Op: opcode.Minus, V: yyS[yypt-0].item.(ast.ExprNode)} - } - case 381: - { - yyVAL.item = &ast.UnaryOperationExpr{Op: opcode.Plus, V: yyS[yypt-0].item.(ast.ExprNode)} - } - case 382: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#operator_binary - x := types.NewFieldType(mysql.TypeString) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - yyVAL.item = &ast.FuncCastExpr{ - Expr: yyS[yypt-0].item.(ast.ExprNode), - Tp: x, - FunctionType: ast.CastBinaryOperator, - } - } - case 383: - { - // TODO: Create a builtin function hold expr and collation. When do evaluation, convert expr result using the collation. - yyVAL.item = yyS[yypt-2].item - } - case 396: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 397: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_current-user - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-0].item.(string))} - } - case 398: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-0].item.(string))} - } - case 399: - { - yyVAL.item = false - } - case 400: - { - yyVAL.item = false - } - case 401: - { - yyVAL.item = true - } - case 402: - { - yyVAL.item = true - } - case 403: - { - /* See: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast */ - yyVAL.item = &ast.FuncCastExpr{ - Expr: yyS[yypt-3].item.(ast.ExprNode), - Tp: yyS[yypt-1].item.(*types.FieldType), - FunctionType: ast.CastFunction, - } - } - case 404: - { - x := &ast.CaseExpr{WhenClauses: yyS[yypt-2].item.([]*ast.WhenClause)} - if yyS[yypt-3].item != nil { - x.Value = yyS[yypt-3].item.(ast.ExprNode) - } - if yyS[yypt-1].item != nil { - x.ElseClause = yyS[yypt-1].item.(ast.ExprNode) - } - yyVAL.item = x - } - case 405: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert - charset := ast.NewValueExpr(yyS[yypt-1].item) - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-5].item.(string)), - Args: []ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode), charset}, - } - } - case 406: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert - yyVAL.item = &ast.FuncCastExpr{ - Expr: yyS[yypt-3].item.(ast.ExprNode), - Tp: yyS[yypt-1].item.(*types.FieldType), - FunctionType: ast.CastConvertFunction, - } - } - case 407: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 408: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-2].item.(string))} - } - case 409: - { - // TODO: support qualified identifier for column_name - yyVAL.item = &ast.ValuesExpr{Column: &ast.ColumnNameExpr{Name: yyS[yypt-1].item.(*ast.ColumnName)}} - } - case 410: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 411: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 412: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 413: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-2].item.(string))} - } - case 414: - { - args := []ast.ExprNode{} - if yyS[yypt-1].item != nil { - args = append(args, yyS[yypt-1].item.(ast.ExprNode)) - } - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: args} - } - case 415: - { - args := []ast.ExprNode{} - if yyS[yypt-0].item != nil { - args = append(args, yyS[yypt-0].item.(ast.ExprNode)) - } - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-1].item.(string)), Args: args} - } - case 416: - { - args := []ast.ExprNode{} - if yyS[yypt-0].item != nil { - args = append(args, yyS[yypt-0].item.(ast.ExprNode)) - } - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-1].item.(string)), Args: args} - } - case 417: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 418: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 419: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 420: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 421: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 422: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 423: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 424: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 425: - { - op := ast.NewValueExpr(yyS[yypt-7].item) - dateArithInterval := ast.NewValueExpr( - ast.DateArithInterval{ - Unit: yyS[yypt-1].item.(string), - Interval: yyS[yypt-2].item.(ast.ExprNode), - }, - ) - - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr("DATE_ARITH"), - Args: []ast.ExprNode{ - op, - yyS[yypt-5].item.(ast.ExprNode), - dateArithInterval, - }, - } - } - case 426: - { - op := ast.NewValueExpr(yyS[yypt-5].item) - dateArithInterval := ast.NewValueExpr(yyS[yypt-1].item) - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr("DATE_ARITH"), - Args: []ast.ExprNode{ - op, - yyS[yypt-3].item.(ast.ExprNode), - dateArithInterval, - }, - } - } - case 427: - { - timeUnit := ast.NewValueExpr(yyS[yypt-3].item) - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-5].item.(string)), - Args: []ast.ExprNode{timeUnit, yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 428: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-2].item.(string))} - } - case 429: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 430: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 431: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 432: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-5].item.(string)), - Args: []ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 433: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-7].item.(string)), - Args: []ast.ExprNode{yyS[yypt-5].item.(ast.ExprNode), yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 434: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 435: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 436: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 437: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 438: - { - args := []ast.ExprNode{} - if yyS[yypt-1].item != nil { - args = append(args, yyS[yypt-1].item.(ast.ExprNode)) - } - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: args} - } - case 439: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 440: - { - args := []ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)} - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-5].item.(string)), Args: args} - } - case 441: - { - args := []ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)} - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-5].item.(string)), Args: args} - } - case 442: - { - - args := []ast.ExprNode{} - if yyS[yypt-1].item != nil { - args = append(args, yyS[yypt-1].item.(ast.ExprNode)) - } - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: args} - } - case 443: - { - args := []ast.ExprNode{yyS[yypt-5].item.(ast.ExprNode), yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)} - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-7].item.(string)), Args: args} - } - case 444: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 445: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-5].item.(string)), Args: []ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)}} - } - case 446: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-5].item.(string)), - Args: []ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 447: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-5].item.(string)), - Args: []ast.ExprNode{yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 448: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-7].item.(string)), - Args: []ast.ExprNode{yyS[yypt-5].item.(ast.ExprNode), yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 449: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-7].item.(string)), - Args: []ast.ExprNode{yyS[yypt-5].item.(ast.ExprNode), yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 450: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-7].item.(string)), - Args: []ast.ExprNode{yyS[yypt-5].item.(ast.ExprNode), yyS[yypt-3].item.(ast.ExprNode), yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 451: - { - args := []ast.ExprNode{} - if yyS[yypt-1].item != nil { - args = append(args, yyS[yypt-1].item.(ast.ExprNode)) - } - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: args} - } - case 452: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-3].item.(string)), - Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}, - } - } - case 453: - { - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-5].item.(string)), - Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode), yyS[yypt-3].item.(ast.ExprNode)}, - } - } - case 454: - { - nilVal := ast.NewValueExpr(nil) - direction := ast.NewValueExpr(yyS[yypt-3].item) - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-5].item.(string)), - Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode), nilVal, direction}, - } - } - case 455: - { - direction := ast.NewValueExpr(yyS[yypt-4].item) - yyVAL.item = &ast.FuncCallExpr{ - FnName: model.NewCIStr(yyS[yypt-6].item.(string)), - Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode), yyS[yypt-3].item.(ast.ExprNode), direction}, - } - } - case 456: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 457: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 458: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}} - } - case 459: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].item.(string)), Args: yyS[yypt-1].item.([]ast.ExprNode)} - } - case 460: - { - yyVAL.item = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-2].item.(string))} - } - case 461: - { - yyVAL.item = ast.DateAdd - } - case 462: - { - yyVAL.item = ast.DateSub - } - case 463: - { - yyVAL.item = ast.DateAdd - } - case 464: - { - yyVAL.item = ast.DateSub - } - case 465: - { - yyVAL.item = ast.DateArithInterval{ - Unit: "day", - Interval: yyS[yypt-0].item.(ast.ExprNode), - } - } - case 466: - { - yyVAL.item = ast.DateArithInterval{Unit: yyS[yypt-0].item.(string), Interval: yyS[yypt-1].item.(ast.ExprNode)} - } - case 467: - { - yyVAL.item = ast.TrimBoth - } - case 468: - { - yyVAL.item = ast.TrimLeading - } - case 469: - { - yyVAL.item = ast.TrimTrailing - } - case 470: - { - yyVAL.item = &ast.AggregateFuncExpr{F: yyS[yypt-4].item.(string), Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: yyS[yypt-2].item.(bool)} - } - case 471: - { - yyVAL.item = &ast.AggregateFuncExpr{F: yyS[yypt-4].item.(string), Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: yyS[yypt-2].item.(bool)} - } - case 472: - { - args := []ast.ExprNode{ast.NewValueExpr(ast.UnquoteString("*"))} - yyVAL.item = &ast.AggregateFuncExpr{F: yyS[yypt-4].item.(string), Args: args, Distinct: yyS[yypt-2].item.(bool)} - } - case 473: - { - yyVAL.item = &ast.AggregateFuncExpr{F: yyS[yypt-4].item.(string), Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: yyS[yypt-2].item.(bool)} - } - case 474: - { - yyVAL.item = &ast.AggregateFuncExpr{F: yyS[yypt-4].item.(string), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}, Distinct: yyS[yypt-2].item.(bool)} - } - case 475: - { - yyVAL.item = &ast.AggregateFuncExpr{F: yyS[yypt-4].item.(string), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}, Distinct: yyS[yypt-2].item.(bool)} - } - case 476: - { - yyVAL.item = &ast.AggregateFuncExpr{F: yyS[yypt-4].item.(string), Args: []ast.ExprNode{yyS[yypt-1].item.(ast.ExprNode)}, Distinct: yyS[yypt-2].item.(bool)} - } - case 477: - { - yyVAL.item = nil - } - case 478: - { - yyVAL.item = nil - } - case 479: - { - yyVAL.item = yyS[yypt-1].item - } - case 500: - { - yyVAL.item = nil - } - case 501: - { - yyVAL.item = yyS[yypt-0].item - } - case 502: - { - yyVAL.item = []*ast.WhenClause{yyS[yypt-0].item.(*ast.WhenClause)} - } - case 503: - { - yyVAL.item = append(yyS[yypt-1].item.([]*ast.WhenClause), yyS[yypt-0].item.(*ast.WhenClause)) - } - case 504: - { - yyVAL.item = &ast.WhenClause{ - Expr: yyS[yypt-2].item.(ast.ExprNode), - Result: yyS[yypt-0].item.(ast.ExprNode), - } - } - case 505: - { - yyVAL.item = nil - } - case 506: - { - yyVAL.item = yyS[yypt-0].item - } - case 507: - { - x := types.NewFieldType(mysql.TypeString) - x.Flen = yyS[yypt-0].item.(int) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - yyVAL.item = x - } - case 508: - { - x := types.NewFieldType(mysql.TypeString) - x.Flen = yyS[yypt-2].item.(int) - if yyS[yypt-1].item.(bool) { - x.Flag |= mysql.BinaryFlag - } - x.Charset = yyS[yypt-0].item.(string) - yyVAL.item = x - } - case 509: - { - x := types.NewFieldType(mysql.TypeDate) - yyVAL.item = x - } - case 510: - { - x := types.NewFieldType(mysql.TypeDatetime) - x.Decimal = yyS[yypt-0].item.(int) - yyVAL.item = x - } - case 511: - { - fopt := yyS[yypt-0].item.(*ast.FloatOpt) - x := types.NewFieldType(mysql.TypeNewDecimal) - x.Flen = fopt.Flen - x.Decimal = fopt.Decimal - yyVAL.item = x - } - case 512: - { - x := types.NewFieldType(mysql.TypeDuration) - x.Decimal = yyS[yypt-0].item.(int) - yyVAL.item = x - } - case 513: - { - x := types.NewFieldType(mysql.TypeLonglong) - yyVAL.item = x - } - case 514: - { - x := types.NewFieldType(mysql.TypeLonglong) - x.Flag |= mysql.UnsignedFlag - yyVAL.item = x - } - case 515: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.Or, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 516: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.And, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 517: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.LeftShift, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 518: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.RightShift, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 519: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.Plus, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 520: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.Minus, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 521: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.Mul, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 522: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.Div, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 523: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 524: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.IntDiv, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 525: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 526: - { - yyVAL.item = &ast.BinaryOperationExpr{Op: opcode.Xor, L: yyS[yypt-2].item.(ast.ExprNode), R: yyS[yypt-0].item.(ast.ExprNode)} - } - case 528: - { - yyVAL.item = ast.NoPriority - } - case 529: - { - yyVAL.item = ast.LowPriority - } - case 530: - { - yyVAL.item = ast.HighPriority - } - case 531: - { - yyVAL.item = ast.DelayedPriority - } - case 532: - { - yyVAL.item = false - } - case 533: - { - yyVAL.item = true - } - case 534: - { - yyVAL.item = &ast.TableName{Name: model.NewCIStr(yyS[yypt-0].item.(string))} - } - case 535: - { - yyVAL.item = &ast.TableName{Schema: model.NewCIStr(yyS[yypt-2].item.(string)), Name: model.NewCIStr(yyS[yypt-0].item.(string))} - } - case 536: - { - tbl := []*ast.TableName{yyS[yypt-0].item.(*ast.TableName)} - yyVAL.item = tbl - } - case 537: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableName), yyS[yypt-0].item.(*ast.TableName)) - } - case 538: - { - yyVAL.item = false - } - case 539: - { - yyVAL.item = true - } - case 540: - { - var sqlText string - var sqlVar *ast.VariableExpr - switch yyS[yypt-0].item.(type) { - case string: - sqlText = yyS[yypt-0].item.(string) - case *ast.VariableExpr: - sqlVar = yyS[yypt-0].item.(*ast.VariableExpr) - } - yyVAL.item = &ast.PrepareStmt{ - Name: yyS[yypt-2].item.(string), - SQLText: sqlText, - SQLVar: sqlVar, - } - } - case 543: - { - yyVAL.item = &ast.ExecuteStmt{Name: yyS[yypt-0].item.(string)} - } - case 544: - { - yyVAL.item = &ast.ExecuteStmt{ - Name: yyS[yypt-2].item.(string), - UsingVars: yyS[yypt-0].item.([]ast.ExprNode), - } - } - case 545: - { - yyVAL.item = []ast.ExprNode{yyS[yypt-0].item.(ast.ExprNode)} - } - case 546: - { - yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].item.(ast.ExprNode)) - } - case 547: - { - yyVAL.item = &ast.DeallocateStmt{Name: yyS[yypt-0].item.(string)} - } - case 550: - { - yyVAL.item = &ast.RollbackStmt{} - } - case 551: - { - st := &ast.SelectStmt{ - Distinct: yyS[yypt-3].item.(bool), - Fields: yyS[yypt-2].item.(*ast.FieldList), - LockTp: yyS[yypt-0].item.(ast.SelectLockType), - } - lastField := st.Fields.Fields[len(st.Fields.Fields)-1] - if lastField.Expr != nil && lastField.AsName.O == "" { - src := yylex.(*lexer).src - var lastEnd int - if yyS[yypt-1].item != nil { - lastEnd = yyS[yypt-1].offset - 1 - } else if yyS[yypt-0].item != ast.SelectLockNone { - lastEnd = yyS[yypt].offset - 1 - } else { - lastEnd = len(src) - if src[lastEnd-1] == ';' { - lastEnd-- - } - } - lastField.SetText(src[lastField.Offset:lastEnd]) - } - if yyS[yypt-1].item != nil { - st.Limit = yyS[yypt-1].item.(*ast.Limit) - } - yyVAL.item = st - } - case 552: - { - st := &ast.SelectStmt{ - Distinct: yyS[yypt-5].item.(bool), - Fields: yyS[yypt-4].item.(*ast.FieldList), - LockTp: yyS[yypt-0].item.(ast.SelectLockType), - } - lastField := st.Fields.Fields[len(st.Fields.Fields)-1] - if lastField.Expr != nil && lastField.AsName.O == "" { - lastEnd := yyS[yypt-3].offset - 1 - lastField.SetText(yylex.(*lexer).src[lastField.Offset:lastEnd]) - } - if yyS[yypt-2].item != nil { - st.Where = yyS[yypt-2].item.(ast.ExprNode) - } - if yyS[yypt-1].item != nil { - st.Limit = yyS[yypt-1].item.(*ast.Limit) - } - yyVAL.item = st - } - case 553: - { - st := &ast.SelectStmt{ - Distinct: yyS[yypt-9].item.(bool), - Fields: yyS[yypt-8].item.(*ast.FieldList), - From: yyS[yypt-6].item.(*ast.TableRefsClause), - LockTp: yyS[yypt-0].item.(ast.SelectLockType), - } - - lastField := st.Fields.Fields[len(st.Fields.Fields)-1] - if lastField.Expr != nil && lastField.AsName.O == "" { - lastEnd := yyS[yypt-7].offset - 1 - lastField.SetText(yylex.(*lexer).src[lastField.Offset:lastEnd]) - } - - if yyS[yypt-5].item != nil { - st.Where = yyS[yypt-5].item.(ast.ExprNode) - } - - if yyS[yypt-4].item != nil { - st.GroupBy = yyS[yypt-4].item.(*ast.GroupByClause) - } - - if yyS[yypt-3].item != nil { - st.Having = yyS[yypt-3].item.(*ast.HavingClause) - } - - if yyS[yypt-2].item != nil { - st.OrderBy = yyS[yypt-2].item.(*ast.OrderByClause) - } - - if yyS[yypt-1].item != nil { - st.Limit = yyS[yypt-1].item.(*ast.Limit) - } - - yyVAL.item = st - } - case 555: - { - yyVAL.item = &ast.TableRefsClause{TableRefs: yyS[yypt-0].item.(*ast.Join)} - } - case 556: - { - if j, ok := yyS[yypt-0].item.(*ast.Join); ok { - // if $1 is Join, use it directly - yyVAL.item = j - } else { - yyVAL.item = &ast.Join{Left: yyS[yypt-0].item.(ast.ResultSetNode), Right: nil} - } - } - case 557: - { - /* from a, b is default cross join */ - yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: ast.CrossJoin} - } - case 558: - { - yyVAL.item = yyS[yypt-0].item - } - case 559: - { - /* - * ODBC escape syntax for outer join is { OJ join_table } - * Use an Identifier for OJ - */ - yyVAL.item = yyS[yypt-1].item - } - case 560: - { - yyVAL.item = yyS[yypt-0].item - } - case 561: - { - yyVAL.item = yyS[yypt-0].item - } - case 562: - { - yyVAL.item = &ast.TableSource{Source: yyS[yypt-1].item.(*ast.TableName), AsName: yyS[yypt-0].item.(model.CIStr)} - } - case 563: - { - st := yyS[yypt-2].item.(*ast.SelectStmt) - l := yylex.(*lexer) - endOffset := l.endOffset(yyS[yypt-1].offset) - l.SetLastSelectFieldText(st, endOffset) - yyVAL.item = &ast.TableSource{Source: yyS[yypt-2].item.(*ast.SelectStmt), AsName: yyS[yypt-0].item.(model.CIStr)} - } - case 564: - { - yyVAL.item = &ast.TableSource{Source: yyS[yypt-2].item.(*ast.UnionStmt), AsName: yyS[yypt-0].item.(model.CIStr)} - } - case 565: - { - yyVAL.item = yyS[yypt-1].item - } - case 566: - { - yyVAL.item = model.CIStr{} - } - case 567: - { - yyVAL.item = yyS[yypt-0].item - } - case 568: - { - yyVAL.item = model.NewCIStr(yyS[yypt-0].item.(string)) - } - case 569: - { - yyVAL.item = model.NewCIStr(yyS[yypt-0].item.(string)) - } - case 570: - { - yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: ast.CrossJoin} - } - case 571: - { - on := &ast.OnCondition{Expr: yyS[yypt-0].item.(ast.ExprNode)} - yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: ast.CrossJoin, On: on} - } - case 572: - { - on := &ast.OnCondition{Expr: yyS[yypt-0].item.(ast.ExprNode)} - yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: yyS[yypt-5].item.(ast.JoinType), On: on} - } - case 573: - { - yyVAL.item = ast.LeftJoin - } - case 574: - { - yyVAL.item = ast.RightJoin - } - case 575: - { - yyVAL.item = nil - } - case 580: - { - yyVAL.item = nil - } - case 581: - { - yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(uint64)} - } - case 582: - { - yyVAL.item = nil - } - case 583: - { - yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(uint64)} - } - case 584: - { - yyVAL.item = &ast.Limit{Offset: yyS[yypt-2].item.(uint64), Count: yyS[yypt-0].item.(uint64)} - } - case 585: - { - yyVAL.item = &ast.Limit{Offset: yyS[yypt-0].item.(uint64), Count: yyS[yypt-2].item.(uint64)} - } - case 586: - { - yyVAL.item = false - } - case 587: - { - yyVAL.item = false - } - case 588: - { - yyVAL.item = true - } - case 589: - { - // TODO: return calc_found_rows opt and support more other options - yyVAL.item = yyS[yypt-1].item - } - case 590: - { - yyVAL.item = false - } - case 591: - { - yyVAL.item = true - } - case 592: - { - yyVAL.item = &ast.FieldList{Fields: yyS[yypt-0].item.([]*ast.SelectField)} - } - case 593: - { - yyVAL.item = nil - } - case 595: - { - s := yyS[yypt-1].item.(*ast.SelectStmt) - l := yylex.(*lexer) - endOffset := l.endOffset(yyS[yypt].offset) - l.SetLastSelectFieldText(s, endOffset) - src := yylex.(*lexer).src - // See the implemention of yyParse function - s.SetText(src[yyS[yypt-1].offset-1 : yyS[yypt].offset-1]) - yyVAL.item = &ast.SubqueryExpr{Query: s} - } - case 596: - { - s := yyS[yypt-1].item.(*ast.UnionStmt) - src := yylex.(*lexer).src - // See the implemention of yyParse function - s.SetText(src[yyS[yypt-1].offset-1 : yyS[yypt].offset-1]) - yyVAL.item = &ast.SubqueryExpr{Query: s} - } - case 597: - { - yyVAL.item = ast.SelectLockNone - } - case 598: - { - yyVAL.item = ast.SelectLockForUpdate - } - case 599: - { - yyVAL.item = ast.SelectLockInShareMode - } - case 600: - { - union := yyS[yypt-3].item.(*ast.UnionStmt) - union.Distinct = union.Distinct || yyS[yypt-1].item.(bool) - lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] - l := yylex.(*lexer) - endOffset := l.endOffset(yyS[yypt-2].offset) - l.SetLastSelectFieldText(lastSelect, endOffset) - union.SelectList.Selects = append(union.SelectList.Selects, yyS[yypt-0].item.(*ast.SelectStmt)) - yyVAL.item = union - } - case 601: - { - union := yyS[yypt-7].item.(*ast.UnionStmt) - union.Distinct = union.Distinct || yyS[yypt-5].item.(bool) - lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] - l := yylex.(*lexer) - endOffset := l.endOffset(yyS[yypt-6].offset) - l.SetLastSelectFieldText(lastSelect, endOffset) - st := yyS[yypt-3].item.(*ast.SelectStmt) - endOffset = l.endOffset(yyS[yypt-2].offset) - l.SetLastSelectFieldText(st, endOffset) - union.SelectList.Selects = append(union.SelectList.Selects, st) - if yyS[yypt-1].item != nil { - union.OrderBy = yyS[yypt-1].item.(*ast.OrderByClause) - } - if yyS[yypt-0].item != nil { - union.Limit = yyS[yypt-0].item.(*ast.Limit) - } - yyVAL.item = union - } - case 602: - { - selectList := &ast.UnionSelectList{Selects: []*ast.SelectStmt{yyS[yypt-0].item.(*ast.SelectStmt)}} - yyVAL.item = &ast.UnionStmt{ - SelectList: selectList, - } - } - case 603: - { - union := yyS[yypt-3].item.(*ast.UnionStmt) - union.Distinct = union.Distinct || yyS[yypt-1].item.(bool) - lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] - l := yylex.(*lexer) - endOffset := l.endOffset(yyS[yypt-2].offset) - l.SetLastSelectFieldText(lastSelect, endOffset) - union.SelectList.Selects = append(union.SelectList.Selects, yyS[yypt-0].item.(*ast.SelectStmt)) - yyVAL.item = union - } - case 605: - { - st := yyS[yypt-1].item.(*ast.SelectStmt) - l := yylex.(*lexer) - endOffset := l.endOffset(yyS[yypt].offset) - l.SetLastSelectFieldText(st, endOffset) - yyVAL.item = st - } - case 606: - { - yyVAL.item = true - } - case 607: - { - yyVAL.item = false - } - case 608: - { - yyVAL.item = true - } - case 609: - { - yyVAL.item = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)} - } - case 610: - { - yyVAL.item = &ast.SetCharsetStmt{Charset: yyS[yypt-0].item.(string)} - } - case 611: - { - yyVAL.item = &ast.SetCharsetStmt{ - Charset: yyS[yypt-2].item.(string), - Collate: yyS[yypt-0].item.(string), - } - } - case 612: - { - yyVAL.item = &ast.SetCharsetStmt{Charset: yyS[yypt-0].item.(string)} - } - case 613: - { - yyVAL.item = &ast.SetPwdStmt{Password: yyS[yypt-0].item.(string)} - } - case 614: - { - yyVAL.item = &ast.SetPwdStmt{User: yyS[yypt-2].item.(string), Password: yyS[yypt-0].item.(string)} - } - case 615: - { - // Parsed but ignored - } - case 616: - { - // Parsed but ignored - } - case 626: - { - yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].item.(string), Value: yyS[yypt-0].item.(ast.ExprNode), IsSystem: true} - } - case 627: - { - yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].item.(string), Value: yyS[yypt-0].item.(ast.ExprNode), IsGlobal: true, IsSystem: true} - } - case 628: - { - yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].item.(string), Value: yyS[yypt-0].item.(ast.ExprNode), IsSystem: true} - } - case 629: - { - yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].item.(string), Value: yyS[yypt-0].item.(ast.ExprNode), IsSystem: true} - } - case 630: - { - v := strings.ToLower(yyS[yypt-2].item.(string)) - var isGlobal bool - if strings.HasPrefix(v, "@@global.") { - isGlobal = true - v = strings.TrimPrefix(v, "@@global.") - } else if strings.HasPrefix(v, "@@session.") { - v = strings.TrimPrefix(v, "@@session.") - } else if strings.HasPrefix(v, "@@local.") { - v = strings.TrimPrefix(v, "@@local.") - } else if strings.HasPrefix(v, "@@") { - v = strings.TrimPrefix(v, "@@") - } - yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].item.(ast.ExprNode), IsGlobal: isGlobal, IsSystem: true} - } - case 631: - { - v := yyS[yypt-2].item.(string) - v = strings.TrimPrefix(v, "@") - yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].item.(ast.ExprNode)} - } - case 632: - { - yyVAL.item = []*ast.VariableAssignment{} - } - case 633: - { - yyVAL.item = []*ast.VariableAssignment{yyS[yypt-0].item.(*ast.VariableAssignment)} - } - case 634: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.VariableAssignment), yyS[yypt-0].item.(*ast.VariableAssignment)) - } - case 637: - { - v := strings.ToLower(yyS[yypt-0].item.(string)) - var isGlobal bool - if strings.HasPrefix(v, "@@global.") { - isGlobal = true - v = strings.TrimPrefix(v, "@@global.") - } else if strings.HasPrefix(v, "@@session.") { - v = strings.TrimPrefix(v, "@@session.") - } else if strings.HasPrefix(v, "@@local.") { - v = strings.TrimPrefix(v, "@@local.") - } else if strings.HasPrefix(v, "@@") { - v = strings.TrimPrefix(v, "@@") - } - yyVAL.item = &ast.VariableExpr{Name: v, IsGlobal: isGlobal, IsSystem: true} - } - case 638: - { - v := yyS[yypt-0].item.(string) - v = strings.TrimPrefix(v, "@") - yyVAL.item = &ast.VariableExpr{Name: v, IsGlobal: false, IsSystem: false} - } - case 639: - { - yyVAL.item = yyS[yypt-2].item.(string) + "@" + yyS[yypt-0].item.(string) - } - case 640: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 641: - { - yyVAL.item = yyS[yypt-1].item.(string) - } - case 642: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 643: - { - yyVAL.item = &ast.AdminStmt{Tp: ast.AdminShowDDL} - } - case 644: - { - yyVAL.item = &ast.AdminStmt{ - Tp: ast.AdminCheckTable, - Tables: yyS[yypt-0].item.([]*ast.TableName), - } - } - case 645: - { - stmt := yyS[yypt-1].item.(*ast.ShowStmt) - if yyS[yypt-0].item != nil { - if x, ok := yyS[yypt-0].item.(*ast.PatternLikeExpr); ok { - stmt.Pattern = x - } else { - stmt.Where = yyS[yypt-0].item.(ast.ExprNode) - } - } - yyVAL.item = stmt - } - case 646: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowCreateTable, - Table: yyS[yypt-0].item.(*ast.TableName), - } - } - case 647: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/show-grants.html - yyVAL.item = &ast.ShowStmt{Tp: ast.ShowGrants} - } - case 648: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/show-grants.html - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowGrants, - User: yyS[yypt-0].item.(string), - } - } - case 649: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowIndex, - Table: yyS[yypt-0].item.(*ast.TableName), - } - } - case 650: - { - yyVAL.item = &ast.ShowStmt{Tp: ast.ShowEngines} - } - case 651: - { - yyVAL.item = &ast.ShowStmt{Tp: ast.ShowDatabases} - } - case 652: - { - yyVAL.item = &ast.ShowStmt{Tp: ast.ShowDatabases} - } - case 653: - { - yyVAL.item = &ast.ShowStmt{Tp: ast.ShowCharset} - } - case 654: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowTables, - DBName: yyS[yypt-0].item.(string), - Full: yyS[yypt-2].item.(bool), - } - } - case 655: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowTableStatus, - DBName: yyS[yypt-0].item.(string), - } - } - case 656: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowColumns, - Table: yyS[yypt-1].item.(*ast.TableName), - DBName: yyS[yypt-0].item.(string), - Full: yyS[yypt-3].item.(bool), - } - } - case 657: - { - // SHOW FIELDS is a synonym for SHOW COLUMNS. - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowColumns, - Table: yyS[yypt-1].item.(*ast.TableName), - DBName: yyS[yypt-0].item.(string), - Full: yyS[yypt-3].item.(bool), - } - } - case 658: - { - yyVAL.item = &ast.ShowStmt{Tp: ast.ShowWarnings} - } - case 659: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowVariables, - GlobalScope: yyS[yypt-1].item.(bool), - } - } - case 660: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowStatus, - GlobalScope: yyS[yypt-1].item.(bool), - } - } - case 661: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowCollation, - } - } - case 662: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowTriggers, - DBName: yyS[yypt-0].item.(string), - } - } - case 663: - { - yyVAL.item = &ast.ShowStmt{ - Tp: ast.ShowProcedureStatus, - } - } - case 664: - { - yyVAL.item = nil - } - case 665: - { - yyVAL.item = &ast.PatternLikeExpr{Pattern: yyS[yypt-0].item.(ast.ExprNode)} - } - case 666: - { - yyVAL.item = yyS[yypt-0].item.(ast.ExprNode) - } - case 667: - { - yyVAL.item = false - } - case 668: - { - yyVAL.item = true - } - case 669: - { - yyVAL.item = false - } - case 670: - { - yyVAL.item = false - } - case 671: - { - yyVAL.item = true - } - case 672: - { - yyVAL.item = "" - } - case 673: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 674: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 675: - { - yyVAL.item = yyS[yypt-0].item.(*ast.TableName) - } - case 676: - { - yyVAL.item = yyS[yypt-0].item.(*ast.TableName) - } - case 706: - { - // `(select 1)`; is a valid select statement - // TODO: This is used to fix issue #320. There may be a better solution. - yyVAL.item = yyS[yypt-0].item.(*ast.SubqueryExpr).Query - } - case 714: - { - if yyS[yypt-0].item != nil { - s := yyS[yypt-0].item.(ast.StmtNode) - s.SetText(yylex.(*lexer).stmtText()) - yylex.(*lexer).list = append(yylex.(*lexer).list, s) - } - } - case 715: - { - if yyS[yypt-0].item != nil { - s := yyS[yypt-0].item.(ast.StmtNode) - s.SetText(yylex.(*lexer).stmtText()) - yylex.(*lexer).list = append(yylex.(*lexer).list, s) - } - } - case 716: - { - cst := yyS[yypt-0].item.(*ast.Constraint) - if yyS[yypt-1].item != nil { - cst.Name = yyS[yypt-1].item.(string) - } - yyVAL.item = cst - } - case 717: - { - yyVAL.item = yyS[yypt-0].item.(*ast.ColumnDef) - } - case 718: - { - yyVAL.item = yyS[yypt-0].item.(*ast.Constraint) - } - case 719: - { - /* Nothing to do now */ - yyVAL.item = nil - } - case 720: - { - if yyS[yypt-0].item != nil { - yyVAL.item = []interface{}{yyS[yypt-0].item.(interface{})} - } else { - yyVAL.item = []interface{}{} - } - } - case 721: - { - if yyS[yypt-0].item != nil { - yyVAL.item = append(yyS[yypt-2].item.([]interface{}), yyS[yypt-0].item) - } else { - yyVAL.item = yyS[yypt-2].item - } - } - case 722: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngine, StrValue: yyS[yypt-0].item.(string)} - } - case 723: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngine, StrValue: yyS[yypt-0].item.(string)} - } - case 724: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCharset, StrValue: yyS[yypt-0].item.(string)} - } - case 725: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: yyS[yypt-0].item.(string)} - } - case 726: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoIncrement, UintValue: yyS[yypt-0].item.(uint64)} - } - case 727: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionComment, StrValue: yyS[yypt-0].item.(string)} - } - case 728: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAvgRowLength, UintValue: yyS[yypt-0].item.(uint64)} - } - case 729: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionConnection, StrValue: yyS[yypt-0].item.(string)} - } - case 730: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCheckSum, UintValue: yyS[yypt-0].item.(uint64)} - } - case 731: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPassword, StrValue: yyS[yypt-0].item.(string)} - } - case 732: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCompression, StrValue: yyS[yypt-0].item.(string)} - } - case 733: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionKeyBlockSize, UintValue: yyS[yypt-0].item.(uint64)} - } - case 734: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionMaxRows, UintValue: yyS[yypt-0].item.(uint64)} - } - case 735: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionMinRows, UintValue: yyS[yypt-0].item.(uint64)} - } - case 736: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionDelayKeyWrite, UintValue: yyS[yypt-0].item.(uint64)} - } - case 737: - { - yyVAL.item = &ast.TableOption{Tp: ast.TableOptionRowFormat, UintValue: yyS[yypt-0].item.(uint64)} - } - case 738: - { - yyVAL.item = []*ast.TableOption{} - } - case 740: - { - yyVAL.item = []*ast.TableOption{yyS[yypt-0].item.(*ast.TableOption)} - } - case 741: - { - yyVAL.item = append(yyS[yypt-1].item.([]*ast.TableOption), yyS[yypt-0].item.(*ast.TableOption)) - } - case 742: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableOption), yyS[yypt-0].item.(*ast.TableOption)) - } - case 743: - { - yyVAL.item = &ast.TruncateTableStmt{Table: yyS[yypt-0].item.(*ast.TableName)} - } - case 744: - { - yyVAL.item = ast.RowFormatDefault - } - case 745: - { - yyVAL.item = ast.RowFormatDynamic - } - case 746: - { - yyVAL.item = ast.RowFormatFixed - } - case 747: - { - yyVAL.item = ast.RowFormatCompressed - } - case 748: - { - yyVAL.item = ast.RowFormatRedundant - } - case 749: - { - yyVAL.item = ast.RowFormatCompact - } - case 750: - { - yyVAL.item = yyS[yypt-0].item - } - case 751: - { - yyVAL.item = yyS[yypt-0].item - } - case 752: - { - yyVAL.item = yyS[yypt-0].item - } - case 753: - { - x := types.NewFieldType(yyS[yypt-0].item.(byte)) - yyVAL.item = x - } - case 754: - { - x := types.NewFieldType(yyS[yypt-0].item.(byte)) - yyVAL.item = x - } - case 755: - { - x := types.NewFieldType(yyS[yypt-0].item.(byte)) - yyVAL.item = x - } - case 756: - { - x := types.NewFieldType(yyS[yypt-0].item.(byte)) - yyVAL.item = x - } - case 757: - { - x := types.NewFieldType(yyS[yypt-0].item.(byte)) - yyVAL.item = x - } - case 758: - { - x := types.NewFieldType(yyS[yypt-0].item.(byte)) - yyVAL.item = x - } - case 759: - { - // TODO: check flen 0 - x := types.NewFieldType(yyS[yypt-2].item.(byte)) - x.Flen = yyS[yypt-1].item.(int) - for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) { - if o.IsUnsigned { - x.Flag |= mysql.UnsignedFlag - } - if o.IsZerofill { - x.Flag |= mysql.ZerofillFlag - } - } - yyVAL.item = x - } - case 760: - { - fopt := yyS[yypt-1].item.(*ast.FloatOpt) - x := types.NewFieldType(yyS[yypt-2].item.(byte)) - x.Flen = fopt.Flen - x.Decimal = fopt.Decimal - for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) { - if o.IsUnsigned { - x.Flag |= mysql.UnsignedFlag - } - if o.IsZerofill { - x.Flag |= mysql.ZerofillFlag - } - } - yyVAL.item = x - } - case 761: - { - fopt := yyS[yypt-1].item.(*ast.FloatOpt) - x := types.NewFieldType(yyS[yypt-2].item.(byte)) - x.Flen = fopt.Flen - if x.Tp == mysql.TypeFloat { - // Fix issue #312 - if x.Flen > 53 { - yylex.(*lexer).errf("Float len(%d) should not be greater than 53", x.Flen) - return 1 - } - if x.Flen > 24 { - x.Tp = mysql.TypeDouble - } - } - x.Decimal = fopt.Decimal - for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) { - if o.IsUnsigned { - x.Flag |= mysql.UnsignedFlag - } - if o.IsZerofill { - x.Flag |= mysql.ZerofillFlag - } - } - yyVAL.item = x - } - case 762: - { - x := types.NewFieldType(yyS[yypt-1].item.(byte)) - x.Flen = yyS[yypt-0].item.(int) - if x.Flen == -1 || x.Flen == 0 { - x.Flen = 1 - } else if x.Flen > 64 { - yylex.(*lexer).errf("invalid field length %d for bit type, must in [1, 64]", x.Flen) - } - yyVAL.item = x - } - case 763: - { - yyVAL.item = mysql.TypeTiny - } - case 764: - { - yyVAL.item = mysql.TypeShort - } - case 765: - { - yyVAL.item = mysql.TypeInt24 - } - case 766: - { - yyVAL.item = mysql.TypeLong - } - case 767: - { - yyVAL.item = mysql.TypeLong - } - case 768: - { - yyVAL.item = mysql.TypeLonglong - } - case 769: - { - yyVAL.item = mysql.TypeTiny - } - case 770: - { - yyVAL.item = mysql.TypeTiny - } - case 773: - { - yyVAL.item = mysql.TypeNewDecimal - } - case 774: - { - yyVAL.item = mysql.TypeNewDecimal - } - case 775: - { - yyVAL.item = mysql.TypeFloat - } - case 776: - { - yyVAL.item = mysql.TypeDouble - } - case 777: - { - yyVAL.item = mysql.TypeDouble - } - case 778: - { - yyVAL.item = mysql.TypeDouble - } - case 779: - { - yyVAL.item = mysql.TypeBit - } - case 780: - { - x := types.NewFieldType(mysql.TypeString) - x.Flen = yyS[yypt-3].item.(int) - if yyS[yypt-2].item.(bool) { - x.Flag |= mysql.BinaryFlag - } - yyVAL.item = x - } - case 781: - { - x := types.NewFieldType(mysql.TypeString) - if yyS[yypt-2].item.(bool) { - x.Flag |= mysql.BinaryFlag - } - yyVAL.item = x - } - case 782: - { - x := types.NewFieldType(mysql.TypeVarchar) - x.Flen = yyS[yypt-3].item.(int) - if yyS[yypt-2].item.(bool) { - x.Flag |= mysql.BinaryFlag - } - x.Charset = yyS[yypt-1].item.(string) - x.Collate = yyS[yypt-0].item.(string) - yyVAL.item = x - } - case 783: - { - x := types.NewFieldType(mysql.TypeString) - x.Flen = yyS[yypt-0].item.(int) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - yyVAL.item = x - } - case 784: - { - x := types.NewFieldType(mysql.TypeVarchar) - x.Flen = yyS[yypt-0].item.(int) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - yyVAL.item = x - } - case 785: - { - yyVAL.item = yyS[yypt-0].item.(*types.FieldType) - } - case 786: - { - x := yyS[yypt-3].item.(*types.FieldType) - if yyS[yypt-2].item.(bool) { - x.Flag |= mysql.BinaryFlag - } - x.Charset = yyS[yypt-1].item.(string) - x.Collate = yyS[yypt-0].item.(string) - yyVAL.item = x - } - case 787: - { - x := types.NewFieldType(mysql.TypeEnum) - x.Elems = yyS[yypt-3].item.([]string) - x.Charset = yyS[yypt-1].item.(string) - x.Collate = yyS[yypt-0].item.(string) - yyVAL.item = x - } - case 788: - { - x := types.NewFieldType(mysql.TypeSet) - x.Elems = yyS[yypt-3].item.([]string) - x.Charset = yyS[yypt-1].item.(string) - x.Collate = yyS[yypt-0].item.(string) - yyVAL.item = x - } - case 791: - { - x := types.NewFieldType(mysql.TypeTinyBlob) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - yyVAL.item = x - } - case 792: - { - x := types.NewFieldType(mysql.TypeBlob) - x.Flen = yyS[yypt-0].item.(int) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - yyVAL.item = x - } - case 793: - { - x := types.NewFieldType(mysql.TypeMediumBlob) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - yyVAL.item = x - } - case 794: - { - x := types.NewFieldType(mysql.TypeLongBlob) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - yyVAL.item = x - } - case 795: - { - x := types.NewFieldType(mysql.TypeTinyBlob) - yyVAL.item = x - - } - case 796: - { - x := types.NewFieldType(mysql.TypeBlob) - x.Flen = yyS[yypt-0].item.(int) - yyVAL.item = x - } - case 797: - { - x := types.NewFieldType(mysql.TypeMediumBlob) - yyVAL.item = x - } - case 798: - { - x := types.NewFieldType(mysql.TypeLongBlob) - yyVAL.item = x - } - case 799: - { - x := types.NewFieldType(mysql.TypeDate) - yyVAL.item = x - } - case 800: - { - x := types.NewFieldType(mysql.TypeDatetime) - x.Decimal = yyS[yypt-0].item.(int) - yyVAL.item = x - } - case 801: - { - x := types.NewFieldType(mysql.TypeTimestamp) - x.Decimal = yyS[yypt-0].item.(int) - yyVAL.item = x - } - case 802: - { - x := types.NewFieldType(mysql.TypeDuration) - x.Decimal = yyS[yypt-0].item.(int) - yyVAL.item = x - } - case 803: - { - x := types.NewFieldType(mysql.TypeYear) - x.Flen = yyS[yypt-0].item.(int) - yyVAL.item = x - } - case 804: - { - yyVAL.item = int(yyS[yypt-1].item.(uint64)) - } - case 805: - { - /* -1 means unspecified field length*/ - yyVAL.item = types.UnspecifiedLength - } - case 806: - { - yyVAL.item = yyS[yypt-0].item.(int) - } - case 807: - { - yyVAL.item = &ast.TypeOpt{IsUnsigned: true} - } - case 808: - { - yyVAL.item = &ast.TypeOpt{IsZerofill: true, IsUnsigned: true} - } - case 809: - { - yyVAL.item = []*ast.TypeOpt{} - } - case 810: - { - yyVAL.item = append(yyS[yypt-1].item.([]*ast.TypeOpt), yyS[yypt-0].item.(*ast.TypeOpt)) - } - case 811: - { - yyVAL.item = &ast.FloatOpt{Flen: types.UnspecifiedLength, Decimal: types.UnspecifiedLength} - } - case 812: - { - yyVAL.item = &ast.FloatOpt{Flen: yyS[yypt-0].item.(int), Decimal: types.UnspecifiedLength} - } - case 813: - { - yyVAL.item = yyS[yypt-0].item.(*ast.FloatOpt) - } - case 814: - { - yyVAL.item = &ast.FloatOpt{Flen: int(yyS[yypt-3].item.(uint64)), Decimal: int(yyS[yypt-1].item.(uint64))} - } - case 815: - { - yyVAL.item = false - } - case 816: - { - yyVAL.item = true - } - case 817: - { - yyVAL.item = "" - } - case 818: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 821: - { - yyVAL.item = "" - } - case 822: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 823: - { - yyVAL.item = []string{yyS[yypt-0].item.(string)} - } - case 824: - { - yyVAL.item = append(yyS[yypt-2].item.([]string), yyS[yypt-0].item.(string)) - } - case 825: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 826: - { - yyVAL.item = yyS[yypt-0].item.(string) - } - case 827: - { - var refs *ast.Join - if x, ok := yyS[yypt-5].item.(*ast.Join); ok { - refs = x - } else { - refs = &ast.Join{Left: yyS[yypt-5].item.(ast.ResultSetNode)} - } - st := &ast.UpdateStmt{ - LowPriority: yyS[yypt-7].item.(bool), - TableRefs: &ast.TableRefsClause{TableRefs: refs}, - List: yyS[yypt-3].item.([]*ast.Assignment), - } - if yyS[yypt-2].item != nil { - st.Where = yyS[yypt-2].item.(ast.ExprNode) - } - if yyS[yypt-1].item != nil { - st.Order = yyS[yypt-1].item.(*ast.OrderByClause) - } - if yyS[yypt-0].item != nil { - st.Limit = yyS[yypt-0].item.(*ast.Limit) - } - yyVAL.item = st - if yylex.(*lexer).root { - break - } - } - case 828: - { - st := &ast.UpdateStmt{ - LowPriority: yyS[yypt-5].item.(bool), - TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-3].item.(*ast.Join)}, - List: yyS[yypt-1].item.([]*ast.Assignment), - } - if yyS[yypt-0].item != nil { - st.Where = yyS[yypt-0].item.(ast.ExprNode) - } - yyVAL.item = st - if yylex.(*lexer).root { - break - } - } - case 829: - { - yyVAL.item = &ast.UseStmt{DBName: yyS[yypt-0].item.(string)} - if yylex.(*lexer).root { - break - } - } - case 830: - { - yyVAL.item = yyS[yypt-0].item.(ast.ExprNode) - } - case 831: - { - yyVAL.item = nil - } - case 832: - { - yyVAL.item = yyS[yypt-0].item - } - case 835: - { - // See: https://dev.mysql.com/doc/refman/5.7/en/create-user.html - yyVAL.item = &ast.CreateUserStmt{ - IfNotExists: yyS[yypt-1].item.(bool), - Specs: yyS[yypt-0].item.([]*ast.UserSpec), - } - } - case 836: - { - userSpec := &ast.UserSpec{ - User: yyS[yypt-1].item.(string), - } - if yyS[yypt-0].item != nil { - userSpec.AuthOpt = yyS[yypt-0].item.(*ast.AuthOption) - } - yyVAL.item = userSpec - } - case 837: - { - yyVAL.item = []*ast.UserSpec{yyS[yypt-0].item.(*ast.UserSpec)} - } - case 838: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.UserSpec), yyS[yypt-0].item.(*ast.UserSpec)) - } - case 839: - { - yyVAL.item = nil - } - case 840: - { - yyVAL.item = &ast.AuthOption{ - AuthString: yyS[yypt-0].item.(string), - ByAuthString: true, - } - } - case 841: - { - yyVAL.item = &ast.AuthOption{ - HashString: yyS[yypt-0].item.(string), - } - } - case 843: - { - yyVAL.item = &ast.GrantStmt{ - Privs: yyS[yypt-5].item.([]*ast.PrivElem), - ObjectType: yyS[yypt-3].item.(ast.ObjectTypeType), - Level: yyS[yypt-2].item.(*ast.GrantLevel), - Users: yyS[yypt-0].item.([]*ast.UserSpec), - } - } - case 844: - { - yyVAL.item = &ast.PrivElem{ - Priv: yyS[yypt-0].item.(mysql.PrivilegeType), - } - } - case 845: - { - yyVAL.item = &ast.PrivElem{ - Priv: yyS[yypt-3].item.(mysql.PrivilegeType), - Cols: yyS[yypt-1].item.([]*ast.ColumnName), - } - } - case 846: - { - yyVAL.item = []*ast.PrivElem{yyS[yypt-0].item.(*ast.PrivElem)} - } - case 847: - { - yyVAL.item = append(yyS[yypt-2].item.([]*ast.PrivElem), yyS[yypt-0].item.(*ast.PrivElem)) - } - case 848: - { - yyVAL.item = mysql.AllPriv - } - case 849: - { - yyVAL.item = mysql.AlterPriv - } - case 850: - { - yyVAL.item = mysql.CreatePriv - } - case 851: - { - yyVAL.item = mysql.CreateUserPriv - } - case 852: - { - yyVAL.item = mysql.DeletePriv - } - case 853: - { - yyVAL.item = mysql.DropPriv - } - case 854: - { - yyVAL.item = mysql.ExecutePriv - } - case 855: - { - yyVAL.item = mysql.IndexPriv - } - case 856: - { - yyVAL.item = mysql.InsertPriv - } - case 857: - { - yyVAL.item = mysql.SelectPriv - } - case 858: - { - yyVAL.item = mysql.ShowDBPriv - } - case 859: - { - yyVAL.item = mysql.UpdatePriv - } - case 860: - { - yyVAL.item = mysql.GrantPriv - } - case 861: - { - yyVAL.item = ast.ObjectTypeNone - } - case 862: - { - yyVAL.item = ast.ObjectTypeTable - } - case 863: - { - yyVAL.item = &ast.GrantLevel{ - Level: ast.GrantLevelDB, - } - } - case 864: - { - yyVAL.item = &ast.GrantLevel{ - Level: ast.GrantLevelGlobal, - } - } - case 865: - { - yyVAL.item = &ast.GrantLevel{ - Level: ast.GrantLevelDB, - DBName: yyS[yypt-2].item.(string), - } - } - case 866: - { - yyVAL.item = &ast.GrantLevel{ - Level: ast.GrantLevelTable, - DBName: yyS[yypt-2].item.(string), - TableName: yyS[yypt-0].item.(string), - } - } - case 867: - { - yyVAL.item = &ast.GrantLevel{ - Level: ast.GrantLevelTable, - TableName: yyS[yypt-0].item.(string), - } - } - - } - - if yyEx != nil && yyEx.Reduced(r, exState, &yyVAL) { - return -1 - } - goto yystack /* stack new state and value */ -} diff --git a/vendor/github.com/pingcap/tidb/parser/scanner.go b/vendor/github.com/pingcap/tidb/parser/scanner.go deleted file mode 100644 index 5f952c29b..000000000 --- a/vendor/github.com/pingcap/tidb/parser/scanner.go +++ /dev/null @@ -1,15707 +0,0 @@ -// Code generated by goyacc -// CAUTION: Generated file - DO NOT EDIT. - -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package parser - -import ( - "fmt" - "math" - "strconv" - "strings" - "unicode" - - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/stringutil" -) - -type lexer struct { - c int - col int - errs []error - expr ast.ExprNode - i int - inj int - lcol int - line int - list []ast.StmtNode - ncol int - nline int - sc int - src string - val []byte - ungetBuf []byte - root bool - prepare bool - stmtStartPos int - stringLit []byte - - // record token's offset of the input - tokenEndOffset int - tokenStartOffset int - - // Charset information - charset string - collation string -} - -// NewLexer builds a new lexer. -func NewLexer(src string) (l *lexer) { - l = &lexer{ - src: src, - nline: 1, - ncol: 0, - } - l.next() - return -} - -func (l *lexer) Errors() []error { - return l.errs -} - -func (l *lexer) Stmts() []ast.StmtNode { - return l.list -} - -func (l *lexer) Expr() ast.ExprNode { - return l.expr -} - -func (l *lexer) Inj() int { - return l.inj -} - -func (l *lexer) SetInj(inj int) { - l.inj = inj -} - -func (l *lexer) SetPrepare() { - l.prepare = true -} - -func (l *lexer) IsPrepare() bool { - return l.prepare -} - -func (l *lexer) Root() bool { - return l.root -} - -func (l *lexer) SetRoot(root bool) { - l.root = root -} - -func (l *lexer) SetCharsetInfo(charset, collation string) { - l.charset = charset - l.collation = collation -} - -func (l *lexer) GetCharsetInfo() (string, string) { - return l.charset, l.collation -} - -// The select statement is not at the end of the whole statement, if the last -// field text was set from its offset to the end of the src string, update -// the last field text. -func (l *lexer) SetLastSelectFieldText(st *ast.SelectStmt, lastEnd int) { - lastField := st.Fields.Fields[len(st.Fields.Fields)-1] - if lastField.Offset+len(lastField.Text()) >= len(l.src)-1 { - lastField.SetText(l.src[lastField.Offset:lastEnd]) - } -} - -func (l *lexer) startOffset(offset int) int { - offset-- - for unicode.IsSpace(rune(l.src[offset])) { - offset++ - } - return offset -} - -func (l *lexer) endOffset(offset int) int { - offset-- - for offset > 0 && unicode.IsSpace(rune(l.src[offset-1])) { - offset-- - } - return offset -} - -func (l *lexer) unget(b byte) { - l.ungetBuf = append(l.ungetBuf, b) - l.i-- - l.ncol-- - l.tokenEndOffset-- -} - -func (l *lexer) next() int { - if un := len(l.ungetBuf); un > 0 { - nc := l.ungetBuf[0] - l.ungetBuf = l.ungetBuf[1:] - l.c = int(nc) - return l.c - } - - if l.c != 0 { - l.val = append(l.val, byte(l.c)) - } - l.c = 0 - if l.i < len(l.src) { - l.c = int(l.src[l.i]) - l.i++ - } - switch l.c { - case '\n': - l.lcol = l.ncol - l.nline++ - l.ncol = 0 - default: - l.ncol++ - } - l.tokenEndOffset++ - return l.c -} - -func (l *lexer) err0(ln, c int, arg interface{}) { - var argStr string - if arg != nil { - argStr = fmt.Sprintf(" %v", arg) - } - - err := fmt.Errorf("line %d column %d near \"%s\"%s", ln, c, l.val, argStr) - l.errs = append(l.errs, err) -} - -func (l *lexer) err(arg interface{}) { - l.err0(l.line, l.col, arg) -} - -func (l *lexer) errf(format string, args ...interface{}) { - s := fmt.Sprintf(format, args...) - l.err0(l.line, l.col, s) -} - -func (l *lexer) Error(s string) { - // Notice: ignore origin error info. - l.err(nil) -} - -func (l *lexer) stmtText() string { - endPos := l.i - if l.src[l.i-1] == '\n' { - endPos = l.i - 1 // trim new line - } - if l.src[l.stmtStartPos] == '\n' { - l.stmtStartPos++ - } - - text := l.src[l.stmtStartPos:endPos] - - l.stmtStartPos = l.i - return text -} - -func (l *lexer) Lex(lval *yySymType) (r int) { - defer func() { - lval.line, lval.col, lval.offset = l.line, l.col, l.tokenStartOffset - l.tokenStartOffset = l.tokenEndOffset - }() - const ( - INITIAL = iota - S1 - S2 - S3 - S4 - ) - - if n := l.inj; n != 0 { - l.inj = 0 - return n - } - - c0, c := 0, l.c - -yystate0: - - l.val = l.val[:0] - c0, l.line, l.col = l.c, l.nline, l.ncol - - switch yyt := l.sc; yyt { - default: - panic(fmt.Errorf(`invalid start condition %d`, yyt)) - case 0: // start condition: INITIAL - goto yystart1 - case 1: // start condition: S1 - goto yystart1254 - case 2: // start condition: S2 - goto yystart1260 - case 3: // start condition: S3 - goto yystart1266 - case 4: // start condition: S4 - goto yystart1269 - } - - goto yystate0 // silence unused label error - goto yystate1 // silence unused label error -yystate1: - c = l.next() -yystart1: - switch { - default: - goto yystate3 // c >= '\x01' && c <= '\b' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\x1f' || c == '$' || c == '%%' || c >= '(' && c <= ',' || c == ':' || c == ';' || c >= '[' && c <= '^' || c == '{' || c >= '}' && c <= 'ÿ' - case c == '!': - goto yystate6 - case c == '"': - goto yystate8 - case c == '#': - goto yystate9 - case c == '&': - goto yystate11 - case c == '-': - goto yystate15 - case c == '.': - goto yystate17 - case c == '/': - goto yystate22 - case c == '0': - goto yystate27 - case c == '<': - goto yystate36 - case c == '=': - goto yystate41 - case c == '>': - goto yystate42 - case c == '?': - goto yystate45 - case c == '@': - goto yystate46 - case c == 'A' || c == 'a': - goto yystate65 - case c == 'B' || c == 'b': - goto yystate118 - case c == 'C' || c == 'c': - goto yystate159 - case c == 'D' || c == 'd': - goto yystate294 - case c == 'E' || c == 'e': - goto yystate438 - case c == 'F' || c == 'f': - goto yystate476 - case c == 'G' || c == 'g': - goto yystate520 - case c == 'H' || c == 'h': - goto yystate541 - case c == 'I' || c == 'i': - goto yystate586 - case c == 'J' || c == 'j': - goto yystate635 - case c == 'K' || c == 'k': - goto yystate639 - case c == 'L' || c == 'l': - goto yystate653 - case c == 'M' || c == 'm': - goto yystate713 - case c == 'N' || c == 'n': - goto yystate780 - case c == 'O' || c == 'o': - goto yystate804 - case c == 'P' || c == 'p': - goto yystate826 - case c == 'Q' || c == 'q': - goto yystate862 - case c == 'R': - goto yystate872 - case c == 'S' || c == 's': - goto yystate927 - case c == 'T' || c == 't': - goto yystate1046 - case c == 'U' || c == 'u': - goto yystate1109 - case c == 'V' || c == 'v': - goto yystate1155 - case c == 'W' || c == 'w': - goto yystate1184 - case c == 'X' || c == 'x': - goto yystate1213 - case c == 'Y' || c == 'y': - goto yystate1219 - case c == 'Z' || c == 'z': - goto yystate1233 - case c == '\'': - goto yystate14 - case c == '\n': - goto yystate5 - case c == '\t' || c == '\r' || c == ' ': - goto yystate4 - case c == '\x00': - goto yystate2 - case c == '_': - goto yystate1241 - case c == '`': - goto yystate1242 - case c == 'r': - goto yystate1243 - case c == '|': - goto yystate1252 - case c >= '1' && c <= '9': - goto yystate34 - } - -yystate2: - c = l.next() - goto yyrule1 - -yystate3: - c = l.next() - goto yyrule319 - -yystate4: - c = l.next() - switch { - default: - goto yyrule2 - case c == '\t' || c == '\n' || c == '\r' || c == ' ': - goto yystate5 - } - -yystate5: - c = l.next() - switch { - default: - goto yyrule2 - case c == '\t' || c == '\n' || c == '\r' || c == ' ': - goto yystate5 - } - -yystate6: - c = l.next() - switch { - default: - goto yyrule319 - case c == '=': - goto yystate7 - } - -yystate7: - c = l.next() - goto yyrule33 - -yystate8: - c = l.next() - goto yyrule13 - -yystate9: - c = l.next() - switch { - default: - goto yyrule3 - case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ': - goto yystate10 - } - -yystate10: - c = l.next() - switch { - default: - goto yyrule3 - case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ': - goto yystate10 - } - -yystate11: - c = l.next() - switch { - default: - goto yyrule319 - case c == '&': - goto yystate12 - case c == '^': - goto yystate13 - } - -yystate12: - c = l.next() - goto yyrule27 - -yystate13: - c = l.next() - goto yyrule28 - -yystate14: - c = l.next() - goto yyrule14 - -yystate15: - c = l.next() - switch { - default: - goto yyrule319 - case c == '-': - goto yystate16 - } - -yystate16: - c = l.next() - goto yyrule6 - -yystate17: - c = l.next() - switch { - default: - goto yyrule319 - case c >= '0' && c <= '9': - goto yystate18 - } - -yystate18: - c = l.next() - switch { - default: - goto yyrule10 - case c == 'E' || c == 'e': - goto yystate19 - case c >= '0' && c <= '9': - goto yystate18 - } - -yystate19: - c = l.next() - switch { - default: - goto yyabort - case c == '+' || c == '-': - goto yystate20 - case c >= '0' && c <= '9': - goto yystate21 - } - -yystate20: - c = l.next() - switch { - default: - goto yyabort - case c >= '0' && c <= '9': - goto yystate21 - } - -yystate21: - c = l.next() - switch { - default: - goto yyrule10 - case c >= '0' && c <= '9': - goto yystate21 - } - -yystate22: - c = l.next() - switch { - default: - goto yyrule319 - case c == '*': - goto yystate23 - case c == '/': - goto yystate26 - } - -yystate23: - c = l.next() - switch { - default: - goto yyabort - case c == '*': - goto yystate24 - case c >= '\x01' && c <= ')' || c >= '+' && c <= 'ÿ': - goto yystate23 - } - -yystate24: - c = l.next() - switch { - default: - goto yyabort - case c == '*': - goto yystate24 - case c == '/': - goto yystate25 - case c >= '\x01' && c <= ')' || c >= '+' && c <= '.' || c >= '0' && c <= 'ÿ': - goto yystate23 - } - -yystate25: - c = l.next() - goto yyrule5 - -yystate26: - c = l.next() - switch { - default: - goto yyrule4 - case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ': - goto yystate26 - } - -yystate27: - c = l.next() - switch { - default: - goto yyrule9 - case c == '.': - goto yystate18 - case c == '8' || c == '9': - goto yystate29 - case c == 'B' || c == 'b': - goto yystate30 - case c == 'E' || c == 'e': - goto yystate19 - case c == 'X' || c == 'x': - goto yystate32 - case c >= '0' && c <= '7': - goto yystate28 - } - -yystate28: - c = l.next() - switch { - default: - goto yyrule9 - case c == '.': - goto yystate18 - case c == '8' || c == '9': - goto yystate29 - case c == 'E' || c == 'e': - goto yystate19 - case c >= '0' && c <= '7': - goto yystate28 - } - -yystate29: - c = l.next() - switch { - default: - goto yyabort - case c == '.': - goto yystate18 - case c == 'E' || c == 'e': - goto yystate19 - case c >= '0' && c <= '9': - goto yystate29 - } - -yystate30: - c = l.next() - switch { - default: - goto yyabort - case c == '0' || c == '1': - goto yystate31 - } - -yystate31: - c = l.next() - switch { - default: - goto yyrule12 - case c == '0' || c == '1': - goto yystate31 - } - -yystate32: - c = l.next() - switch { - default: - goto yyabort - case c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f': - goto yystate33 - } - -yystate33: - c = l.next() - switch { - default: - goto yyrule11 - case c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f': - goto yystate33 - } - -yystate34: - c = l.next() - switch { - default: - goto yyrule9 - case c == '.': - goto yystate18 - case c == 'E' || c == 'e': - goto yystate19 - case c >= '0' && c <= '9': - goto yystate35 - } - -yystate35: - c = l.next() - switch { - default: - goto yyrule9 - case c == '.': - goto yystate18 - case c == 'E' || c == 'e': - goto yystate19 - case c >= '0' && c <= '9': - goto yystate35 - } - -yystate36: - c = l.next() - switch { - default: - goto yyrule319 - case c == '<': - goto yystate37 - case c == '=': - goto yystate38 - case c == '>': - goto yystate40 - } - -yystate37: - c = l.next() - goto yyrule29 - -yystate38: - c = l.next() - switch { - default: - goto yyrule30 - case c == '>': - goto yystate39 - } - -yystate39: - c = l.next() - goto yyrule37 - -yystate40: - c = l.next() - goto yyrule34 - -yystate41: - c = l.next() - goto yyrule31 - -yystate42: - c = l.next() - switch { - default: - goto yyrule319 - case c == '=': - goto yystate43 - case c == '>': - goto yystate44 - } - -yystate43: - c = l.next() - goto yyrule32 - -yystate44: - c = l.next() - goto yyrule36 - -yystate45: - c = l.next() - goto yyrule39 - -yystate46: - c = l.next() - switch { - default: - goto yyrule38 - case c == '@': - goto yystate47 - case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate64 - } - -yystate47: - c = l.next() - switch { - default: - goto yyabort - case c == 'G' || c == 'g': - goto yystate49 - case c == 'L' || c == 'l': - goto yystate56 - case c == 'S' || c == 's': - goto yystate58 - case c >= 'A' && c <= 'F' || c >= 'H' && c <= 'K' || c >= 'M' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'k' || c >= 'm' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate48 - } - -yystate48: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate48 - } - -yystate49: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate48 - case c == 'L' || c == 'l': - goto yystate50 - } - -yystate50: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate48 - case c == 'O' || c == 'o': - goto yystate51 - } - -yystate51: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate48 - case c == 'B' || c == 'b': - goto yystate52 - } - -yystate52: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate48 - case c == 'A' || c == 'a': - goto yystate53 - } - -yystate53: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate48 - case c == 'L' || c == 'l': - goto yystate54 - } - -yystate54: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate48 - case c == '.': - goto yystate55 - } - -yystate55: - c = l.next() - switch { - default: - goto yyabort - case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate48 - } - -yystate56: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate48 - case c == 'O' || c == 'o': - goto yystate57 - } - -yystate57: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate48 - case c == 'C' || c == 'c': - goto yystate52 - } - -yystate58: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate48 - case c == 'E' || c == 'e': - goto yystate59 - } - -yystate59: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate48 - case c == 'S' || c == 's': - goto yystate60 - } - -yystate60: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate48 - case c == 'S' || c == 's': - goto yystate61 - } - -yystate61: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate48 - case c == 'I' || c == 'i': - goto yystate62 - } - -yystate62: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate48 - case c == 'O' || c == 'o': - goto yystate63 - } - -yystate63: - c = l.next() - switch { - default: - goto yyrule224 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate48 - case c == 'N' || c == 'n': - goto yystate54 - } - -yystate64: - c = l.next() - switch { - default: - goto yyrule225 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate64 - } - -yystate65: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'C' || c == 'E' || c >= 'G' && c <= 'K' || c == 'M' || c >= 'O' && c <= 'R' || c == 'T' || c >= 'W' && c <= 'Z' || c == '_' || c == 'a' || c == 'c' || c == 'e' || c >= 'g' && c <= 'k' || c == 'm' || c >= 'o' && c <= 'r' || c == 't' || c >= 'w' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate67 - case c == 'D' || c == 'd': - goto yystate69 - case c == 'F' || c == 'f': - goto yystate78 - case c == 'L' || c == 'l': - goto yystate82 - case c == 'N' || c == 'n': - goto yystate87 - case c == 'S' || c == 's': - goto yystate90 - case c == 'U' || c == 'u': - goto yystate92 - case c == 'V' || c == 'v': - goto yystate105 - } - -yystate66: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate67: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate68 - } - -yystate68: - c = l.next() - switch { - default: - goto yyrule40 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate69: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate70 - case c == 'M' || c == 'm': - goto yystate75 - } - -yystate70: - c = l.next() - switch { - default: - goto yyrule41 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate71 - } - -yystate71: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate72 - } - -yystate72: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate73 - } - -yystate73: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate74 - } - -yystate74: - c = l.next() - switch { - default: - goto yyrule42 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate75: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate76 - } - -yystate76: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate77 - } - -yystate77: - c = l.next() - switch { - default: - goto yyrule43 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate78: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate79 - } - -yystate79: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate80 - } - -yystate80: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate81 - } - -yystate81: - c = l.next() - switch { - default: - goto yyrule44 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate82: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate83 - case c == 'T' || c == 't': - goto yystate84 - } - -yystate83: - c = l.next() - switch { - default: - goto yyrule45 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate84: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate85 - } - -yystate85: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate86 - } - -yystate86: - c = l.next() - switch { - default: - goto yyrule46 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate87: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate88 - case c == 'Y' || c == 'y': - goto yystate89 - } - -yystate88: - c = l.next() - switch { - default: - goto yyrule47 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate89: - c = l.next() - switch { - default: - goto yyrule48 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate90: - c = l.next() - switch { - default: - goto yyrule50 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate91 - } - -yystate91: - c = l.next() - switch { - default: - goto yyrule49 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate92: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate93 - } - -yystate93: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate94 - } - -yystate94: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate95 - } - -yystate95: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate96 - } - -yystate96: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate97 - } - -yystate97: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate98 - } - -yystate98: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate99 - } - -yystate99: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate100 - } - -yystate100: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate101 - } - -yystate101: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate102 - } - -yystate102: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate103 - } - -yystate103: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate104 - } - -yystate104: - c = l.next() - switch { - default: - goto yyrule51 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate105: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate106 - } - -yystate106: - c = l.next() - switch { - default: - goto yyrule52 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate107 - } - -yystate107: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate108 - } - -yystate108: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate109 - } - -yystate109: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate110 - } - -yystate110: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate111 - } - -yystate111: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate112 - } - -yystate112: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate113 - } - -yystate113: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate114 - } - -yystate114: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate115 - } - -yystate115: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate116 - } - -yystate116: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate117 - } - -yystate117: - c = l.next() - switch { - default: - goto yyrule53 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate118: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'H' || c == 'J' || c == 'K' || c == 'M' || c == 'N' || c >= 'P' && c <= 'S' || c >= 'U' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'h' || c == 'j' || c == 'k' || c == 'm' || c == 'n' || c >= 'p' && c <= 's' || c >= 'u' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate122 - case c == 'I' || c == 'i': - goto yystate131 - case c == 'L' || c == 'l': - goto yystate141 - case c == 'O' || c == 'o': - goto yystate144 - case c == 'T' || c == 't': - goto yystate152 - case c == 'Y' || c == 'y': - goto yystate156 - case c == '\'': - goto yystate119 - } - -yystate119: - c = l.next() - switch { - default: - goto yyabort - case c == '0' || c == '1': - goto yystate120 - } - -yystate120: - c = l.next() - switch { - default: - goto yyabort - case c == '0' || c == '1': - goto yystate120 - case c == '\'': - goto yystate121 - } - -yystate121: - c = l.next() - goto yyrule12 - -yystate122: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate123 - case c == 'T' || c == 't': - goto yystate126 - } - -yystate123: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate124 - } - -yystate124: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate125 - } - -yystate125: - c = l.next() - switch { - default: - goto yyrule54 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate126: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate127 - } - -yystate127: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate128 - } - -yystate128: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate129 - } - -yystate129: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate130 - } - -yystate130: - c = l.next() - switch { - default: - goto yyrule55 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate131: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'M' || c >= 'O' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'm' || c >= 'o' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate132 - case c == 'N' || c == 'n': - goto yystate136 - case c == 'T' || c == 't': - goto yystate140 - } - -yystate132: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate133 - } - -yystate133: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate134 - } - -yystate134: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate135 - } - -yystate135: - c = l.next() - switch { - default: - goto yyrule289 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate136: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate137 - } - -yystate137: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate138 - } - -yystate138: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate139 - } - -yystate139: - c = l.next() - switch { - default: - goto yyrule303 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate140: - c = l.next() - switch { - default: - goto yyrule284 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate141: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate142 - } - -yystate142: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate143 - } - -yystate143: - c = l.next() - switch { - default: - goto yyrule306 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate144: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate145 - case c == 'T' || c == 't': - goto yystate150 - } - -yystate145: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate146 - } - -yystate146: - c = l.next() - switch { - default: - goto yyrule313 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate147 - } - -yystate147: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate148 - } - -yystate148: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate149 - } - -yystate149: - c = l.next() - switch { - default: - goto yyrule314 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate150: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate151 - } - -yystate151: - c = l.next() - switch { - default: - goto yyrule56 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate152: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate153 - } - -yystate153: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate154 - } - -yystate154: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate155 - } - -yystate155: - c = l.next() - switch { - default: - goto yyrule57 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate156: - c = l.next() - switch { - default: - goto yyrule58 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate157 - } - -yystate157: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate158 - } - -yystate158: - c = l.next() - switch { - default: - goto yyrule315 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate159: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'G' || c >= 'I' && c <= 'N' || c == 'P' || c == 'Q' || c == 'S' || c == 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'g' || c >= 'i' && c <= 'n' || c == 'p' || c == 'q' || c == 's' || c == 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate160 - case c == 'H' || c == 'h': - goto yystate164 - case c == 'O' || c == 'o': - goto yystate181 - case c == 'R' || c == 'r': - goto yystate254 - case c == 'U' || c == 'u': - goto yystate262 - } - -yystate160: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate161 - } - -yystate161: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate162 - case c == 'T' || c == 't': - goto yystate163 - } - -yystate162: - c = l.next() - switch { - default: - goto yyrule59 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate163: - c = l.next() - switch { - default: - goto yyrule60 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate164: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate165 - case c == 'E' || c == 'e': - goto yystate175 - } - -yystate165: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate166 - } - -yystate166: - c = l.next() - switch { - default: - goto yyrule301 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate167 - case c == 'S' || c == 's': - goto yystate172 - } - -yystate167: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate168 - } - -yystate168: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate169 - } - -yystate169: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate170 - } - -yystate170: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate171 - } - -yystate171: - c = l.next() - switch { - default: - goto yyrule61 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate172: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate173 - } - -yystate173: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate174 - } - -yystate174: - c = l.next() - switch { - default: - goto yyrule62 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate175: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate176 - } - -yystate176: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate177 - } - -yystate177: - c = l.next() - switch { - default: - goto yyrule63 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate178 - } - -yystate178: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate179 - } - -yystate179: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate180 - } - -yystate180: - c = l.next() - switch { - default: - goto yyrule64 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate181: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'K' || c >= 'O' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'k' || c >= 'o' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate182 - case c == 'L' || c == 'l': - goto yystate188 - case c == 'M' || c == 'm': - goto yystate200 - case c == 'N' || c == 'n': - goto yystate223 - case c == 'U' || c == 'u': - goto yystate251 - } - -yystate182: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate183 - } - -yystate183: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate184 - } - -yystate184: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate185 - } - -yystate185: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate186 - } - -yystate186: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate187 - } - -yystate187: - c = l.next() - switch { - default: - goto yyrule65 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate188: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate189 - case c == 'U' || c == 'u': - goto yystate196 - } - -yystate189: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate190 - } - -yystate190: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate191 - } - -yystate191: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate192 - case c == 'I' || c == 'i': - goto yystate193 - } - -yystate192: - c = l.next() - switch { - default: - goto yyrule66 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate193: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate194 - } - -yystate194: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate195 - } - -yystate195: - c = l.next() - switch { - default: - goto yyrule67 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate196: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate197 - } - -yystate197: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate198 - } - -yystate198: - c = l.next() - switch { - default: - goto yyrule68 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate199 - } - -yystate199: - c = l.next() - switch { - default: - goto yyrule69 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate200: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c == 'N' || c == 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c == 'n' || c == 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate201 - case c == 'P' || c == 'p': - goto yystate210 - } - -yystate201: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate202 - case c == 'I' || c == 'i': - goto yystate205 - } - -yystate202: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate203 - } - -yystate203: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate204 - } - -yystate204: - c = l.next() - switch { - default: - goto yyrule70 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate205: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate206 - } - -yystate206: - c = l.next() - switch { - default: - goto yyrule71 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate207 - } - -yystate207: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate208 - } - -yystate208: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate209 - } - -yystate209: - c = l.next() - switch { - default: - goto yyrule72 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate210: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate211 - case c == 'R' || c == 'r': - goto yystate214 - } - -yystate211: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate212 - } - -yystate212: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate213 - } - -yystate213: - c = l.next() - switch { - default: - goto yyrule73 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate214: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate215 - } - -yystate215: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate216 - } - -yystate216: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate217 - } - -yystate217: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate218 - case c == 'I' || c == 'i': - goto yystate220 - } - -yystate218: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate219 - } - -yystate219: - c = l.next() - switch { - default: - goto yyrule74 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate220: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate221 - } - -yystate221: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate222 - } - -yystate222: - c = l.next() - switch { - default: - goto yyrule75 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate223: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'M' || c >= 'O' && c <= 'R' || c == 'T' || c == 'U' || c >= 'W' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'm' || c >= 'o' && c <= 'r' || c == 't' || c == 'u' || c >= 'w' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate224 - case c == 'N' || c == 'n': - goto yystate230 - case c == 'S' || c == 's': - goto yystate240 - case c == 'V' || c == 'v': - goto yystate247 - } - -yystate224: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate225 - } - -yystate225: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate226 - } - -yystate226: - c = l.next() - switch { - default: - goto yyrule76 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate227 - } - -yystate227: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate228 - } - -yystate228: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate229 - } - -yystate229: - c = l.next() - switch { - default: - goto yyrule77 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate230: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate231 - } - -yystate231: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate232 - } - -yystate232: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate233 - } - -yystate233: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate234 - } - -yystate234: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate235 - } - -yystate235: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate236 - } - -yystate236: - c = l.next() - switch { - default: - goto yyrule78 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate237 - } - -yystate237: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate238 - } - -yystate238: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate239 - } - -yystate239: - c = l.next() - switch { - default: - goto yyrule79 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate240: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate241 - } - -yystate241: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate242 - } - -yystate242: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate243 - } - -yystate243: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate244 - } - -yystate244: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate245 - } - -yystate245: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate246 - } - -yystate246: - c = l.next() - switch { - default: - goto yyrule80 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate247: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate248 - } - -yystate248: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate249 - } - -yystate249: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate250 - } - -yystate250: - c = l.next() - switch { - default: - goto yyrule81 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate251: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate252 - } - -yystate252: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate253 - } - -yystate253: - c = l.next() - switch { - default: - goto yyrule82 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate254: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate255 - case c == 'O' || c == 'o': - goto yystate259 - } - -yystate255: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate256 - } - -yystate256: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate257 - } - -yystate257: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate258 - } - -yystate258: - c = l.next() - switch { - default: - goto yyrule83 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate259: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate260 - } - -yystate260: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate261 - } - -yystate261: - c = l.next() - switch { - default: - goto yyrule84 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate262: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate263 - } - -yystate263: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Q' || c == 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'q' || c == 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate264 - case c == 'R' || c == 'r': - goto yystate268 - case c == 'T' || c == 't': - goto yystate290 - } - -yystate264: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate265 - } - -yystate265: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate266 - } - -yystate266: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate267 - } - -yystate267: - c = l.next() - switch { - default: - goto yyrule85 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate268: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate269 - } - -yystate269: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate270 - } - -yystate270: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate271 - } - -yystate271: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate272 - } - -yystate272: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'S' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 's' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate273 - case c == 'T' || c == 't': - goto yystate277 - case c == 'U' || c == 'u': - goto yystate286 - } - -yystate273: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate274 - } - -yystate274: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate275 - } - -yystate275: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate276 - } - -yystate276: - c = l.next() - switch { - default: - goto yyrule86 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate277: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate278 - } - -yystate278: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate279 - } - -yystate279: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate280 - } - -yystate280: - c = l.next() - switch { - default: - goto yyrule88 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate281 - } - -yystate281: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate282 - } - -yystate282: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate283 - } - -yystate283: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate284 - } - -yystate284: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate285 - } - -yystate285: - c = l.next() - switch { - default: - goto yyrule280 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate286: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate287 - } - -yystate287: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate288 - } - -yystate288: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate289 - } - -yystate289: - c = l.next() - switch { - default: - goto yyrule89 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate290: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate291 - } - -yystate291: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate292 - } - -yystate292: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate293 - } - -yystate293: - c = l.next() - switch { - default: - goto yyrule87 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate294: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'B' || c == 'C' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'N' || c == 'P' || c == 'Q' || c == 'S' || c == 'T' || c >= 'V' && c <= 'X' || c == 'Z' || c == '_' || c == 'b' || c == 'c' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'n' || c == 'p' || c == 'q' || c == 's' || c == 't' || c >= 'v' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate295 - case c == 'D' || c == 'd': - goto yystate361 - case c == 'E' || c == 'e': - goto yystate363 - case c == 'I' || c == 'i': - goto yystate406 - case c == 'O' || c == 'o': - goto yystate414 - case c == 'R' || c == 'r': - goto yystate419 - case c == 'U' || c == 'u': - goto yystate422 - case c == 'Y' || c == 'y': - goto yystate432 - } - -yystate295: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate296 - case c == 'Y' || c == 'y': - goto yystate315 - } - -yystate296: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate297 - case c == 'E' || c == 'e': - goto yystate303 - } - -yystate297: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate298 - } - -yystate298: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate299 - } - -yystate299: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate300 - } - -yystate300: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate301 - } - -yystate301: - c = l.next() - switch { - default: - goto yyrule90 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate302 - } - -yystate302: - c = l.next() - switch { - default: - goto yyrule91 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate303: - c = l.next() - switch { - default: - goto yyrule296 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate304 - case c == '_': - goto yystate308 - } - -yystate304: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate305 - } - -yystate305: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate306 - } - -yystate306: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate307 - } - -yystate307: - c = l.next() - switch { - default: - goto yyrule299 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate308: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate309 - case c == 'S' || c == 's': - goto yystate312 - } - -yystate309: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate310 - } - -yystate310: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate311 - } - -yystate311: - c = l.next() - switch { - default: - goto yyrule92 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate312: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate313 - } - -yystate313: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate314 - } - -yystate314: - c = l.next() - switch { - default: - goto yyrule93 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate315: - c = l.next() - switch { - default: - goto yyrule94 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'P' && c <= 'Z' || c >= 'a' && c <= 'm' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate316 - case c == 'O' || c == 'o': - goto yystate320 - case c == '_': - goto yystate335 - } - -yystate316: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate317 - } - -yystate317: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate318 - } - -yystate318: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate319 - } - -yystate319: - c = l.next() - switch { - default: - goto yyrule95 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate320: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate321 - } - -yystate321: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'V' || c == 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'v' || c == 'x' || c == 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate322 - case c == 'W' || c == 'w': - goto yystate327 - case c == 'Y' || c == 'y': - goto yystate331 - } - -yystate322: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate323 - } - -yystate323: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate324 - } - -yystate324: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate325 - } - -yystate325: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate326 - } - -yystate326: - c = l.next() - switch { - default: - goto yyrule97 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate327: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate328 - } - -yystate328: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate329 - } - -yystate329: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate330 - } - -yystate330: - c = l.next() - switch { - default: - goto yyrule96 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate331: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate332 - } - -yystate332: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate333 - } - -yystate333: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate334 - } - -yystate334: - c = l.next() - switch { - default: - goto yyrule98 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate335: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'L' || c >= 'N' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'l' || c >= 'n' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate336 - case c == 'M' || c == 'm': - goto yystate340 - case c == 'S' || c == 's': - goto yystate355 - } - -yystate336: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate337 - } - -yystate337: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate338 - } - -yystate338: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate339 - } - -yystate339: - c = l.next() - switch { - default: - goto yyrule99 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate340: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate341 - } - -yystate341: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate342 - case c == 'N' || c == 'n': - goto yystate351 - } - -yystate342: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate343 - } - -yystate343: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate344 - } - -yystate344: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate345 - } - -yystate345: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate346 - } - -yystate346: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate347 - } - -yystate347: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate348 - } - -yystate348: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate349 - } - -yystate349: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate350 - } - -yystate350: - c = l.next() - switch { - default: - goto yyrule100 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate351: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate352 - } - -yystate352: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate353 - } - -yystate353: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate354 - } - -yystate354: - c = l.next() - switch { - default: - goto yyrule101 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate355: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate356 - } - -yystate356: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate357 - } - -yystate357: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate358 - } - -yystate358: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate359 - } - -yystate359: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate360 - } - -yystate360: - c = l.next() - switch { - default: - goto yyrule102 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate361: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate362 - } - -yystate362: - c = l.next() - switch { - default: - goto yyrule103 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate363: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'B' || c == 'D' || c == 'E' || c >= 'G' && c <= 'K' || c >= 'M' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c == 'b' || c == 'd' || c == 'e' || c >= 'g' && c <= 'k' || c >= 'm' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate364 - case c == 'C' || c == 'c': - goto yystate372 - case c == 'F' || c == 'f': - goto yystate377 - case c == 'L' || c == 'l': - goto yystate382 - case c == 'S' || c == 's': - goto yystate400 - } - -yystate364: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate365 - } - -yystate365: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate366 - } - -yystate366: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate367 - } - -yystate367: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate368 - } - -yystate368: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate369 - } - -yystate369: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate370 - } - -yystate370: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate371 - } - -yystate371: - c = l.next() - switch { - default: - goto yyrule104 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate372: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate373 - } - -yystate373: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate374 - } - -yystate374: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate375 - } - -yystate375: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate376 - } - -yystate376: - c = l.next() - switch { - default: - goto yyrule290 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate377: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate378 - } - -yystate378: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate379 - } - -yystate379: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate380 - } - -yystate380: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate381 - } - -yystate381: - c = l.next() - switch { - default: - goto yyrule105 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate382: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate383 - case c == 'E' || c == 'e': - goto yystate397 - } - -yystate383: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate384 - } - -yystate384: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate385 - case c == '_': - goto yystate387 - } - -yystate385: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate386 - } - -yystate386: - c = l.next() - switch { - default: - goto yyrule106 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate387: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate388 - } - -yystate388: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate389 - } - -yystate389: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate390 - } - -yystate390: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate391 - } - -yystate391: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate392 - } - -yystate392: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate393 - } - -yystate393: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate394 - } - -yystate394: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate395 - } - -yystate395: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate396 - } - -yystate396: - c = l.next() - switch { - default: - goto yyrule107 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate397: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate398 - } - -yystate398: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate399 - } - -yystate399: - c = l.next() - switch { - default: - goto yyrule108 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate400: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate401 - } - -yystate401: - c = l.next() - switch { - default: - goto yyrule109 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate402 - } - -yystate402: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate403 - } - -yystate403: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate404 - } - -yystate404: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate405 - } - -yystate405: - c = l.next() - switch { - default: - goto yyrule110 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate406: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c == 'T' || c == 'U' || c >= 'W' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c == 't' || c == 'u' || c >= 'w' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate407 - case c == 'V' || c == 'v': - goto yystate413 - } - -yystate407: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate408 - } - -yystate408: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate409 - } - -yystate409: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate410 - } - -yystate410: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate411 - } - -yystate411: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate412 - } - -yystate412: - c = l.next() - switch { - default: - goto yyrule112 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate413: - c = l.next() - switch { - default: - goto yyrule113 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate414: - c = l.next() - switch { - default: - goto yyrule114 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate415 - } - -yystate415: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate416 - } - -yystate416: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate417 - } - -yystate417: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate418 - } - -yystate418: - c = l.next() - switch { - default: - goto yyrule293 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate419: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate420 - } - -yystate420: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate421 - } - -yystate421: - c = l.next() - switch { - default: - goto yyrule111 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate422: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate423 - case c == 'P' || c == 'p': - goto yystate425 - } - -yystate423: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate424 - } - -yystate424: - c = l.next() - switch { - default: - goto yyrule115 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate425: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate426 - } - -yystate426: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate427 - } - -yystate427: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate428 - } - -yystate428: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate429 - } - -yystate429: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate430 - } - -yystate430: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate431 - } - -yystate431: - c = l.next() - switch { - default: - goto yyrule116 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate432: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate433 - } - -yystate433: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate434 - } - -yystate434: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate435 - } - -yystate435: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate436 - } - -yystate436: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate437 - } - -yystate437: - c = l.next() - switch { - default: - goto yyrule117 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate438: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c == 'M' || c >= 'O' && c <= 'R' || c >= 'T' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'k' || c == 'm' || c >= 'o' && c <= 'r' || c >= 't' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate439 - case c == 'N' || c == 'n': - goto yystate442 - case c == 'S' || c == 's': - goto yystate451 - case c == 'X' || c == 'x': - goto yystate456 - } - -yystate439: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate440 - } - -yystate440: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate441 - } - -yystate441: - c = l.next() - switch { - default: - goto yyrule118 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate442: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c == 'E' || c == 'F' || c >= 'H' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c == 'e' || c == 'f' || c >= 'h' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate443 - case c == 'G' || c == 'g': - goto yystate444 - case c == 'U' || c == 'u': - goto yystate449 - } - -yystate443: - c = l.next() - switch { - default: - goto yyrule119 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate444: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate445 - } - -yystate445: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate446 - } - -yystate446: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate447 - } - -yystate447: - c = l.next() - switch { - default: - goto yyrule120 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate448 - } - -yystate448: - c = l.next() - switch { - default: - goto yyrule121 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate449: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate450 - } - -yystate450: - c = l.next() - switch { - default: - goto yyrule123 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate451: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate452 - } - -yystate452: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate453 - } - -yystate453: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate454 - } - -yystate454: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate455 - } - -yystate455: - c = l.next() - switch { - default: - goto yyrule124 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate456: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'O' || c >= 'Q' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'o' || c >= 'q' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate457 - case c == 'I' || c == 'i': - goto yystate462 - case c == 'P' || c == 'p': - goto yystate466 - case c == 'T' || c == 't': - goto yystate471 - } - -yystate457: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate458 - } - -yystate458: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate459 - } - -yystate459: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate460 - } - -yystate460: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate461 - } - -yystate461: - c = l.next() - switch { - default: - goto yyrule122 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate462: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate463 - } - -yystate463: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate464 - } - -yystate464: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate465 - } - -yystate465: - c = l.next() - switch { - default: - goto yyrule125 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate466: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate467 - } - -yystate467: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate468 - } - -yystate468: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate469 - } - -yystate469: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate470 - } - -yystate470: - c = l.next() - switch { - default: - goto yyrule126 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate471: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate472 - } - -yystate472: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate473 - } - -yystate473: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate474 - } - -yystate474: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate475 - } - -yystate475: - c = l.next() - switch { - default: - goto yyrule127 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate476: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'H' || c == 'J' || c == 'K' || c == 'M' || c == 'N' || c == 'P' || c == 'Q' || c == 'S' || c == 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'h' || c == 'j' || c == 'k' || c == 'm' || c == 'n' || c == 'p' || c == 'q' || c == 's' || c == 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate477 - case c == 'I' || c == 'i': - goto yystate481 - case c == 'L' || c == 'l': - goto yystate492 - case c == 'O' || c == 'o': - goto yystate496 - case c == 'R' || c == 'r': - goto yystate510 - case c == 'U' || c == 'u': - goto yystate513 - } - -yystate477: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate478 - } - -yystate478: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate479 - } - -yystate479: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate480 - } - -yystate480: - c = l.next() - switch { - default: - goto yyrule277 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate481: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Q' || c >= 'S' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'q' || c >= 's' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate482 - case c == 'R' || c == 'r': - goto yystate486 - case c == 'X' || c == 'x': - goto yystate489 - } - -yystate482: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate483 - } - -yystate483: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate484 - } - -yystate484: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate485 - } - -yystate485: - c = l.next() - switch { - default: - goto yyrule128 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate486: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate487 - } - -yystate487: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate488 - } - -yystate488: - c = l.next() - switch { - default: - goto yyrule129 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate489: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate490 - } - -yystate490: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate491 - } - -yystate491: - c = l.next() - switch { - default: - goto yyrule130 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate492: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate493 - } - -yystate493: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate494 - } - -yystate494: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate495 - } - -yystate495: - c = l.next() - switch { - default: - goto yyrule292 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate496: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c == 'S' || c == 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c == 's' || c == 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate497 - case c == 'U' || c == 'u': - goto yystate502 - } - -yystate497: - c = l.next() - switch { - default: - goto yyrule131 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate498 - } - -yystate498: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate499 - } - -yystate499: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate500 - } - -yystate500: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate501 - } - -yystate501: - c = l.next() - switch { - default: - goto yyrule132 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate502: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate503 - } - -yystate503: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate504 - } - -yystate504: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate505 - } - -yystate505: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate506 - } - -yystate506: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate507 - } - -yystate507: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate508 - } - -yystate508: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate509 - } - -yystate509: - c = l.next() - switch { - default: - goto yyrule133 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate510: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate511 - } - -yystate511: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate512 - } - -yystate512: - c = l.next() - switch { - default: - goto yyrule134 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate513: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate514 - } - -yystate514: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate515 - } - -yystate515: - c = l.next() - switch { - default: - goto yyrule135 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate516 - } - -yystate516: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate517 - } - -yystate517: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate518 - } - -yystate518: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate519 - } - -yystate519: - c = l.next() - switch { - default: - goto yyrule136 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate520: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate521 - case c == 'R' || c == 'r': - goto yystate526 - } - -yystate521: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate522 - } - -yystate522: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate523 - } - -yystate523: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate524 - } - -yystate524: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate525 - } - -yystate525: - c = l.next() - switch { - default: - goto yyrule215 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate526: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate527 - case c == 'O' || c == 'o': - goto yystate531 - } - -yystate527: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate528 - } - -yystate528: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate529 - } - -yystate529: - c = l.next() - switch { - default: - goto yyrule137 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate530 - } - -yystate530: - c = l.next() - switch { - default: - goto yyrule138 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate531: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate532 - } - -yystate532: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate533 - } - -yystate533: - c = l.next() - switch { - default: - goto yyrule139 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate534 - } - -yystate534: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate535 - } - -yystate535: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate536 - } - -yystate536: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate537 - } - -yystate537: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate538 - } - -yystate538: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate539 - } - -yystate539: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate540 - } - -yystate540: - c = l.next() - switch { - default: - goto yyrule140 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate541: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'H' || c >= 'J' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'h' || c >= 'j' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate542 - case c == 'I' || c == 'i': - goto yystate549 - case c == 'O' || c == 'o': - goto yystate561 - } - -yystate542: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c == 'T' || c == 'U' || c >= 'W' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c == 't' || c == 'u' || c >= 'w' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate543 - case c == 'V' || c == 'v': - goto yystate545 - } - -yystate543: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate544 - } - -yystate544: - c = l.next() - switch { - default: - goto yyrule141 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate545: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate546 - } - -yystate546: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate547 - } - -yystate547: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate548 - } - -yystate548: - c = l.next() - switch { - default: - goto yyrule142 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate549: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate550 - } - -yystate550: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate551 - } - -yystate551: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate552 - } - -yystate552: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate553 - } - -yystate553: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate554 - } - -yystate554: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate555 - } - -yystate555: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate556 - } - -yystate556: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate557 - } - -yystate557: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate558 - } - -yystate558: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate559 - } - -yystate559: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate560 - } - -yystate560: - c = l.next() - switch { - default: - goto yyrule143 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate561: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate562 - } - -yystate562: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate563 - } - -yystate563: - c = l.next() - switch { - default: - goto yyrule144 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate564 - } - -yystate564: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate565 - case c == 'S' || c == 's': - goto yystate580 - } - -yystate565: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate566 - } - -yystate566: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate567 - case c == 'N' || c == 'n': - goto yystate576 - } - -yystate567: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate568 - } - -yystate568: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate569 - } - -yystate569: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate570 - } - -yystate570: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate571 - } - -yystate571: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate572 - } - -yystate572: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate573 - } - -yystate573: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate574 - } - -yystate574: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate575 - } - -yystate575: - c = l.next() - switch { - default: - goto yyrule145 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate576: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate577 - } - -yystate577: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate578 - } - -yystate578: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate579 - } - -yystate579: - c = l.next() - switch { - default: - goto yyrule146 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate580: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate581 - } - -yystate581: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate582 - } - -yystate582: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate583 - } - -yystate583: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate584 - } - -yystate584: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate585 - } - -yystate585: - c = l.next() - switch { - default: - goto yyrule147 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate586: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c == 'E' || c >= 'H' && c <= 'M' || c >= 'O' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c == 'e' || c >= 'h' && c <= 'm' || c >= 'o' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate587 - case c == 'F' || c == 'f': - goto yystate596 - case c == 'G' || c == 'g': - goto yystate601 - case c == 'N' || c == 'n': - goto yystate606 - case c == 'S' || c == 's': - goto yystate627 - } - -yystate587: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate588 - } - -yystate588: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate589 - } - -yystate589: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate590 - } - -yystate590: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate591 - } - -yystate591: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate592 - } - -yystate592: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate593 - } - -yystate593: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate594 - } - -yystate594: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate595 - } - -yystate595: - c = l.next() - switch { - default: - goto yyrule148 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate596: - c = l.next() - switch { - default: - goto yyrule149 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate597 - } - -yystate597: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate598 - } - -yystate598: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate599 - } - -yystate599: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate600 - } - -yystate600: - c = l.next() - switch { - default: - goto yyrule150 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate601: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate602 - } - -yystate602: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate603 - } - -yystate603: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate604 - } - -yystate604: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate605 - } - -yystate605: - c = l.next() - switch { - default: - goto yyrule151 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate606: - c = l.next() - switch { - default: - goto yyrule157 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'M' || c >= 'O' && c <= 'R' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'm' || c >= 'o' && c <= 'r' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate607 - case c == 'N' || c == 'n': - goto yystate610 - case c == 'S' || c == 's': - goto yystate613 - case c == 'T' || c == 't': - goto yystate617 - } - -yystate607: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate608 - } - -yystate608: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate609 - } - -yystate609: - c = l.next() - switch { - default: - goto yyrule152 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate610: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate611 - } - -yystate611: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate612 - } - -yystate612: - c = l.next() - switch { - default: - goto yyrule153 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate613: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate614 - } - -yystate614: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate615 - } - -yystate615: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate616 - } - -yystate616: - c = l.next() - switch { - default: - goto yyrule154 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate617: - c = l.next() - switch { - default: - goto yyrule316 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate618 - case c == 'O' || c == 'o': - goto yystate626 - } - -yystate618: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate619 - case c == 'R' || c == 'r': - goto yystate622 - } - -yystate619: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate620 - } - -yystate620: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate621 - } - -yystate621: - c = l.next() - switch { - default: - goto yyrule317 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate622: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'U' || c >= 'W' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'u' || c >= 'w' && c <= 'z': - goto yystate66 - case c == 'V' || c == 'v': - goto yystate623 - } - -yystate623: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate624 - } - -yystate624: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate625 - } - -yystate625: - c = l.next() - switch { - default: - goto yyrule155 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate626: - c = l.next() - switch { - default: - goto yyrule156 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate627: - c = l.next() - switch { - default: - goto yyrule158 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate628 - } - -yystate628: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate629 - } - -yystate629: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate630 - } - -yystate630: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate631 - } - -yystate631: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate632 - } - -yystate632: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate633 - } - -yystate633: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate634 - } - -yystate634: - c = l.next() - switch { - default: - goto yyrule159 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate635: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate636 - } - -yystate636: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate637 - } - -yystate637: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate638 - } - -yystate638: - c = l.next() - switch { - default: - goto yyrule160 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate639: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate640 - } - -yystate640: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate641 - } - -yystate641: - c = l.next() - switch { - default: - goto yyrule161 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate642 - } - -yystate642: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate643 - } - -yystate643: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate644 - } - -yystate644: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate645 - } - -yystate645: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate646 - } - -yystate646: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate647 - } - -yystate647: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate648 - } - -yystate648: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate649 - } - -yystate649: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate650 - } - -yystate650: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Y' || c == '_' || c >= 'a' && c <= 'y': - goto yystate66 - case c == 'Z' || c == 'z': - goto yystate651 - } - -yystate651: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate652 - } - -yystate652: - c = l.next() - switch { - default: - goto yyrule162 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate653: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate654 - case c == 'I' || c == 'i': - goto yystate669 - case c == 'O' || c == 'o': - goto yystate675 - } - -yystate654: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'E' || c >= 'G' && c <= 'M' || c >= 'O' && c <= 'U' || c >= 'W' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'e' || c >= 'g' && c <= 'm' || c >= 'o' && c <= 'u' || c >= 'w' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate655 - case c == 'F' || c == 'f': - goto yystate660 - case c == 'N' || c == 'n': - goto yystate662 - case c == 'V' || c == 'v': - goto yystate666 - } - -yystate655: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate656 - } - -yystate656: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate657 - } - -yystate657: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate658 - } - -yystate658: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate659 - } - -yystate659: - c = l.next() - switch { - default: - goto yyrule163 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate660: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate661 - } - -yystate661: - c = l.next() - switch { - default: - goto yyrule164 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate662: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate663 - } - -yystate663: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate664 - } - -yystate664: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate665 - } - -yystate665: - c = l.next() - switch { - default: - goto yyrule165 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate666: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate667 - } - -yystate667: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate668 - } - -yystate668: - c = l.next() - switch { - default: - goto yyrule166 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate669: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c == 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c == 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate670 - case c == 'M' || c == 'm': - goto yystate672 - } - -yystate670: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate671 - } - -yystate671: - c = l.next() - switch { - default: - goto yyrule167 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate672: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate673 - } - -yystate673: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate674 - } - -yystate674: - c = l.next() - switch { - default: - goto yyrule168 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate675: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'M' || c >= 'O' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'm' || c >= 'o' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate676 - case c == 'N' || c == 'n': - goto yystate691 - case c == 'W' || c == 'w': - goto yystate701 - } - -yystate676: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate677 - case c == 'K' || c == 'k': - goto yystate690 - } - -yystate677: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate678 - case c == 'T' || c == 't': - goto yystate688 - } - -yystate678: - c = l.next() - switch { - default: - goto yyrule169 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate679 - } - -yystate679: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate680 - } - -yystate680: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate681 - } - -yystate681: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate682 - } - -yystate682: - c = l.next() - switch { - default: - goto yyrule281 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate683 - } - -yystate683: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate684 - } - -yystate684: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate685 - } - -yystate685: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate686 - } - -yystate686: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate687 - } - -yystate687: - c = l.next() - switch { - default: - goto yyrule282 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate688: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate689 - } - -yystate689: - c = l.next() - switch { - default: - goto yyrule170 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate690: - c = l.next() - switch { - default: - goto yyrule171 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate691: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate692 - } - -yystate692: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate693 - case c == 'T' || c == 't': - goto yystate697 - } - -yystate693: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate694 - } - -yystate694: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate695 - } - -yystate695: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate696 - } - -yystate696: - c = l.next() - switch { - default: - goto yyrule308 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate697: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate698 - } - -yystate698: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate699 - } - -yystate699: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate700 - } - -yystate700: - c = l.next() - switch { - default: - goto yyrule312 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate701: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate702 - case c == '_': - goto yystate704 - } - -yystate702: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate703 - } - -yystate703: - c = l.next() - switch { - default: - goto yyrule172 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate704: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate705 - } - -yystate705: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate706 - } - -yystate706: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate707 - } - -yystate707: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate708 - } - -yystate708: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate709 - } - -yystate709: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate710 - } - -yystate710: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate711 - } - -yystate711: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate712 - } - -yystate712: - c = l.next() - switch { - default: - goto yyrule173 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate713: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate714 - case c == 'E' || c == 'e': - goto yystate721 - case c == 'I' || c == 'i': - goto yystate737 - case c == 'O' || c == 'o': - goto yystate774 - } - -yystate714: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate715 - } - -yystate715: - c = l.next() - switch { - default: - goto yyrule174 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate716 - } - -yystate716: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate717 - } - -yystate717: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate718 - } - -yystate718: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate719 - } - -yystate719: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate720 - } - -yystate720: - c = l.next() - switch { - default: - goto yyrule175 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate721: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate722 - } - -yystate722: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate723 - } - -yystate723: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate724 - } - -yystate724: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate725 - } - -yystate725: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'H' || c >= 'J' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'h' || c >= 'j' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate726 - case c == 'I' || c == 'i': - goto yystate730 - case c == 'T' || c == 't': - goto yystate733 - } - -yystate726: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate727 - } - -yystate727: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate728 - } - -yystate728: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate729 - } - -yystate729: - c = l.next() - switch { - default: - goto yyrule307 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate730: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate731 - } - -yystate731: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate732 - } - -yystate732: - c = l.next() - switch { - default: - goto yyrule288 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate733: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate734 - } - -yystate734: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate735 - } - -yystate735: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate736 - } - -yystate736: - c = l.next() - switch { - default: - goto yyrule310 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate737: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate738 - case c == 'N' || c == 'n': - goto yystate747 - } - -yystate738: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate739 - } - -yystate739: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate740 - } - -yystate740: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate741 - } - -yystate741: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate742 - } - -yystate742: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate743 - } - -yystate743: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate744 - } - -yystate744: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate745 - } - -yystate745: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate746 - } - -yystate746: - c = l.next() - switch { - default: - goto yyrule176 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate747: - c = l.next() - switch { - default: - goto yyrule177 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate748 - case c == '_': - goto yystate769 - } - -yystate748: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate749 - } - -yystate749: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate750 - } - -yystate750: - c = l.next() - switch { - default: - goto yyrule178 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate751 - } - -yystate751: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate752 - case c == 'S' || c == 's': - goto yystate763 - } - -yystate752: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate753 - } - -yystate753: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate754 - } - -yystate754: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate755 - } - -yystate755: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate756 - } - -yystate756: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate757 - } - -yystate757: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate758 - } - -yystate758: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate759 - } - -yystate759: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate760 - } - -yystate760: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate761 - } - -yystate761: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate762 - } - -yystate762: - c = l.next() - switch { - default: - goto yyrule179 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate763: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate764 - } - -yystate764: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate765 - } - -yystate765: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate766 - } - -yystate766: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate767 - } - -yystate767: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate768 - } - -yystate768: - c = l.next() - switch { - default: - goto yyrule180 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate769: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate770 - } - -yystate770: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate771 - } - -yystate771: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate772 - } - -yystate772: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate773 - } - -yystate773: - c = l.next() - switch { - default: - goto yyrule181 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate774: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate775 - case c == 'N' || c == 'n': - goto yystate777 - } - -yystate775: - c = l.next() - switch { - default: - goto yyrule182 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate776 - } - -yystate776: - c = l.next() - switch { - default: - goto yyrule183 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate777: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate778 - } - -yystate778: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate779 - } - -yystate779: - c = l.next() - switch { - default: - goto yyrule184 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate780: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'N' || c >= 'P' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'n' || c >= 'p' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate781 - case c == 'O' || c == 'o': - goto yystate791 - case c == 'U' || c == 'u': - goto yystate794 - } - -yystate781: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate782 - case c == 'T' || c == 't': - goto yystate785 - } - -yystate782: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate783 - } - -yystate783: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate784 - } - -yystate784: - c = l.next() - switch { - default: - goto yyrule185 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate785: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate786 - } - -yystate786: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate787 - } - -yystate787: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate788 - } - -yystate788: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate789 - } - -yystate789: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate790 - } - -yystate790: - c = l.next() - switch { - default: - goto yyrule186 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate791: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c == 'U' || c == 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c == 'u' || c == 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate792 - case c == 'W' || c == 'w': - goto yystate793 - } - -yystate792: - c = l.next() - switch { - default: - goto yyrule187 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate793: - c = l.next() - switch { - default: - goto yyrule283 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate794: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate795 - case c == 'M' || c == 'm': - goto yystate799 - } - -yystate795: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate796 - } - -yystate796: - c = l.next() - switch { - default: - goto yyrule276 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate797 - } - -yystate797: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate798 - } - -yystate798: - c = l.next() - switch { - default: - goto yyrule252 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate799: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate800 - } - -yystate800: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate801 - } - -yystate801: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate802 - } - -yystate802: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate803 - } - -yystate803: - c = l.next() - switch { - default: - goto yyrule291 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate804: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'M' || c == 'O' || c == 'Q' || c == 'S' || c == 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'm' || c == 'o' || c == 'q' || c == 's' || c == 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate805 - case c == 'N' || c == 'n': - goto yystate810 - case c == 'P' || c == 'p': - goto yystate813 - case c == 'R' || c == 'r': - goto yystate818 - case c == 'U' || c == 'u': - goto yystate822 - } - -yystate805: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate806 - } - -yystate806: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate807 - } - -yystate807: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate808 - } - -yystate808: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate809 - } - -yystate809: - c = l.next() - switch { - default: - goto yyrule188 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate810: - c = l.next() - switch { - default: - goto yyrule189 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate811 - } - -yystate811: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate812 - } - -yystate812: - c = l.next() - switch { - default: - goto yyrule190 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate813: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate814 - } - -yystate814: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate815 - } - -yystate815: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate816 - } - -yystate816: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate817 - } - -yystate817: - c = l.next() - switch { - default: - goto yyrule191 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate818: - c = l.next() - switch { - default: - goto yyrule193 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate819 - } - -yystate819: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate820 - } - -yystate820: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate821 - } - -yystate821: - c = l.next() - switch { - default: - goto yyrule192 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate822: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate823 - } - -yystate823: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate824 - } - -yystate824: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate825 - } - -yystate825: - c = l.next() - switch { - default: - goto yyrule194 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate826: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'N' || c == 'P' || c == 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'n' || c == 'p' || c == 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate827 - case c == 'O' || c == 'o': - goto yystate834 - case c == 'R' || c == 'r': - goto yystate838 - } - -yystate827: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate828 - } - -yystate828: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate829 - } - -yystate829: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate830 - } - -yystate830: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate831 - } - -yystate831: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate832 - } - -yystate832: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate833 - } - -yystate833: - c = l.next() - switch { - default: - goto yyrule195 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate834: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate835 - } - -yystate835: - c = l.next() - switch { - default: - goto yyrule196 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate836 - } - -yystate836: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate837 - } - -yystate837: - c = l.next() - switch { - default: - goto yyrule197 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate838: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate839 - case c == 'I' || c == 'i': - goto yystate850 - case c == 'O' || c == 'o': - goto yystate855 - } - -yystate839: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate840 - case c == 'P' || c == 'p': - goto yystate846 - } - -yystate840: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate841 - } - -yystate841: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate842 - } - -yystate842: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate843 - } - -yystate843: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate844 - } - -yystate844: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate845 - } - -yystate845: - c = l.next() - switch { - default: - goto yyrule294 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate846: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate847 - } - -yystate847: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate848 - } - -yystate848: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate849 - } - -yystate849: - c = l.next() - switch { - default: - goto yyrule198 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate850: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate851 - } - -yystate851: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate852 - } - -yystate852: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate853 - } - -yystate853: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate854 - } - -yystate854: - c = l.next() - switch { - default: - goto yyrule199 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate855: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate856 - } - -yystate856: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate857 - } - -yystate857: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate858 - } - -yystate858: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate859 - } - -yystate859: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate860 - } - -yystate860: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate861 - } - -yystate861: - c = l.next() - switch { - default: - goto yyrule200 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate862: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate863 - } - -yystate863: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate864 - case c == 'I' || c == 'i': - goto yystate869 - } - -yystate864: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate865 - } - -yystate865: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate866 - } - -yystate866: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate867 - } - -yystate867: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate868 - } - -yystate868: - c = l.next() - switch { - default: - goto yyrule201 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate869: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate870 - } - -yystate870: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate871 - } - -yystate871: - c = l.next() - switch { - default: - goto yyrule202 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate872: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c >= 'F' && c <= 'H' || c == 'J' || c == 'K' || c == 'M' || c == 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c >= 'f' && c <= 'h' || c == 'j' || c == 'k' || c == 'm' || c == 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate873 - case c == 'E' || c == 'e': - goto yystate876 - case c == 'I' || c == 'i': - goto yystate904 - case c == 'L' || c == 'l': - goto yystate908 - case c == 'O' || c == 'o': - goto yystate912 - } - -yystate873: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate874 - } - -yystate874: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate875 - } - -yystate875: - c = l.next() - switch { - default: - goto yyrule216 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate876: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'E' || c >= 'H' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'e' || c >= 'h' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate877 - case c == 'F' || c == 'f': - goto yystate880 - case c == 'G' || c == 'g': - goto yystate888 - case c == 'P' || c == 'p': - goto yystate892 - } - -yystate877: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate878 - case c == 'L' || c == 'l': - goto yystate879 - } - -yystate878: - c = l.next() - switch { - default: - goto yyrule217 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate879: - c = l.next() - switch { - default: - goto yyrule295 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate880: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate881 - } - -yystate881: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate882 - } - -yystate882: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate883 - } - -yystate883: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate884 - } - -yystate884: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate885 - } - -yystate885: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate886 - } - -yystate886: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate887 - } - -yystate887: - c = l.next() - switch { - default: - goto yyrule222 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate888: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate889 - } - -yystate889: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate890 - } - -yystate890: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate891 - } - -yystate891: - c = l.next() - switch { - default: - goto yyrule220 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate892: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate893 - case c == 'L' || c == 'l': - goto yystate900 - } - -yystate893: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate894 - } - -yystate894: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate895 - } - -yystate895: - c = l.next() - switch { - default: - goto yyrule218 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate896 - } - -yystate896: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate897 - } - -yystate897: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate898 - } - -yystate898: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate899 - } - -yystate899: - c = l.next() - switch { - default: - goto yyrule219 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate900: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate901 - } - -yystate901: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate902 - } - -yystate902: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate903 - } - -yystate903: - c = l.next() - switch { - default: - goto yyrule221 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate904: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate905 - } - -yystate905: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate906 - } - -yystate906: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate907 - } - -yystate907: - c = l.next() - switch { - default: - goto yyrule204 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate908: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate909 - } - -yystate909: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate910 - } - -yystate910: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate911 - } - -yystate911: - c = l.next() - switch { - default: - goto yyrule223 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate912: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate913 - case c == 'W' || c == 'w': - goto yystate919 - } - -yystate913: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate914 - } - -yystate914: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate915 - } - -yystate915: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate916 - } - -yystate916: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate917 - } - -yystate917: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate918 - } - -yystate918: - c = l.next() - switch { - default: - goto yyrule205 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate919: - c = l.next() - switch { - default: - goto yyrule206 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate920 - } - -yystate920: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate921 - } - -yystate921: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate922 - } - -yystate922: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate923 - } - -yystate923: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate924 - } - -yystate924: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate925 - } - -yystate925: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate926 - } - -yystate926: - c = l.next() - switch { - default: - goto yyrule207 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate927: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c == 'D' || c == 'F' || c == 'G' || c >= 'J' && c <= 'L' || c == 'N' || c == 'P' || c == 'R' || c == 'S' || c >= 'V' && c <= 'X' || c == 'Z' || c == '_' || c == 'a' || c == 'b' || c == 'd' || c == 'f' || c == 'g' || c >= 'j' && c <= 'l' || c == 'n' || c == 'p' || c == 'r' || c == 's' || c >= 'v' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate928 - case c == 'E' || c == 'e': - goto yystate934 - case c == 'H' || c == 'h': - goto yystate971 - case c == 'I' || c == 'i': - goto yystate977 - case c == 'M' || c == 'm': - goto yystate982 - case c == 'O' || c == 'o': - goto yystate989 - case c == 'Q' || c == 'q': - goto yystate992 - case c == 'T' || c == 't': - goto yystate1010 - case c == 'U' || c == 'u': - goto yystate1021 - case c == 'Y' || c == 'y': - goto yystate1040 - } - -yystate928: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate929 - } - -yystate929: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate930 - } - -yystate930: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate931 - } - -yystate931: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate932 - } - -yystate932: - c = l.next() - switch { - default: - goto yyrule208 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate933 - } - -yystate933: - c = l.next() - switch { - default: - goto yyrule209 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate934: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'K' || c >= 'M' && c <= 'Q' || c >= 'U' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'k' || c >= 'm' && c <= 'q' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate935 - case c == 'L' || c == 'l': - goto yystate951 - case c == 'R' || c == 'r': - goto yystate955 - case c == 'S' || c == 's': - goto yystate965 - case c == 'T' || c == 't': - goto yystate970 - } - -yystate935: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate936 - } - -yystate936: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate937 - } - -yystate937: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate938 - } - -yystate938: - c = l.next() - switch { - default: - goto yyrule226 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate939 - } - -yystate939: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate940 - } - -yystate940: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate941 - } - -yystate941: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate942 - } - -yystate942: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate943 - } - -yystate943: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate944 - } - -yystate944: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate945 - } - -yystate945: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate946 - } - -yystate946: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate947 - } - -yystate947: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate948 - } - -yystate948: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate949 - } - -yystate949: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate950 - } - -yystate950: - c = l.next() - switch { - default: - goto yyrule227 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate951: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate952 - } - -yystate952: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate953 - } - -yystate953: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate954 - } - -yystate954: - c = l.next() - switch { - default: - goto yyrule228 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate955: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate956 - } - -yystate956: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate957 - } - -yystate957: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate958 - } - -yystate958: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate959 - } - -yystate959: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Y' || c == '_' || c >= 'a' && c <= 'y': - goto yystate66 - case c == 'Z' || c == 'z': - goto yystate960 - } - -yystate960: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate961 - } - -yystate961: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate962 - } - -yystate962: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate963 - } - -yystate963: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate964 - } - -yystate964: - c = l.next() - switch { - default: - goto yyrule210 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate965: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate966 - } - -yystate966: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate967 - } - -yystate967: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate968 - } - -yystate968: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate969 - } - -yystate969: - c = l.next() - switch { - default: - goto yyrule211 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate970: - c = l.next() - switch { - default: - goto yyrule229 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate971: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate972 - case c == 'O' || c == 'o': - goto yystate975 - } - -yystate972: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate973 - } - -yystate973: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate974 - } - -yystate974: - c = l.next() - switch { - default: - goto yyrule230 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate975: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate976 - } - -yystate976: - c = l.next() - switch { - default: - goto yyrule231 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate977: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate978 - } - -yystate978: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate979 - } - -yystate979: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate980 - } - -yystate980: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate981 - } - -yystate981: - c = l.next() - switch { - default: - goto yyrule273 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate982: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate983 - } - -yystate983: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate984 - } - -yystate984: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate985 - } - -yystate985: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate986 - } - -yystate986: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate987 - } - -yystate987: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate988 - } - -yystate988: - c = l.next() - switch { - default: - goto yyrule287 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate989: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate990 - } - -yystate990: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate991 - } - -yystate991: - c = l.next() - switch { - default: - goto yyrule212 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate992: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate993 - } - -yystate993: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate994 - } - -yystate994: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate995 - } - -yystate995: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate996 - } - -yystate996: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate997 - } - -yystate997: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate998 - } - -yystate998: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate999 - } - -yystate999: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate1000 - } - -yystate1000: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1001 - } - -yystate1001: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate1002 - } - -yystate1002: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1003 - } - -yystate1003: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate1004 - } - -yystate1004: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate1005 - } - -yystate1005: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1006 - } - -yystate1006: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1007 - } - -yystate1007: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate1008 - } - -yystate1008: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1009 - } - -yystate1009: - c = l.next() - switch { - default: - goto yyrule279 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1010: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1011 - case c == 'R' || c == 'r': - goto yystate1017 - } - -yystate1011: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c == 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c == 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1012 - case c == 'T' || c == 't': - goto yystate1014 - } - -yystate1012: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1013 - } - -yystate1013: - c = l.next() - switch { - default: - goto yyrule213 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1014: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate1015 - } - -yystate1015: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1016 - } - -yystate1016: - c = l.next() - switch { - default: - goto yyrule214 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1017: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate1018 - } - -yystate1018: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate1019 - } - -yystate1019: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate1020 - } - -yystate1020: - c = l.next() - switch { - default: - goto yyrule233 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1021: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate1022 - case c == 'M' || c == 'm': - goto yystate1039 - } - -yystate1022: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate1023 - case c == 'S' || c == 's': - goto yystate1027 - } - -yystate1023: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1024 - } - -yystate1024: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1025 - } - -yystate1025: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1026 - } - -yystate1026: - c = l.next() - switch { - default: - goto yyrule232 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1027: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1028 - } - -yystate1028: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1029 - } - -yystate1029: - c = l.next() - switch { - default: - goto yyrule234 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1030 - } - -yystate1030: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1031 - } - -yystate1031: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate1032 - } - -yystate1032: - c = l.next() - switch { - default: - goto yyrule235 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': - goto yystate66 - case c == '_': - goto yystate1033 - } - -yystate1033: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1034 - } - -yystate1034: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1035 - } - -yystate1035: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate1036 - } - -yystate1036: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1037 - } - -yystate1037: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate1038 - } - -yystate1038: - c = l.next() - switch { - default: - goto yyrule236 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1039: - c = l.next() - switch { - default: - goto yyrule237 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1040: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1041 - } - -yystate1041: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate1042 - } - -yystate1042: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1043 - } - -yystate1043: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1044 - } - -yystate1044: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1045 - } - -yystate1045: - c = l.next() - switch { - default: - goto yyrule238 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1046: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c == 'F' || c == 'G' || c >= 'J' && c <= 'N' || c == 'P' || c == 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c == 'f' || c == 'g' || c >= 'j' && c <= 'n' || c == 'p' || c == 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1047 - case c == 'E' || c == 'e': - goto yystate1052 - case c == 'H' || c == 'h': - goto yystate1055 - case c == 'I' || c == 'i': - goto yystate1058 - case c == 'O' || c == 'o': - goto yystate1079 - case c == 'R' || c == 'r': - goto yystate1080 - } - -yystate1047: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate1048 - } - -yystate1048: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate1049 - } - -yystate1049: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1050 - } - -yystate1050: - c = l.next() - switch { - default: - goto yyrule239 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1051 - } - -yystate1051: - c = l.next() - switch { - default: - goto yyrule240 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1052: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate1053 - } - -yystate1053: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1054 - } - -yystate1054: - c = l.next() - switch { - default: - goto yyrule311 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1055: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1056 - } - -yystate1056: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1057 - } - -yystate1057: - c = l.next() - switch { - default: - goto yyrule241 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1058: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate1059 - case c == 'N' || c == 'n': - goto yystate1066 - } - -yystate1059: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1060 - } - -yystate1060: - c = l.next() - switch { - default: - goto yyrule297 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1061 - } - -yystate1061: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1062 - } - -yystate1062: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1063 - } - -yystate1063: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate1064 - } - -yystate1064: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'P' || c == 'p': - goto yystate1065 - } - -yystate1065: - c = l.next() - switch { - default: - goto yyrule298 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1066: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate1067 - } - -yystate1067: - c = l.next() - switch { - default: - goto yyrule285 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'H' || c >= 'J' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'h' || c >= 'j' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate1068 - case c == 'I' || c == 'i': - goto yystate1072 - case c == 'T' || c == 't': - goto yystate1075 - } - -yystate1068: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate1069 - } - -yystate1069: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1070 - } - -yystate1070: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate1071 - } - -yystate1071: - c = l.next() - switch { - default: - goto yyrule305 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1072: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1073 - } - -yystate1073: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1074 - } - -yystate1074: - c = l.next() - switch { - default: - goto yyrule286 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1075: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1076 - } - -yystate1076: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': - goto yystate66 - case c == 'X' || c == 'x': - goto yystate1077 - } - -yystate1077: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1078 - } - -yystate1078: - c = l.next() - switch { - default: - goto yyrule309 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1079: - c = l.next() - switch { - default: - goto yyrule242 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1080: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'H' || c >= 'J' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'h' || c >= 'j' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1081 - case c == 'I' || c == 'i': - goto yystate1095 - case c == 'U' || c == 'u': - goto yystate1102 - } - -yystate1081: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1082 - case c == 'N' || c == 'n': - goto yystate1087 - } - -yystate1082: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate1083 - } - -yystate1083: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1084 - } - -yystate1084: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1085 - } - -yystate1085: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate1086 - } - -yystate1086: - c = l.next() - switch { - default: - goto yyrule243 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1087: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1088 - } - -yystate1088: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1089 - } - -yystate1089: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate1090 - } - -yystate1090: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1091 - } - -yystate1091: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1092 - } - -yystate1092: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1093 - } - -yystate1093: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1094 - } - -yystate1094: - c = l.next() - switch { - default: - goto yyrule244 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1095: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate1096 - case c == 'M' || c == 'm': - goto yystate1101 - } - -yystate1096: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate1097 - } - -yystate1097: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1098 - } - -yystate1098: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1099 - } - -yystate1099: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1100 - } - -yystate1100: - c = l.next() - switch { - default: - goto yyrule245 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1101: - c = l.next() - switch { - default: - goto yyrule246 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1102: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1103 - case c == 'N' || c == 'n': - goto yystate1104 - } - -yystate1103: - c = l.next() - switch { - default: - goto yyrule278 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1104: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate1105 - } - -yystate1105: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1106 - } - -yystate1106: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1107 - } - -yystate1107: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1108 - } - -yystate1108: - c = l.next() - switch { - default: - goto yyrule247 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1109: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c == 'O' || c == 'Q' || c == 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c == 'o' || c == 'q' || c == 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1110 - case c == 'P' || c == 'p': - goto yystate1141 - case c == 'S' || c == 's': - goto yystate1149 - } - -yystate1110: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'H' || c == 'J' || c >= 'M' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'h' || c == 'j' || c >= 'm' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate1111 - case c == 'I' || c == 'i': - goto yystate1120 - case c == 'K' || c == 'k': - goto yystate1126 - case c == 'L' || c == 'l': - goto yystate1131 - case c == 'S' || c == 's': - goto yystate1135 - } - -yystate1111: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1112 - } - -yystate1112: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate1113 - } - -yystate1113: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate1114 - } - -yystate1114: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1115 - } - -yystate1115: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1116 - } - -yystate1116: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1117 - } - -yystate1117: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1118 - } - -yystate1118: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate1119 - } - -yystate1119: - c = l.next() - switch { - default: - goto yyrule248 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1120: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c == 'P' || c >= 'R' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c == 'p' || c >= 'r' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1121 - case c == 'Q' || c == 'q': - goto yystate1123 - } - -yystate1121: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1122 - } - -yystate1122: - c = l.next() - switch { - default: - goto yyrule249 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1123: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate1124 - } - -yystate1124: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1125 - } - -yystate1125: - c = l.next() - switch { - default: - goto yyrule250 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1126: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1127 - } - -yystate1127: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1128 - } - -yystate1128: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate1129 - } - -yystate1129: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1130 - } - -yystate1130: - c = l.next() - switch { - default: - goto yyrule251 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1131: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1132 - } - -yystate1132: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': - goto yystate66 - case c == 'C' || c == 'c': - goto yystate1133 - } - -yystate1133: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate1134 - } - -yystate1134: - c = l.next() - switch { - default: - goto yyrule253 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1135: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1136 - } - -yystate1136: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate1137 - } - -yystate1137: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1138 - } - -yystate1138: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1139 - } - -yystate1139: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate1140 - } - -yystate1140: - c = l.next() - switch { - default: - goto yyrule274 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1141: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate1142 - case c == 'P' || c == 'p': - goto yystate1146 - } - -yystate1142: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1143 - } - -yystate1143: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1144 - } - -yystate1144: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1145 - } - -yystate1145: - c = l.next() - switch { - default: - goto yyrule254 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1146: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1147 - } - -yystate1147: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1148 - } - -yystate1148: - c = l.next() - switch { - default: - goto yyrule255 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1149: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1150 - case c == 'I' || c == 'i': - goto yystate1152 - } - -yystate1150: - c = l.next() - switch { - default: - goto yyrule256 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1151 - } - -yystate1151: - c = l.next() - switch { - default: - goto yyrule257 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1152: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1153 - } - -yystate1153: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate1154 - } - -yystate1154: - c = l.next() - switch { - default: - goto yyrule258 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1155: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1156 - case c == 'E' || c == 'e': - goto yystate1178 - } - -yystate1156: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate1157 - case c == 'R' || c == 'r': - goto yystate1161 - } - -yystate1157: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'U' || c == 'u': - goto yystate1158 - } - -yystate1158: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1159 - } - -yystate1159: - c = l.next() - switch { - default: - goto yyrule259 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1160 - } - -yystate1160: - c = l.next() - switch { - default: - goto yyrule260 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1161: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'D' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c == 'a' || c >= 'd' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate1162 - case c == 'C' || c == 'c': - goto yystate1168 - case c == 'I' || c == 'i': - goto yystate1172 - } - -yystate1162: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1163 - } - -yystate1163: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1164 - } - -yystate1164: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1165 - } - -yystate1165: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1166 - } - -yystate1166: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate1167 - } - -yystate1167: - c = l.next() - switch { - default: - goto yyrule304 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1168: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate1169 - } - -yystate1169: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1170 - } - -yystate1170: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1171 - } - -yystate1171: - c = l.next() - switch { - default: - goto yyrule302 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1172: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1173 - } - -yystate1173: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c == 'A' || c >= 'C' && c <= 'Z' || c == '_' || c == 'a' || c >= 'c' && c <= 'z': - goto yystate66 - case c == 'B' || c == 'b': - goto yystate1174 - } - -yystate1174: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate1175 - } - -yystate1175: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1176 - } - -yystate1176: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1177 - } - -yystate1177: - c = l.next() - switch { - default: - goto yyrule261 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1178: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1179 - } - -yystate1179: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1180 - } - -yystate1180: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1181 - } - -yystate1181: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1182 - } - -yystate1182: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1183 - } - -yystate1183: - c = l.next() - switch { - default: - goto yyrule262 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1184: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c == 'F' || c == 'G' || c >= 'I' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c == 'f' || c == 'g' || c >= 'i' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1185 - case c == 'E' || c == 'e': - goto yystate1192 - case c == 'H' || c == 'h': - goto yystate1204 - case c == 'R' || c == 'r': - goto yystate1209 - } - -yystate1185: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1186 - } - -yystate1186: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1187 - } - -yystate1187: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1188 - } - -yystate1188: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1189 - } - -yystate1189: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': - goto yystate66 - case c == 'G' || c == 'g': - goto yystate1190 - } - -yystate1190: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': - goto yystate66 - case c == 'S' || c == 's': - goto yystate1191 - } - -yystate1191: - c = l.next() - switch { - default: - goto yyrule263 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1192: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1193 - } - -yystate1193: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate1194 - } - -yystate1194: - c = l.next() - switch { - default: - goto yyrule264 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'D' || c == 'd': - goto yystate1195 - case c == 'O' || c == 'o': - goto yystate1198 - } - -yystate1195: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1196 - } - -yystate1196: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate1197 - } - -yystate1197: - c = l.next() - switch { - default: - goto yyrule265 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1198: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate1199 - } - -yystate1199: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': - goto yystate66 - case c == 'Y' || c == 'y': - goto yystate1200 - } - -yystate1200: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1201 - } - -yystate1201: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1202 - } - -yystate1202: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1203 - } - -yystate1203: - c = l.next() - switch { - default: - goto yyrule266 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1204: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1205 - } - -yystate1205: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1206 - case c == 'R' || c == 'r': - goto yystate1207 - } - -yystate1206: - c = l.next() - switch { - default: - goto yyrule267 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1207: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1208 - } - -yystate1208: - c = l.next() - switch { - default: - goto yyrule268 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1209: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1210 - } - -yystate1210: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1211 - } - -yystate1211: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1212 - } - -yystate1212: - c = l.next() - switch { - default: - goto yyrule269 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1213: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1217 - case c == '\'': - goto yystate1214 - } - -yystate1214: - c = l.next() - switch { - default: - goto yyabort - case c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f': - goto yystate1215 - } - -yystate1215: - c = l.next() - switch { - default: - goto yyabort - case c == '\'': - goto yystate1216 - case c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f': - goto yystate1215 - } - -yystate1216: - c = l.next() - goto yyrule11 - -yystate1217: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1218 - } - -yystate1218: - c = l.next() - switch { - default: - goto yyrule270 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1219: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1220 - } - -yystate1220: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate1221 - } - -yystate1221: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1222 - } - -yystate1222: - c = l.next() - switch { - default: - goto yyrule300 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'V' || c >= 'X' && c <= 'Z' || c >= 'a' && c <= 'v' || c >= 'x' && c <= 'z': - goto yystate66 - case c == 'W' || c == 'w': - goto yystate1223 - case c == '_': - goto yystate1227 - } - -yystate1223: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1224 - } - -yystate1224: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1225 - } - -yystate1225: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'J' || c >= 'L' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'j' || c >= 'l' && c <= 'z': - goto yystate66 - case c == 'K' || c == 'k': - goto yystate1226 - } - -yystate1226: - c = l.next() - switch { - default: - goto yyrule271 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1227: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': - goto yystate66 - case c == 'M' || c == 'm': - goto yystate1228 - } - -yystate1228: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1229 - } - -yystate1229: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'N' || c == 'n': - goto yystate1230 - } - -yystate1230: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 'T' || c == 't': - goto yystate1231 - } - -yystate1231: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': - goto yystate66 - case c == 'H' || c == 'h': - goto yystate1232 - } - -yystate1232: - c = l.next() - switch { - default: - goto yyrule272 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1233: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': - goto yystate66 - case c == 'E' || c == 'e': - goto yystate1234 - } - -yystate1234: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': - goto yystate66 - case c == 'R' || c == 'r': - goto yystate1235 - } - -yystate1235: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'O' || c == 'o': - goto yystate1236 - } - -yystate1236: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z': - goto yystate66 - case c == 'F' || c == 'f': - goto yystate1237 - } - -yystate1237: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': - goto yystate66 - case c == 'I' || c == 'i': - goto yystate1238 - } - -yystate1238: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate1239 - } - -yystate1239: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c >= 'M' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c >= 'm' && c <= 'z': - goto yystate66 - case c == 'L' || c == 'l': - goto yystate1240 - } - -yystate1240: - c = l.next() - switch { - default: - goto yyrule275 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1241: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1242: - c = l.next() - goto yyrule15 - -yystate1243: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'D' || c >= 'F' && c <= 'H' || c == 'J' || c == 'K' || c == 'M' || c == 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'd' || c >= 'f' && c <= 'h' || c == 'j' || c == 'k' || c == 'm' || c == 'n' || c >= 'p' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate873 - case c == 'E': - goto yystate876 - case c == 'I' || c == 'i': - goto yystate904 - case c == 'L' || c == 'l': - goto yystate908 - case c == 'O' || c == 'o': - goto yystate912 - case c == 'e': - goto yystate1244 - } - -yystate1244: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'B' && c <= 'E' || c >= 'H' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c == 'b' || c == 'c' || c == 'e' || c >= 'h' && c <= 'o' || c >= 'q' && c <= 'z': - goto yystate66 - case c == 'A' || c == 'a': - goto yystate877 - case c == 'F' || c == 'f': - goto yystate880 - case c == 'G' || c == 'g': - goto yystate888 - case c == 'P' || c == 'p': - goto yystate892 - case c == 'd': - goto yystate1245 - } - -yystate1245: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': - goto yystate66 - case c == 'u': - goto yystate1246 - } - -yystate1246: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'n': - goto yystate1247 - } - -yystate1247: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z': - goto yystate66 - case c == 'd': - goto yystate1248 - } - -yystate1248: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': - goto yystate66 - case c == 'a': - goto yystate1249 - } - -yystate1249: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': - goto yystate66 - case c == 'n': - goto yystate1250 - } - -yystate1250: - c = l.next() - switch { - default: - goto yyrule318 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': - goto yystate66 - case c == 't': - goto yystate1251 - } - -yystate1251: - c = l.next() - switch { - default: - goto yyrule203 - case c == '$' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate66 - } - -yystate1252: - c = l.next() - switch { - default: - goto yyrule319 - case c == '|': - goto yystate1253 - } - -yystate1253: - c = l.next() - goto yyrule35 - - goto yystate1254 // silence unused label error -yystate1254: - c = l.next() -yystart1254: - switch { - default: - goto yyrule16 - case c == '"': - goto yystate1256 - case c == '\\': - goto yystate1258 - case c == '\x00': - goto yystate2 - case c >= '\x01' && c <= '!' || c >= '#' && c <= '[' || c >= ']' && c <= 'ÿ': - goto yystate1255 - } - -yystate1255: - c = l.next() - switch { - default: - goto yyrule16 - case c >= '\x01' && c <= '!' || c >= '#' && c <= '[' || c >= ']' && c <= 'ÿ': - goto yystate1255 - } - -yystate1256: - c = l.next() - switch { - default: - goto yyrule19 - case c == '"': - goto yystate1257 - } - -yystate1257: - c = l.next() - goto yyrule18 - -yystate1258: - c = l.next() - switch { - default: - goto yyabort - case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ': - goto yystate1259 - } - -yystate1259: - c = l.next() - goto yyrule17 - - goto yystate1260 // silence unused label error -yystate1260: - c = l.next() -yystart1260: - switch { - default: - goto yyrule20 - case c == '\'': - goto yystate1262 - case c == '\\': - goto yystate1264 - case c == '\x00': - goto yystate2 - case c >= '\x01' && c <= '&' || c >= '(' && c <= '[' || c >= ']' && c <= 'ÿ': - goto yystate1261 - } - -yystate1261: - c = l.next() - switch { - default: - goto yyrule20 - case c >= '\x01' && c <= '&' || c >= '(' && c <= '[' || c >= ']' && c <= 'ÿ': - goto yystate1261 - } - -yystate1262: - c = l.next() - switch { - default: - goto yyrule23 - case c == '\'': - goto yystate1263 - } - -yystate1263: - c = l.next() - goto yyrule22 - -yystate1264: - c = l.next() - switch { - default: - goto yyabort - case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ': - goto yystate1265 - } - -yystate1265: - c = l.next() - goto yyrule21 - - goto yystate1266 // silence unused label error -yystate1266: - c = l.next() -yystart1266: - switch { - default: - goto yystate1267 // c >= '\x01' && c <= '\b' || c >= '\n' && c <= '\x1f' || c >= '!' && c <= 'ÿ' - case c == '\t' || c == ' ': - goto yystate1268 - case c == '\x00': - goto yystate2 - } - -yystate1267: - c = l.next() - goto yyrule8 - -yystate1268: - c = l.next() - switch { - default: - goto yyrule7 - case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ': - goto yystate1268 - } - - goto yystate1269 // silence unused label error -yystate1269: - c = l.next() -yystart1269: - switch { - default: - goto yyrule24 - case c == '\x00': - goto yystate2 - case c == '`': - goto yystate1271 - case c >= '\x01' && c <= '_' || c >= 'a' && c <= 'ÿ': - goto yystate1270 - } - -yystate1270: - c = l.next() - switch { - default: - goto yyrule24 - case c >= '\x01' && c <= '_' || c >= 'a' && c <= 'ÿ': - goto yystate1270 - } - -yystate1271: - c = l.next() - switch { - default: - goto yyrule26 - case c == '`': - goto yystate1272 - } - -yystate1272: - c = l.next() - goto yyrule25 - -yyrule1: // \0 - { - return 0 - } -yyrule2: // [ \t\n\r]+ - - goto yystate0 -yyrule3: // #.* - - goto yystate0 -yyrule4: // \/\/.* - - goto yystate0 -yyrule5: // \/\*([^*]|\*+[^*/])*\*+\/ - - goto yystate0 -yyrule6: // -- - { - l.sc = S3 - goto yystate0 - } -yyrule7: // [ \t]+.* - { - { - l.sc = 0 - } - goto yystate0 - } -yyrule8: // [^ \t] - { - { - l.sc = 0 - l.c = '-' - n := len(l.val) - l.unget(l.val[n-1]) - return '-' - } - goto yystate0 - } -yyrule9: // {int_lit} - { - return l.int(lval) - } -yyrule10: // {float_lit} - { - return l.float(lval) - } -yyrule11: // {hex_lit} - { - return l.hex(lval) - } -yyrule12: // {bit_lit} - { - return l.bit(lval) - } -yyrule13: // \" - { - l.sc = S1 - goto yystate0 - } -yyrule14: // ' - { - l.sc = S2 - goto yystate0 - } -yyrule15: // ` - { - l.sc = S4 - goto yystate0 - } -yyrule16: // [^\"\\]* - { - l.stringLit = append(l.stringLit, l.val...) - goto yystate0 - } -yyrule17: // \\. - { - l.stringLit = append(l.stringLit, l.val...) - goto yystate0 - } -yyrule18: // \"\" - { - l.stringLit = append(l.stringLit, '"') - goto yystate0 - } -yyrule19: // \" - { - l.stringLit = append(l.stringLit, '"') - l.sc = 0 - return l.str(lval, "\"") - } -yyrule20: // [^'\\]* - { - l.stringLit = append(l.stringLit, l.val...) - goto yystate0 - } -yyrule21: // \\. - { - l.stringLit = append(l.stringLit, l.val...) - goto yystate0 - } -yyrule22: // '' - { - l.stringLit = append(l.stringLit, '\'') - goto yystate0 - } -yyrule23: // ' - { - l.stringLit = append(l.stringLit, '\'') - l.sc = 0 - return l.str(lval, "'") - } -yyrule24: // [^`]* - { - l.stringLit = append(l.stringLit, l.val...) - goto yystate0 - } -yyrule25: // `` - { - l.stringLit = append(l.stringLit, '`') - goto yystate0 - } -yyrule26: // ` - { - l.sc = 0 - lval.item = string(l.stringLit) - l.stringLit = l.stringLit[0:0] - return identifier - } -yyrule27: // "&&" - { - return andand - } -yyrule28: // "&^" - { - return andnot - } -yyrule29: // "<<" - { - return lsh - } -yyrule30: // "<=" - { - return le - } -yyrule31: // "=" - { - return eq - } -yyrule32: // ">=" - { - return ge - } -yyrule33: // "!=" - { - return neq - } -yyrule34: // "<>" - { - return neq - } -yyrule35: // "||" - { - return oror - } -yyrule36: // ">>" - { - return rsh - } -yyrule37: // "<=>" - { - return nulleq - } -yyrule38: // "@" - { - return at - } -yyrule39: // "?" - { - return placeholder - } -yyrule40: // {abs} - { - lval.item = string(l.val) - return abs - } -yyrule41: // {add} - { - return add - } -yyrule42: // {adddate} - { - lval.item = string(l.val) - return addDate - } -yyrule43: // {admin} - { - lval.item = string(l.val) - return admin - } -yyrule44: // {after} - { - lval.item = string(l.val) - return after - } -yyrule45: // {all} - { - return all - } -yyrule46: // {alter} - { - return alter - } -yyrule47: // {and} - { - return and - } -yyrule48: // {any} - { - lval.item = string(l.val) - return any - } -yyrule49: // {asc} - { - return asc - } -yyrule50: // {as} - { - return as - } -yyrule51: // {auto_increment} - { - lval.item = string(l.val) - return autoIncrement - } -yyrule52: // {avg} - { - lval.item = string(l.val) - return avg - } -yyrule53: // {avg_row_length} - { - lval.item = string(l.val) - return avgRowLength - } -yyrule54: // {begin} - { - lval.item = string(l.val) - return begin - } -yyrule55: // {between} - { - return between - } -yyrule56: // {both} - { - return both - } -yyrule57: // {btree} - { - lval.item = string(l.val) - return btree - } -yyrule58: // {by} - { - return by - } -yyrule59: // {case} - { - return caseKwd - } -yyrule60: // {cast} - { - lval.item = string(l.val) - return cast - } -yyrule61: // {character} - { - return character - } -yyrule62: // {charset} - { - lval.item = string(l.val) - return charsetKwd - } -yyrule63: // {check} - { - return check - } -yyrule64: // {checksum} - { - lval.item = string(l.val) - return checksum - } -yyrule65: // {coalesce} - { - lval.item = string(l.val) - return coalesce - } -yyrule66: // {collate} - { - return collate - } -yyrule67: // {collation} - { - lval.item = string(l.val) - return collation - } -yyrule68: // {column} - { - return column - } -yyrule69: // {columns} - { - lval.item = string(l.val) - return columns - } -yyrule70: // {comment} - { - lval.item = string(l.val) - return comment - } -yyrule71: // {commit} - { - lval.item = string(l.val) - return commit - } -yyrule72: // {committed} - { - lval.item = string(l.val) - return committed - } -yyrule73: // {compact} - { - lval.item = string(l.val) - return compact - } -yyrule74: // {compressed} - { - lval.item = string(l.val) - return compressed - } -yyrule75: // {compression} - { - lval.item = string(l.val) - return compression - } -yyrule76: // {concat} - { - lval.item = string(l.val) - return concat - } -yyrule77: // {concat_ws} - { - lval.item = string(l.val) - return concatWs - } -yyrule78: // {connection} - { - lval.item = string(l.val) - return connection - } -yyrule79: // {connection_id} - { - lval.item = string(l.val) - return connectionID - } -yyrule80: // {constraint} - { - return constraint - } -yyrule81: // {convert} - { - lval.item = string(l.val) - return convert - } -yyrule82: // {count} - { - lval.item = string(l.val) - return count - } -yyrule83: // {create} - { - return create - } -yyrule84: // {cross} - { - return cross - } -yyrule85: // {curdate} - { - lval.item = string(l.val) - return curDate - } -yyrule86: // {current_date} - { - lval.item = string(l.val) - return currentDate - } -yyrule87: // {curtime} - { - lval.item = string(l.val) - return curTime - } -yyrule88: // {current_time} - { - lval.item = string(l.val) - return currentTime - } -yyrule89: // {current_user} - { - lval.item = string(l.val) - return currentUser - } -yyrule90: // {database} - { - lval.item = string(l.val) - return database - } -yyrule91: // {databases} - { - return databases - } -yyrule92: // {date_add} - { - lval.item = string(l.val) - return dateAdd - } -yyrule93: // {date_sub} - { - lval.item = string(l.val) - return dateSub - } -yyrule94: // {day} - { - lval.item = string(l.val) - return day - } -yyrule95: // {dayname} - { - lval.item = string(l.val) - return dayname - } -yyrule96: // {dayofweek} - { - lval.item = string(l.val) - return dayofweek - } -yyrule97: // {dayofmonth} - { - lval.item = string(l.val) - return dayofmonth - } -yyrule98: // {dayofyear} - { - lval.item = string(l.val) - return dayofyear - } -yyrule99: // {day_hour} - { - lval.item = string(l.val) - return dayHour - } -yyrule100: // {day_microsecond} - { - lval.item = string(l.val) - return dayMicrosecond - } -yyrule101: // {day_minute} - { - lval.item = string(l.val) - return dayMinute - } -yyrule102: // {day_second} - { - lval.item = string(l.val) - return daySecond - } -yyrule103: // {ddl} - { - return ddl - } -yyrule104: // {deallocate} - { - lval.item = string(l.val) - return deallocate - } -yyrule105: // {default} - { - return defaultKwd - } -yyrule106: // {delayed} - { - return delayed - } -yyrule107: // {delay_key_write} - { - lval.item = string(l.val) - return delayKeyWrite - } -yyrule108: // {delete} - { - return deleteKwd - } -yyrule109: // {desc} - { - return desc - } -yyrule110: // {describe} - { - return describe - } -yyrule111: // {drop} - { - return drop - } -yyrule112: // {distinct} - { - return distinct - } -yyrule113: // {div} - { - return div - } -yyrule114: // {do} - { - lval.item = string(l.val) - return do - } -yyrule115: // {dual} - { - return dual - } -yyrule116: // {duplicate} - { - lval.item = string(l.val) - return duplicate - } -yyrule117: // {dynamic} - { - lval.item = string(l.val) - return dynamic - } -yyrule118: // {else} - { - return elseKwd - } -yyrule119: // {end} - { - lval.item = string(l.val) - return end - } -yyrule120: // {engine} - { - lval.item = string(l.val) - return engine - } -yyrule121: // {engines} - { - lval.item = string(l.val) - return engines - } -yyrule122: // {execute} - { - lval.item = string(l.val) - return execute - } -yyrule123: // {enum} - { - return enum - } -yyrule124: // {escape} - { - lval.item = string(l.val) - return escape - } -yyrule125: // {exists} - { - return exists - } -yyrule126: // {explain} - { - return explain - } -yyrule127: // {extract} - { - lval.item = string(l.val) - return extract - } -yyrule128: // {fields} - { - lval.item = string(l.val) - return fields - } -yyrule129: // {first} - { - lval.item = string(l.val) - return first - } -yyrule130: // {fixed} - { - lval.item = string(l.val) - return fixed - } -yyrule131: // {for} - { - return forKwd - } -yyrule132: // {foreign} - { - return foreign - } -yyrule133: // {found_rows} - { - lval.item = string(l.val) - return foundRows - } -yyrule134: // {from} - { - return from - } -yyrule135: // {full} - { - lval.item = string(l.val) - return full - } -yyrule136: // {fulltext} - { - return fulltext - } -yyrule137: // {grant} - { - return grant - } -yyrule138: // {grants} - { - lval.item = string(l.val) - return grants - } -yyrule139: // {group} - { - return group - } -yyrule140: // {group_concat} - { - lval.item = string(l.val) - return groupConcat - } -yyrule141: // {hash} - { - lval.item = string(l.val) - return hash - } -yyrule142: // {having} - { - return having - } -yyrule143: // {high_priority} - { - return highPriority - } -yyrule144: // {hour} - { - lval.item = string(l.val) - return hour - } -yyrule145: // {hour_microsecond} - { - lval.item = string(l.val) - return hourMicrosecond - } -yyrule146: // {hour_minute} - { - lval.item = string(l.val) - return hourMinute - } -yyrule147: // {hour_second} - { - lval.item = string(l.val) - return hourSecond - } -yyrule148: // {identified} - { - lval.item = string(l.val) - return identified - } -yyrule149: // {if} - { - lval.item = string(l.val) - return ifKwd - } -yyrule150: // {ifnull} - { - lval.item = string(l.val) - return ifNull - } -yyrule151: // {ignore} - { - return ignore - } -yyrule152: // {index} - { - return index - } -yyrule153: // {inner} - { - return inner - } -yyrule154: // {insert} - { - return insert - } -yyrule155: // {interval} - { - return interval - } -yyrule156: // {into} - { - return into - } -yyrule157: // {in} - { - return in - } -yyrule158: // {is} - { - return is - } -yyrule159: // {isolation} - { - lval.item = string(l.val) - return isolation - } -yyrule160: // {join} - { - return join - } -yyrule161: // {key} - { - return key - } -yyrule162: // {key_block_size} - { - lval.item = string(l.val) - return keyBlockSize - } -yyrule163: // {leading} - { - return leading - } -yyrule164: // {left} - { - lval.item = string(l.val) - return left - } -yyrule165: // {length} - { - lval.item = string(l.val) - return length - } -yyrule166: // {level} - { - lval.item = string(l.val) - return level - } -yyrule167: // {like} - { - return like - } -yyrule168: // {limit} - { - return limit - } -yyrule169: // {local} - { - lval.item = string(l.val) - return local - } -yyrule170: // {locate} - { - lval.item = string(l.val) - return locate - } -yyrule171: // {lock} - { - return lock - } -yyrule172: // {lower} - { - lval.item = string(l.val) - return lower - } -yyrule173: // {low_priority} - { - return lowPriority - } -yyrule174: // {max} - { - lval.item = string(l.val) - return max - } -yyrule175: // {max_rows} - { - lval.item = string(l.val) - return maxRows - } -yyrule176: // {microsecond} - { - lval.item = string(l.val) - return microsecond - } -yyrule177: // {min} - { - lval.item = string(l.val) - return min - } -yyrule178: // {minute} - { - lval.item = string(l.val) - return minute - } -yyrule179: // {minute_microsecond} - { - lval.item = string(l.val) - return minuteMicrosecond - } -yyrule180: // {minute_second} - { - lval.item = string(l.val) - return minuteSecond - } -yyrule181: // {min_rows} - { - lval.item = string(l.val) - return minRows - } -yyrule182: // {mod} - { - return mod - } -yyrule183: // {mode} - { - lval.item = string(l.val) - return mode - } -yyrule184: // {month} - { - lval.item = string(l.val) - return month - } -yyrule185: // {names} - { - lval.item = string(l.val) - return names - } -yyrule186: // {national} - { - lval.item = string(l.val) - return national - } -yyrule187: // {not} - { - return not - } -yyrule188: // {offset} - { - lval.item = string(l.val) - return offset - } -yyrule189: // {on} - { - return on - } -yyrule190: // {only} - { - lval.item = string(l.val) - return only - } -yyrule191: // {option} - { - return option - } -yyrule192: // {order} - { - return order - } -yyrule193: // {or} - { - return or - } -yyrule194: // {outer} - { - return outer - } -yyrule195: // {password} - { - lval.item = string(l.val) - return password - } -yyrule196: // {pow} - { - lval.item = string(l.val) - return pow - } -yyrule197: // {power} - { - lval.item = string(l.val) - return power - } -yyrule198: // {prepare} - { - lval.item = string(l.val) - return prepare - } -yyrule199: // {primary} - { - return primary - } -yyrule200: // {procedure} - { - return procedure - } -yyrule201: // {quarter} - { - lval.item = string(l.val) - return quarter - } -yyrule202: // {quick} - { - lval.item = string(l.val) - return quick - } -yyrule203: // redundant - { - lval.item = string(l.val) - return redundant - } -yyrule204: // {right} - { - return right - } -yyrule205: // {rollback} - { - lval.item = string(l.val) - return rollback - } -yyrule206: // {row} - { - lval.item = string(l.val) - return row - } -yyrule207: // {row_format} - { - lval.item = string(l.val) - return rowFormat - } -yyrule208: // {schema} - { - lval.item = string(l.val) - return schema - } -yyrule209: // {schemas} - { - return schemas - } -yyrule210: // {serializable} - { - lval.item = string(l.val) - return serializable - } -yyrule211: // {session} - { - lval.item = string(l.val) - return session - } -yyrule212: // {some} - { - lval.item = string(l.val) - return some - } -yyrule213: // {start} - { - lval.item = string(l.val) - return start - } -yyrule214: // {status} - { - lval.item = string(l.val) - return status - } -yyrule215: // {global} - { - lval.item = string(l.val) - return global - } -yyrule216: // {rand} - { - lval.item = string(l.val) - return rand - } -yyrule217: // {read} - { - return read - } -yyrule218: // {repeat} - { - lval.item = string(l.val) - return repeat - } -yyrule219: // {repeatable} - { - lval.item = string(l.val) - return repeatable - } -yyrule220: // {regexp} - { - return regexpKwd - } -yyrule221: // {replace} - { - lval.item = string(l.val) - return replace - } -yyrule222: // {references} - { - return references - } -yyrule223: // {rlike} - { - return rlike - } -yyrule224: // {sys_var} - { - lval.item = string(l.val) - return sysVar - } -yyrule225: // {user_var} - { - lval.item = string(l.val) - return userVar - } -yyrule226: // {second} - { - lval.item = string(l.val) - return second - } -yyrule227: // {second_microsecond} - { - lval.item = string(l.val) - return secondMicrosecond - } -yyrule228: // {select} - { - return selectKwd - } -yyrule229: // {set} - { - return set - } -yyrule230: // {share} - { - return share - } -yyrule231: // {show} - { - return show - } -yyrule232: // {subdate} - { - lval.item = string(l.val) - return subDate - } -yyrule233: // {strcmp} - { - lval.item = string(l.val) - return strcmp - } -yyrule234: // {substr} - { - lval.item = string(l.val) - return substring - } -yyrule235: // {substring} - { - lval.item = string(l.val) - return substring - } -yyrule236: // {substring_index} - { - lval.item = string(l.val) - return substringIndex - } -yyrule237: // {sum} - { - lval.item = string(l.val) - return sum - } -yyrule238: // {sysdate} - { - lval.item = string(l.val) - return sysDate - } -yyrule239: // {table} - { - return tableKwd - } -yyrule240: // {tables} - { - lval.item = string(l.val) - return tables - } -yyrule241: // {then} - { - return then - } -yyrule242: // {to} - { - return to - } -yyrule243: // {trailing} - { - return trailing - } -yyrule244: // {transaction} - { - lval.item = string(l.val) - return transaction - } -yyrule245: // {triggers} - { - lval.item = string(l.val) - return triggers - } -yyrule246: // {trim} - { - lval.item = string(l.val) - return trim - } -yyrule247: // {truncate} - { - lval.item = string(l.val) - return truncate - } -yyrule248: // {uncommitted} - { - lval.item = string(l.val) - return uncommitted - } -yyrule249: // {union} - { - return union - } -yyrule250: // {unique} - { - return unique - } -yyrule251: // {unknown} - { - lval.item = string(l.val) - return unknown - } -yyrule252: // {nullif} - { - lval.item = string(l.val) - return nullIf - } -yyrule253: // {unlock} - { - return unlock - } -yyrule254: // {update} - { - return update - } -yyrule255: // {upper} - { - lval.item = string(l.val) - return upper - } -yyrule256: // {use} - { - return use - } -yyrule257: // {user} - { - lval.item = string(l.val) - return user - } -yyrule258: // {using} - { - return using - } -yyrule259: // {value} - { - lval.item = string(l.val) - return value - } -yyrule260: // {values} - { - return values - } -yyrule261: // {variables} - { - lval.item = string(l.val) - return variables - } -yyrule262: // {version} - { - lval.item = string(l.val) - return version - } -yyrule263: // {warnings} - { - lval.item = string(l.val) - return warnings - } -yyrule264: // {week} - { - lval.item = string(l.val) - return week - } -yyrule265: // {weekday} - { - lval.item = string(l.val) - return weekday - } -yyrule266: // {weekofyear} - { - lval.item = string(l.val) - return weekofyear - } -yyrule267: // {when} - { - return when - } -yyrule268: // {where} - { - return where - } -yyrule269: // {write} - { - return write - } -yyrule270: // {xor} - { - return xor - } -yyrule271: // {yearweek} - { - lval.item = string(l.val) - return yearweek - } -yyrule272: // {year_month} - { - lval.item = string(l.val) - return yearMonth - - } -yyrule273: // {signed} - { - lval.item = string(l.val) - return signed - } -yyrule274: // {unsigned} - { - return unsigned - } -yyrule275: // {zerofill} - { - return zerofill - } -yyrule276: // {null} - { - lval.item = nil - return null - } -yyrule277: // {false} - { - return falseKwd - } -yyrule278: // {true} - { - return trueKwd - } -yyrule279: // {calc_found_rows} - { - lval.item = string(l.val) - return calcFoundRows - } -yyrule280: // {current_ts} - { - lval.item = string(l.val) - return currentTs - } -yyrule281: // {localtime} - { - return localTime - } -yyrule282: // {localts} - { - return localTs - } -yyrule283: // {now} - { - lval.item = string(l.val) - return now - } -yyrule284: // {bit} - { - lval.item = string(l.val) - return bitType - } -yyrule285: // {tiny} - { - lval.item = string(l.val) - return tinyIntType - } -yyrule286: // {tinyint} - { - lval.item = string(l.val) - return tinyIntType - } -yyrule287: // {smallint} - { - lval.item = string(l.val) - return smallIntType - } -yyrule288: // {mediumint} - { - lval.item = string(l.val) - return mediumIntType - } -yyrule289: // {bigint} - { - lval.item = string(l.val) - return bigIntType - } -yyrule290: // {decimal} - { - lval.item = string(l.val) - return decimalType - } -yyrule291: // {numeric} - { - lval.item = string(l.val) - return numericType - } -yyrule292: // {float} - { - lval.item = string(l.val) - return floatType - } -yyrule293: // {double} - { - lval.item = string(l.val) - return doubleType - } -yyrule294: // {precision} - { - lval.item = string(l.val) - return precisionType - } -yyrule295: // {real} - { - lval.item = string(l.val) - return realType - } -yyrule296: // {date} - { - lval.item = string(l.val) - return dateType - } -yyrule297: // {time} - { - lval.item = string(l.val) - return timeType - } -yyrule298: // {timestamp} - { - lval.item = string(l.val) - return timestampType - } -yyrule299: // {datetime} - { - lval.item = string(l.val) - return datetimeType - } -yyrule300: // {year} - { - lval.item = string(l.val) - return yearType - } -yyrule301: // {char} - { - lval.item = string(l.val) - return charType - } -yyrule302: // {varchar} - { - lval.item = string(l.val) - return varcharType - } -yyrule303: // {binary} - { - lval.item = string(l.val) - return binaryType - } -yyrule304: // {varbinary} - { - lval.item = string(l.val) - return varbinaryType - } -yyrule305: // {tinyblob} - { - lval.item = string(l.val) - return tinyblobType - } -yyrule306: // {blob} - { - lval.item = string(l.val) - return blobType - } -yyrule307: // {mediumblob} - { - lval.item = string(l.val) - return mediumblobType - } -yyrule308: // {longblob} - { - lval.item = string(l.val) - return longblobType - } -yyrule309: // {tinytext} - { - lval.item = string(l.val) - return tinytextType - } -yyrule310: // {mediumtext} - { - lval.item = string(l.val) - return mediumtextType - } -yyrule311: // {text} - { - lval.item = string(l.val) - return textType - } -yyrule312: // {longtext} - { - lval.item = string(l.val) - return longtextType - } -yyrule313: // {bool} - { - lval.item = string(l.val) - return boolType - } -yyrule314: // {boolean} - { - lval.item = string(l.val) - return booleanType - } -yyrule315: // {byte} - { - lval.item = string(l.val) - return byteType - } -yyrule316: // {int} - { - lval.item = string(l.val) - return intType - } -yyrule317: // {integer} - { - lval.item = string(l.val) - return integerType - } -yyrule318: // {ident} - { - lval.item = string(l.val) - return l.handleIdent(lval) - } -yyrule319: // . - { - return c0 - } - panic("unreachable") - - goto yyabort // silence unused label error - -yyabort: // no lexem recognized - return int(unicode.ReplacementChar) -} - -func (l *lexer) npos() (line, col int) { - if line, col = l.nline, l.ncol; col == 0 { - line-- - col = l.lcol + 1 - } - return -} - -func (l *lexer) str(lval *yySymType, pref string) int { - l.sc = 0 - // TODO: performance issue. - s := string(l.stringLit) - l.stringLit = l.stringLit[0:0] - if pref == "'" { - s = strings.Replace(s, "\\'", "'", -1) - s = strings.TrimSuffix(s, "'") + "\"" - pref = "\"" - } - v := stringutil.RemoveUselessBackslash(pref + s) - v, err := strconv.Unquote(v) - if err != nil { - v = strings.TrimSuffix(s, pref) - } - lval.item = v - return stringLit -} - -func (l *lexer) trimIdent(idt string) string { - idt = strings.TrimPrefix(idt, "`") - idt = strings.TrimSuffix(idt, "`") - return idt -} - -func (l *lexer) int(lval *yySymType) int { - n, err := strconv.ParseUint(string(l.val), 0, 64) - if err != nil { - l.errf("integer literal: %v", err) - return int(unicode.ReplacementChar) - } - - switch { - case n < math.MaxInt64: - lval.item = int64(n) - default: - lval.item = uint64(n) - } - return intLit -} - -func (l *lexer) float(lval *yySymType) int { - n, err := strconv.ParseFloat(string(l.val), 64) - if err != nil { - l.errf("float literal: %v", err) - return int(unicode.ReplacementChar) - } - - lval.item = float64(n) - return floatLit -} - -// https://dev.mysql.com/doc/refman/5.7/en/hexadecimal-literals.html -func (l *lexer) hex(lval *yySymType) int { - s := string(l.val) - h, err := mysql.ParseHex(s) - if err != nil { - l.errf("hexadecimal literal: %v", err) - return int(unicode.ReplacementChar) - } - lval.item = h - return hexLit -} - -// https://dev.mysql.com/doc/refman/5.7/en/bit-type.html -func (l *lexer) bit(lval *yySymType) int { - s := string(l.val) - b, err := mysql.ParseBit(s, -1) - if err != nil { - l.errf("bit literal: %v", err) - return int(unicode.ReplacementChar) - } - lval.item = b - return bitLit -} - -func (l *lexer) handleIdent(lval *yySymType) int { - s := lval.item.(string) - // A character string literal may have an optional character set introducer and COLLATE clause: - // [_charset_name]'string' [COLLATE collation_name] - // See: https://dev.mysql.com/doc/refman/5.7/en/charset-literal.html - if !strings.HasPrefix(s, "_") { - return identifier - } - cs, _, err := charset.GetCharsetInfo(s[1:]) - if err != nil { - return identifier - } - lval.item = cs - return underscoreCS -} diff --git a/vendor/github.com/pingcap/tidb/parser/yy_parser.go b/vendor/github.com/pingcap/tidb/parser/yy_parser.go deleted file mode 100644 index c56f639f8..000000000 --- a/vendor/github.com/pingcap/tidb/parser/yy_parser.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package parser - -import ( - "regexp" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" -) - -// Error instances. -var ( - ErrSyntax = terror.ClassParser.New(CodeSyntaxErr, "syntax error") -) - -// Error codes. -const ( - CodeSyntaxErr terror.ErrCode = 1 -) - -var ( - specCodePattern = regexp.MustCompile(`\/\*!(M?[0-9]{5,6})?([^*]|\*+[^*/])*\*+\/`) - specCodeStart = regexp.MustCompile(`^\/\*!(M?[0-9]{5,6} )?[ \t]*`) - specCodeEnd = regexp.MustCompile(`[ \t]*\*\/$`) -) - -func trimComment(txt string) string { - txt = specCodeStart.ReplaceAllString(txt, "") - return specCodeEnd.ReplaceAllString(txt, "") -} - -// See: http://dev.mysql.com/doc/refman/5.7/en/comments.html -// Convert "/*!VersionNumber MySQL-specific-code */" to "MySQL-specific-code". -// TODO: Find a better way: -// 1. RegExpr is slow. -// 2. Handle nested comment. -func handleMySQLSpecificCode(sql string) string { - if strings.Index(sql, "/*!") == -1 { - // Fast way to check if text contains MySQL-specific code. - return sql - } - // SQL text contains MySQL-specific code. We should convert it to normal SQL text. - return specCodePattern.ReplaceAllStringFunc(sql, trimComment) -} - -// Parse parses a query string to raw ast.StmtNode. -// If charset or collation is "", default charset and collation will be used. -func Parse(sql, charset, collation string) ([]ast.StmtNode, error) { - if charset == "" { - charset = mysql.DefaultCharset - } - if collation == "" { - collation = mysql.DefaultCollationName - } - sql = handleMySQLSpecificCode(sql) - l := NewLexer(sql) - l.SetCharsetInfo(charset, collation) - yyParse(l) - if len(l.Errors()) != 0 { - return nil, errors.Trace(l.Errors()[0]) - } - return l.Stmts(), nil -} - -// ParseOneStmt parses a query and returns an ast.StmtNode. -// The query must have one statement, otherwise ErrSyntax is returned. -func ParseOneStmt(sql, charset, collation string) (ast.StmtNode, error) { - stmts, err := Parse(sql, charset, collation) - if err != nil { - return nil, errors.Trace(err) - } - if len(stmts) != 1 { - return nil, ErrSyntax - } - return stmts[0], nil -} diff --git a/vendor/github.com/pingcap/tidb/perfschema/const.go b/vendor/github.com/pingcap/tidb/perfschema/const.go deleted file mode 100644 index f0e789063..000000000 --- a/vendor/github.com/pingcap/tidb/perfschema/const.go +++ /dev/null @@ -1,692 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package perfschema - -// Performance Schema Name. -const ( - Name = "PERFORMANCE_SCHEMA" -) - -// Definition order same as MySQL's reference manual, so don't bother to -// adjust according to alphabetical order. -const ( - TableSetupActors = "SETUP_ACTORS" - TableSetupObjects = "SETUP_OBJECTS" - TableSetupInstruments = "SETUP_INSTRUMENTS" - TableSetupConsumers = "SETUP_CONSUMERS" - TableSetupTimers = "SETUP_TIMERS" - TableStmtsCurrent = "EVENTS_STATEMENTS_CURRENT" - TableStmtsHistory = "EVENTS_STATEMENTS_HISTORY" - TableStmtsHistoryLong = "EVENTS_STATEMENTS_HISTORY_LONG" - TablePreparedStmtsInstances = "PREPARED_STATEMENTS_INSTANCES" - TableTransCurrent = "EVENTS_TRANSACTIONS_CURRENT" - TableTransHistory = "EVENTS_TRANSACTIONS_HISTORY" - TableTransHistoryLong = "EVENTS_TRANSACTIONS_HISTORY_LONG" - TableStagesCurrent = "EVENTS_STAGES_CURRENT" - TableStagesHistory = "EVENTS_STAGES_HISTORY" - TableStagesHistoryLong = "EVENTS_STAGES_HISTORY_LONG" -) - -// PerfSchemaTables is a shortcut to involve all table names. -var PerfSchemaTables = []string{ - TableSetupActors, - TableSetupObjects, - TableSetupInstruments, - TableSetupConsumers, - TableSetupTimers, - TableStmtsCurrent, - TableStmtsHistory, - TableStmtsHistoryLong, - TablePreparedStmtsInstances, - TableTransCurrent, - TableTransHistory, - TableTransHistoryLong, - TableStagesCurrent, - TableStagesHistory, - TableStagesHistoryLong, -} - -// ColumnSetupActors contains the column name definitions for table setup_actors, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.setup_actors ( -// HOST CHAR(60) NOT NULL DEFAULT '%', -// USER CHAR(32) NOT NULL DEFAULT '%', -// ROLE CHAR(16) NOT NULL DEFAULT '%', -// ENABLED ENUM('YES','NO') NOT NULL DEFAULT 'YES', -// HISTORY ENUM('YES','NO') NOT NULL DEFAULT 'YES'); -var ColumnSetupActors = []string{"HOST", "USER", "ROLE", "ENABLED", "HISTORY"} - -// ColumnSetupObjects contains the column name definitions for table setup_objects, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.setup_objects ( -// OBJECT_TYPE ENUM('EVENT','FUNCTION','TABLE') NOT NULL DEFAULT 'TABLE', -// OBJECT_SCHEMA VARCHAR(64) DEFAULT '%', -// OBJECT_NAME VARCHAR(64) NOT NULL DEFAULT '%', -// ENABLED ENUM('YES','NO') NOT NULL DEFAULT 'YES', -// TIMED ENUM('YES','NO') NOT NULL DEFAULT 'YES'); -var ColumnSetupObjects = []string{"OBJECT_TYPE", "OBJECT_SCHEMA", "OBJECT_NAME", "ENABLED", "TIMED"} - -// ColumnSetupInstruments contains the column name definitions for table setup_instruments, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.setup_instruments ( -// NAME VARCHAR(128) NOT NULL, -// ENABLED ENUM('YES','NO') NOT NULL, -// TIMED ENUM('YES','NO') NOT NULL); -var ColumnSetupInstruments = []string{"NAMED", "ENABLED", "TIMED"} - -// ColumnSetupConsumers contains the column name definitions for table setup_consumers, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.setup_consumers ( -// NAME VARCHAR(64) NOT NULL, -// ENABLED ENUM('YES','NO') NOT NULL); -var ColumnSetupConsumers = []string{"NAMED", "ENABLED"} - -// ColumnSetupTimers contains the column name definitions for table setup_timers, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.setup_timers ( -// NAME VARCHAR(64) NOT NULL, -// TIMER_NAME ENUM('NANOSECOND','MICROSECOND','MILLISECOND') NOT NULL); -var ColumnSetupTimers = []string{"NAME", "TIMER_NAME"} - -// ColumnStmtsCurrent contains the column name definitions for table events_statements_current, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_statements_current ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, -// SQL_TEXT LONGTEXT, -// DIGEST VARCHAR(32), -// DIGEST_TEXT LONGTEXT, -// CURRENT_SCHEMA VARCHAR(64), -// OBJECT_TYPE VARCHAR(64), -// OBJECT_SCHEMA VARCHAR(64), -// OBJECT_NAME VARCHAR(64), -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// MYSQL_ERRNO INT(11), -// RETURNED_SQLSTATE VARCHAR(5), -// MESSAGE_TEXT VARCHAR(128), -// ERRORS BIGINT(20) UNSIGNED NOT NULL, -// WARNINGS BIGINT(20) UNSIGNED NOT NULL, -// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, -// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, -// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, -// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, -// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, -// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), -// NESTING_EVENT_LEVEL INT(11)); -var ColumnStmtsCurrent = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "LOCK_TIME", - "SQL_TEXT", - "DIGEST", - "DIGEST_TEXT", - "CURRENT_SCHEMA", - "OBJECT_TYPE", - "OBJECT_SCHEMA", - "OBJECT_NAME", - "OBJECT_INSTANCE_BEGIN", - "MYSQL_ERRNO", - "RETURNED_SQLSTATE", - "MESSAGE_TEXT", - "ERRORS", - "WARNINGS", - "ROWS_AFFECTED", - "ROWS_SENT", - "ROWS_EXAMINED", - "CREATED_TMP_DISK_TABLES", - "CREATED_TMP_TABLES", - "SELECT_FULL_JOIN", - "SELECT_FULL_RANGE_JOIN", - "SELECT_RANGE", - "SELECT_RANGE_CHECK", - "SELECT_SCAN", - "SORT_MERGE_PASSES", - "SORT_RANGE", - "SORT_ROWS", - "SORT_SCAN", - "NO_INDEX_USED", - "NO_GOOD_INDEX_USED", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", - "NESTING_EVENT_LEVEL", -} - -// ColumnStmtsHistory contains the column name definitions for table events_statements_history, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_statements_history ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, -// SQL_TEXT LONGTEXT, -// DIGEST VARCHAR(32), -// DIGEST_TEXT LONGTEXT, -// CURRENT_SCHEMA VARCHAR(64), -// OBJECT_TYPE VARCHAR(64), -// OBJECT_SCHEMA VARCHAR(64), -// OBJECT_NAME VARCHAR(64), -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// MYSQL_ERRNO INT(11), -// RETURNED_SQLSTATE VARCHAR(5), -// MESSAGE_TEXT VARCHAR(128), -// ERRORS BIGINT(20) UNSIGNED NOT NULL, -// WARNINGS BIGINT(20) UNSIGNED NOT NULL, -// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, -// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, -// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, -// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, -// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, -// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), -// NESTING_EVENT_LEVEL INT(11)); -var ColumnStmtsHistory = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "LOCK_TIME", - "SQL_TEXT", - "DIGEST", - "DIGEST_TEXT", - "CURRENT_SCHEMA", - "OBJECT_TYPE", - "OBJECT_SCHEMA", - "OBJECT_NAME", - "OBJECT_INSTANCE_BEGIN", - "MYSQL_ERRNO", - "RETURNED_SQLSTATE", - "MESSAGE_TEXT", - "ERRORS", - "WARNINGS", - "ROWS_AFFECTED", - "ROWS_SENT", - "ROWS_EXAMINED", - "CREATED_TMP_DISK_TABLES", - "CREATED_TMP_TABLES", - "SELECT_FULL_JOIN", - "SELECT_FULL_RANGE_JOIN", - "SELECT_RANGE", - "SELECT_RANGE_CHECK", - "SELECT_SCAN", - "SORT_MERGE_PASSES", - "SORT_RANGE", - "SORT_ROWS", - "SORT_SCAN", - "NO_INDEX_USED", - "NO_GOOD_INDEX_USED", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", - "NESTING_EVENT_LEVEL", -} - -// ColumnStmtsHistoryLong contains the column name definitions for table events_statements_history_long, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_statements_history_long ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, -// SQL_TEXT LONGTEXT, -// DIGEST VARCHAR(32), -// DIGEST_TEXT LONGTEXT, -// CURRENT_SCHEMA VARCHAR(64), -// OBJECT_TYPE VARCHAR(64), -// OBJECT_SCHEMA VARCHAR(64), -// OBJECT_NAME VARCHAR(64), -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// MYSQL_ERRNO INT(11), -// RETURNED_SQLSTATE VARCHAR(5), -// MESSAGE_TEXT VARCHAR(128), -// ERRORS BIGINT(20) UNSIGNED NOT NULL, -// WARNINGS BIGINT(20) UNSIGNED NOT NULL, -// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, -// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, -// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, -// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, -// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, -// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), -// NESTING_EVENT_LEVEL INT(11)); -var ColumnStmtsHistoryLong = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "LOCK_TIME", - "SQL_TEXT", - "DIGEST", - "DIGEST_TEXT", - "CURRENT_SCHEMA", - "OBJECT_TYPE", - "OBJECT_SCHEMA", - "OBJECT_NAME", - "OBJECT_INSTANCE_BEGIN", - "MYSQL_ERRNO", - "RETURNED_SQLSTATE", - "MESSAGE_TEXT", - "ERRORS", - "WARNINGS", - "ROWS_AFFECTED", - "ROWS_SENT", - "ROWS_EXAMINED", - "CREATED_TMP_DISK_TABLES", - "CREATED_TMP_TABLES", - "SELECT_FULL_JOIN", - "SELECT_FULL_RANGE_JOIN", - "SELECT_RANGE", - "SELECT_RANGE_CHECK", - "SELECT_SCAN", - "SORT_MERGE_PASSES", - "SORT_RANGE", - "SORT_ROWS", - "SORT_SCAN", - "NO_INDEX_USED", - "NO_GOOD_INDEX_USED", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", - "NESTING_EVENT_LEVEL", -} - -// ColumnPreparedStmtsInstances contains the column name definitions for table prepared_statements_instances, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.prepared_statements_instances ( -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED NOT NULL, -// STATEMENT_ID BIGINT(20) UNSIGNED NOT NULL, -// STATEMENT_NAME VARCHAR(64), -// SQL_TEXT LONGTEXT NOT NULL, -// OWNER_THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// OWNER_EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// OWNER_OBJECT_TYPE ENUM('EVENT','FUNCTION','TABLE'), -// OWNER_OBJECT_SCHEMA VARCHAR(64), -// OWNER_OBJECT_NAME VARCHAR(64), -// TIMER_PREPARE BIGINT(20) UNSIGNED NOT NULL, -// COUNT_REPREPARE BIGINT(20) UNSIGNED NOT NULL, -// COUNT_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// SUM_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// MIN_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// AVG_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// MAX_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// SUM_LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, -// SUM_ERRORS BIGINT(20) UNSIGNED NOT NULL, -// SUM_WARNINGS BIGINT(20) UNSIGNED NOT NULL, -// SUM_ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, -// SUM_ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, -// SUM_ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, -// SUM_CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SUM_CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SUM_SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, -// SUM_SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SUM_SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, -// SUM_SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SUM_NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// SUM_NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL); -var ColumnPreparedStmtsInstances = []string{ - "OBJECT_INSTANCE_BEGIN", - "STATEMENT_ID", - "STATEMENT_NAME", - "SQL_TEXT", - "OWNER_THREAD_ID", - "OWNER_EVENT_ID", - "OWNER_OBJECT_TYPE", - "OWNER_OBJECT_SCHEMA", - "OWNER_OBJECT_NAME", - "TIMER_PREPARE", - "COUNT_REPREPARE", - "COUNT_EXECUTE", - "SUM_TIMER_EXECUTE", - "MIN_TIMER_EXECUTE", - "AVG_TIMER_EXECUTE", - "MAX_TIMER_EXECUTE", - "SUM_LOCK_TIME", - "SUM_ERRORS", - "SUM_WARNINGS", - "SUM_ROWS_AFFECTED", - "SUM_ROWS_SENT", - "SUM_ROWS_EXAMINED", - "SUM_CREATED_TMP_DISK_TABLES", - "SUM_CREATED_TMP_TABLES", - "SUM_SELECT_FULL_JOIN", - "SUM_SELECT_FULL_RANGE_JOIN", - "SUM_SELECT_RANGE", - "SUM_SELECT_RANGE_CHECK", - "SUM_SELECT_SCAN", - "SUM_SORT_MERGE_PASSES", - "SUM_SORT_RANGE", - "SUM_SORT_ROWS", - "SUM_SORT_SCAN", - "SUM_NO_INDEX_USED", - "SUM_NO_GOOD_INDEX_USED", -} - -// ColumnTransCurrent contains the column name definitions for table events_transactions_current, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_transactions_current ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), -// TRX_ID BIGINT(20) UNSIGNED, -// GTID VARCHAR(64), -// XID_FORMAT_ID INT(11), -// XID_GTRID VARCHAR(130), -// XID_BQUAL VARCHAR(130), -// XA_STATE VARCHAR(64), -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), -// ISOLATION_LEVEL VARCHAR(64), -// AUTOCOMMIT ENUM('YES','NO') NOT NULL, -// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, -// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, -// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -var ColumnTransCurrent = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "STATE", - "TRX_ID", - "GTID", - "XID_FORMAT_ID", - "XID_GTRID", - "XID_BQUAL", - "XA_STATE", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "ACCESS_MODE", - "ISOLATION_LEVEL", - "AUTOCOMMIT", - "NUMBER_OF_SAVEPOINTS", - "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", - "NUMBER_OF_RELEASE_SAVEPOINT", - "OBJECT_INSTANCE_BEGIN", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", -} - -// ColumnTransHistory contains the column name definitions for table events_transactions_history, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_transactions_history ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), -// TRX_ID BIGINT(20) UNSIGNED, -// GTID VARCHAR(64), -// XID_FORMAT_ID INT(11), -// XID_GTRID VARCHAR(130), -// XID_BQUAL VARCHAR(130), -// XA_STATE VARCHAR(64), -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), -// ISOLATION_LEVEL VARCHAR(64), -// AUTOCOMMIT ENUM('YES','NO') NOT NULL, -// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, -// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, -// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -var ColumnTransHistory = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "STATE", - "TRX_ID", - "GTID", - "XID_FORMAT_ID", - "XID_GTRID", - "XID_BQUAL", - "XA_STATE", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "ACCESS_MODE", - "ISOLATION_LEVEL", - "AUTOCOMMIT", - "NUMBER_OF_SAVEPOINTS", - "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", - "NUMBER_OF_RELEASE_SAVEPOINT", - "OBJECT_INSTANCE_BEGIN", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", -} - -// ColumnTransHistoryLong contains the column name definitions for table events_transactions_history_long, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_transactions_history_long ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), -// TRX_ID BIGINT(20) UNSIGNED, -// GTID VARCHAR(64), -// XID_FORMAT_ID INT(11), -// XID_GTRID VARCHAR(130), -// XID_BQUAL VARCHAR(130), -// XA_STATE VARCHAR(64), -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), -// ISOLATION_LEVEL VARCHAR(64), -// AUTOCOMMIT ENUM('YES','NO') NOT NULL, -// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, -// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, -// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -var ColumnTransHistoryLong = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "STATE", - "TRX_ID", - "GTID", - "XID_FORMAT_ID", - "XID_GTRID", - "XID_BQUAL", - "XA_STATE", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "ACCESS_MODE", - "ISOLATION_LEVEL", - "AUTOCOMMIT", - "NUMBER_OF_SAVEPOINTS", - "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", - "NUMBER_OF_RELEASE_SAVEPOINT", - "OBJECT_INSTANCE_BEGIN", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", -} - -// ColumnStagesCurrent contains the column name definitions for table events_stages_current, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_stages_current ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// WORK_COMPLETED BIGINT(20) UNSIGNED, -// WORK_ESTIMATED BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -var ColumnStagesCurrent = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "WORK_COMPLETED", - "WORK_ESTIMATED", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", -} - -// ColumnStagesHistory contains the column name definitions for table events_stages_history, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_stages_history ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// WORK_COMPLETED BIGINT(20) UNSIGNED, -// WORK_ESTIMATED BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -var ColumnStagesHistory = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "WORK_COMPLETED", - "WORK_ESTIMATED", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", -} - -// ColumnStagesHistoryLong contains the column name definitions for table events_stages_history_long, same as MySQL. -// -// CREATE TABLE if not exists performance_schema.events_stages_history_long ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// WORK_COMPLETED BIGINT(20) UNSIGNED, -// WORK_ESTIMATED BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -var ColumnStagesHistoryLong = []string{ - "THREAD_ID", - "EVENT_ID", - "END_EVENT_ID", - "EVENT_NAME", - "SOURCE", - "TIMER_START", - "TIMER_END", - "TIMER_WAIT", - "WORK_COMPLETED", - "WORK_ESTIMATED", - "NESTING_EVENT_ID", - "NESTING_EVENT_TYPE", -} diff --git a/vendor/github.com/pingcap/tidb/perfschema/init.go b/vendor/github.com/pingcap/tidb/perfschema/init.go deleted file mode 100644 index 39e41035b..000000000 --- a/vendor/github.com/pingcap/tidb/perfschema/init.go +++ /dev/null @@ -1,461 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package perfschema - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/table/tables" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/types" -) - -type columnInfo struct { - tp byte - size int - flag uint - deflt interface{} - elems []string -} - -var setupActorsCols = []columnInfo{ - {mysql.TypeString, 60, mysql.NotNullFlag, `%`, nil}, - {mysql.TypeString, 32, mysql.NotNullFlag, `%`, nil}, - {mysql.TypeString, 16, mysql.NotNullFlag, `%`, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, -} - -var setupObjectsCols = []columnInfo{ - {mysql.TypeEnum, -1, mysql.NotNullFlag, "TABLE", []string{"EVENT", "FUNCTION", "TABLE"}}, - {mysql.TypeVarchar, 64, 0, `%`, nil}, - {mysql.TypeVarchar, 64, mysql.NotNullFlag, `%`, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, -} - -var setupInstrumentsCols = []columnInfo{ - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, -} - -var setupConsumersCols = []columnInfo{ - {mysql.TypeVarchar, 64, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, -} - -var setupTimersCols = []columnInfo{ - {mysql.TypeVarchar, 64, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"NANOSECOND", "MICROSECOND", "MILLISECOND"}}, -} - -var stmtsCurrentCols = []columnInfo{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLongBlob, -1, 0, nil, nil}, - {mysql.TypeVarchar, 32, 0, nil, nil}, - {mysql.TypeLongBlob, -1, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLong, 11, 0, nil, nil}, - {mysql.TypeVarchar, 5, 0, nil, nil}, - {mysql.TypeVarchar, 128, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - {mysql.TypeLong, 11, 0, nil, nil}, -} - -var preparedStmtsInstancesCols = []columnInfo{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLongBlob, -1, mysql.NotNullFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"EVENT", "FUNCTION", "TABLE"}}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, -} - -var transCurrentCols = []columnInfo{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"ACTIVE", "COMMITTED", "ROLLED BACK"}}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLong, 11, 0, nil, nil}, - {mysql.TypeVarchar, 130, 0, nil, nil}, - {mysql.TypeVarchar, 130, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"READ ONLY", "READ WRITE"}}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, -} - -var stagesCurrentCols = []columnInfo{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, -} - -func setColumnID(meta *model.TableInfo, store kv.Storage) error { - var err error - for _, c := range meta.Columns { - c.ID, err = genGlobalID(store) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -func genGlobalID(store kv.Storage) (int64, error) { - var globalID int64 - err := kv.RunInNewTxn(store, true, func(txn kv.Transaction) error { - var err error - globalID, err = meta.NewMeta(txn).GenGlobalID() - return errors.Trace(err) - }) - return globalID, errors.Trace(err) -} - -func createMemoryTable(meta *model.TableInfo, alloc autoid.Allocator) (table.Table, error) { - tbl, _ := tables.MemoryTableFromMeta(alloc, meta) - return tbl, nil -} - -func (ps *perfSchema) buildTables() error { - tbls := make([]*model.TableInfo, 0, len(ps.tables)) - ps.mTables = make(map[string]table.Table, len(ps.tables)) - dbID, err := genGlobalID(ps.store) - if err != nil { - return errors.Trace(err) - } - // Set PKIsHandle - // TableStmtsCurrent use THREAD_ID as PK and handle - tb := ps.tables[TableStmtsHistory] - tb.PKIsHandle = true - tb.Columns[0].Flag = tb.Columns[0].Flag | mysql.PriKeyFlag - - var tbl table.Table - for name, meta := range ps.tables { - tbls = append(tbls, meta) - meta.ID, err = genGlobalID(ps.store) - if err != nil { - return errors.Trace(err) - } - err = setColumnID(meta, ps.store) - if err != nil { - return errors.Trace(err) - } - alloc := autoid.NewMemoryAllocator(dbID) - tbl, err = createMemoryTable(meta, alloc) - if err != nil { - return errors.Trace(err) - } - ps.mTables[name] = tbl - } - ps.dbInfo = &model.DBInfo{ - ID: dbID, - Name: model.NewCIStr(Name), - Charset: mysql.DefaultCharset, - Collate: mysql.DefaultCollationName, - Tables: tbls, - } - return nil -} - -func (ps *perfSchema) buildModel(tbName string, colNames []string, cols []columnInfo) { - rcols := make([]*model.ColumnInfo, len(cols)) - for i, col := range cols { - var ci *model.ColumnInfo - if col.elems == nil { - ci = buildUsualColumnInfo(i, colNames[i], col.tp, col.size, col.flag, col.deflt) - } else { - ci = buildEnumColumnInfo(i, colNames[i], col.elems, col.flag, col.deflt) - } - rcols[i] = ci - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: rcols, - } -} - -func buildUsualColumnInfo(offset int, name string, tp byte, size int, flag uint, def interface{}) *model.ColumnInfo { - mCharset := charset.CharsetBin - mCollation := charset.CharsetBin - if tp == mysql.TypeString || tp == mysql.TypeVarchar || tp == mysql.TypeBlob || tp == mysql.TypeLongBlob { - mCharset = mysql.DefaultCharset - mCollation = mysql.DefaultCollationName - } - if def == nil { - flag |= mysql.NoDefaultValueFlag - } - // TODO: does TypeLongBlob need size? - fieldType := types.FieldType{ - Charset: mCharset, - Collate: mCollation, - Tp: tp, - Flen: size, - Flag: uint(flag), - } - colInfo := &model.ColumnInfo{ - Name: model.NewCIStr(name), - Offset: offset, - FieldType: fieldType, - DefaultValue: def, - State: model.StatePublic, - } - return colInfo -} - -func buildEnumColumnInfo(offset int, name string, elems []string, flag uint, def interface{}) *model.ColumnInfo { - mCharset := charset.CharsetBin - mCollation := charset.CharsetBin - if def == nil { - flag |= mysql.NoDefaultValueFlag - } - fieldType := types.FieldType{ - Charset: mCharset, - Collate: mCollation, - Tp: mysql.TypeEnum, - Flag: uint(flag), - Elems: elems, - } - colInfo := &model.ColumnInfo{ - Name: model.NewCIStr(name), - Offset: offset, - FieldType: fieldType, - DefaultValue: def, - State: model.StatePublic, - } - return colInfo -} - -func (ps *perfSchema) initRecords(tbName string, records [][]types.Datum) error { - tbl, ok := ps.mTables[tbName] - if !ok { - return errors.Errorf("Unknown PerformanceSchema table: %s", tbName) - } - for _, rec := range records { - _, err := tbl.AddRecord(nil, rec) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -var setupTimersRecords [][]types.Datum - -func (ps *perfSchema) initialize() (err error) { - ps.tables = make(map[string]*model.TableInfo) - - allColDefs := [][]columnInfo{ - setupActorsCols, - setupObjectsCols, - setupInstrumentsCols, - setupConsumersCols, - setupTimersCols, - stmtsCurrentCols, - stmtsCurrentCols, // same as above - stmtsCurrentCols, // same as above - preparedStmtsInstancesCols, - transCurrentCols, - transCurrentCols, // same as above - transCurrentCols, // same as above - stagesCurrentCols, - stagesCurrentCols, // same as above - stagesCurrentCols, // same as above - } - - allColNames := [][]string{ - ColumnSetupActors, - ColumnSetupObjects, - ColumnSetupInstruments, - ColumnSetupConsumers, - ColumnSetupTimers, - ColumnStmtsCurrent, - ColumnStmtsHistory, - ColumnStmtsHistoryLong, - ColumnPreparedStmtsInstances, - ColumnStmtsCurrent, - ColumnStmtsHistory, - ColumnStmtsHistoryLong, - ColumnStagesCurrent, - ColumnStagesHistory, - ColumnStagesHistoryLong, - } - - // initialize all table, column and result field definitions - for i, def := range allColDefs { - ps.buildModel(PerfSchemaTables[i], allColNames[i], def) - } - err = ps.buildTables() - if err != nil { - return errors.Trace(err) - } - - setupActorsRecords := [][]types.Datum{ - types.MakeDatums(`%`, `%`, `%`, mysql.Enum{Name: "YES", Value: 1}, mysql.Enum{Name: "YES", Value: 1}), - } - err = ps.initRecords(TableSetupActors, setupActorsRecords) - if err != nil { - return errors.Trace(err) - } - - setupObjectsRecords := [][]types.Datum{ - types.MakeDatums(mysql.Enum{Name: "EVENT", Value: 1}, "mysql", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "EVENT", Value: 1}, "performance_schema", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "EVENT", Value: 1}, "information_schema", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "EVENT", Value: 1}, `%`, `%`, mysql.Enum{Name: "YES", Value: 1}, mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums(mysql.Enum{Name: "FUNCTION", Value: 2}, "mysql", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "FUNCTION", Value: 2}, "performance_schema", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "FUNCTION", Value: 2}, "information_schema", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "FUNCTION", Value: 2}, `%`, `%`, mysql.Enum{Name: "YES", Value: 1}, mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums(mysql.Enum{Name: "TABLE", Value: 3}, "mysql", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "TABLE", Value: 3}, "performance_schema", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "TABLE", Value: 3}, "information_schema", `%`, mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums(mysql.Enum{Name: "TABLE", Value: 3}, `%`, `%`, mysql.Enum{Name: "YES", Value: 1}, mysql.Enum{Name: "YES", Value: 1}), - } - err = ps.initRecords(TableSetupObjects, setupObjectsRecords) - if err != nil { - return errors.Trace(err) - } - - setupConsumersRecords := [][]types.Datum{ - types.MakeDatums("events_stages_current", mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums("events_stages_history", mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums("events_stages_history_long", mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums("events_statements_current", mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums("events_statements_history", mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums("events_statements_history_long", mysql.Enum{Name: "NO", Value: 2}), - types.MakeDatums("events_transactions_current", mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums("events_transactions_history", mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums("events_transactions_history_long", mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums("global_instrumentation", mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums("thread_instrumentation", mysql.Enum{Name: "YES", Value: 1}), - types.MakeDatums("statements_digest", mysql.Enum{Name: "YES", Value: 1}), - } - err = ps.initRecords(TableSetupConsumers, setupConsumersRecords) - if err != nil { - return errors.Trace(err) - } - - setupTimersRecords = [][]types.Datum{ - types.MakeDatums("stage", mysql.Enum{Name: "NANOSECOND", Value: 1}), - types.MakeDatums("statement", mysql.Enum{Name: "NANOSECOND", Value: 1}), - types.MakeDatums("transaction", mysql.Enum{Name: "NANOSECOND", Value: 1}), - } - err = ps.initRecords(TableSetupTimers, setupTimersRecords) - if err != nil { - return errors.Trace(err) - } - - return nil -} - -func (ps *perfSchema) GetDBMeta() *model.DBInfo { - return ps.dbInfo -} - -func (ps *perfSchema) GetTable(name string) (table.Table, bool) { - tbl, ok := ps.mTables[name] - return tbl, ok -} diff --git a/vendor/github.com/pingcap/tidb/perfschema/instrument.go b/vendor/github.com/pingcap/tidb/perfschema/instrument.go deleted file mode 100644 index 43014225e..000000000 --- a/vendor/github.com/pingcap/tidb/perfschema/instrument.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package perfschema - -import ( - "fmt" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/types" -) - -// EnumCallerName is used as a parameter to avoid calling runtime.Caller(1) since -// it is too expensive (500ns+ per call), we don't want to invoke it repeatedly for -// each instrument. -type EnumCallerName int - -const ( - // CallerNameSessionExecute is for session.go:Execute() method. - CallerNameSessionExecute EnumCallerName = iota + 1 -) - -const ( - stageInstrumentPrefix = "stage/" - statementInstrumentPrefix = "statement/" - transactionInstrumentPrefix = "transaction" -) - -// Flag indicators for table setup_timers. -const ( - flagStage = iota + 1 - flagStatement - flagTransaction -) - -type enumTimerName int - -// Enum values for the TIMER_NAME columns. -// This enum is found in the following tables: -// - performance_schema.setup_timer (TIMER_NAME) -const ( - timerNameNone enumTimerName = iota - timerNameNanosec - timerNameMicrosec - timerNameMillisec -) - -var ( - callerNames = make(map[EnumCallerName]string) -) - -// addInstrument is used to add an item to setup_instruments table. -func (ps *perfSchema) addInstrument(name string) (uint64, error) { - record := types.MakeDatums(name, mysql.Enum{Name: "YES", Value: 1}, mysql.Enum{Name: "YES", Value: 1}) - tbl := ps.mTables[TableSetupInstruments] - handle, err := tbl.AddRecord(nil, record) - return uint64(handle), errors.Trace(err) -} - -func (ps *perfSchema) getTimerName(flag int) (enumTimerName, error) { - if flag < 0 || flag >= len(setupTimersRecords) { - return timerNameNone, errors.Errorf("Unknown timerName flag %d", flag) - } - timerName := fmt.Sprintf("%s", setupTimersRecords[flag][1].GetString()) - switch timerName { - case "NANOSECOND": - return timerNameNanosec, nil - case "MICROSECOND": - return timerNameMicrosec, nil - case "MILLISECOND": - return timerNameMillisec, nil - } - return timerNameNone, nil -} diff --git a/vendor/github.com/pingcap/tidb/perfschema/perfschema.go b/vendor/github.com/pingcap/tidb/perfschema/perfschema.go deleted file mode 100644 index 91915a548..000000000 --- a/vendor/github.com/pingcap/tidb/perfschema/perfschema.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package perfschema - -import ( - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/table" -) - -// StatementInstrument defines the methods for statement instrumentation points -type StatementInstrument interface { - RegisterStatement(category, name string, elem interface{}) - - StartStatement(sql string, connID uint64, callerName EnumCallerName, elem interface{}) *StatementState - - EndStatement(state *StatementState) -} - -// PerfSchema defines the methods to be invoked by the executor -type PerfSchema interface { - - // For statement instrumentation only. - StatementInstrument - - // GetDBMeta returns db info for PerformanceSchema. - GetDBMeta() *model.DBInfo - // GetTable returns table instance for name. - GetTable(name string) (table.Table, bool) -} - -type perfSchema struct { - store kv.Storage - dbInfo *model.DBInfo - tables map[string]*model.TableInfo - mTables map[string]table.Table // MemoryTables for perfSchema - - // Used for TableStmtsHistory - historyHandles []int64 - historyCursor int -} - -var _ PerfSchema = (*perfSchema)(nil) - -// PerfHandle is the only access point for the in-memory performance schema information -var ( - PerfHandle PerfSchema -) - -// NewPerfHandle creates a new perfSchema on store. -func NewPerfHandle(store kv.Storage) PerfSchema { - schema := PerfHandle.(*perfSchema) - schema.store = store - schema.historyHandles = make([]int64, 0, stmtsHistoryElemMax) - _ = schema.initialize() - registerStatements() - return PerfHandle -} - -func init() { - schema := &perfSchema{} - PerfHandle = schema -} diff --git a/vendor/github.com/pingcap/tidb/perfschema/statement.go b/vendor/github.com/pingcap/tidb/perfschema/statement.go deleted file mode 100644 index 0e2717c3d..000000000 --- a/vendor/github.com/pingcap/tidb/perfschema/statement.go +++ /dev/null @@ -1,328 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package perfschema - -import ( - "fmt" - "reflect" - "runtime" - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/types" -) - -// statementInfo defines statement instrument information. -type statementInfo struct { - // The registered statement key - key uint64 - // The name of the statement instrument to register - name string -} - -// StatementState provides temporary storage to a statement runtime statistics. -// TODO: -// 1. support statement digest. -// 2. support prepared statement. -type StatementState struct { - // Connection identifier - connID uint64 - // Statement information - info *statementInfo - // Statement type - stmtType reflect.Type - // Source file and line number - source string - // Timer name - timerName enumTimerName - // Timer start - timerStart int64 - // Timer end - timerEnd int64 - // Locked time - lockTime int64 - // SQL statement string - sqlText string - // Current schema name - schemaName string - // Number of errors - errNum uint32 - // Number of warnings - warnNum uint32 - // Rows affected - rowsAffected uint64 - // Rows sent - rowsSent uint64 - // Rows examined - rowsExamined uint64 - // Metric, temporary tables created on disk - createdTmpDiskTables uint32 - // Metric, temproray tables created - createdTmpTables uint32 - // Metric, number of select full join - selectFullJoin uint32 - // Metric, number of select full range join - selectFullRangeJoin uint32 - // Metric, number of select range - selectRange uint32 - // Metric, number of select range check - selectRangeCheck uint32 - // Metric, number of select scan - selectScan uint32 - // Metric, number of sort merge passes - sortMergePasses uint32 - // Metric, number of sort merge - sortRange uint32 - // Metric, number of sort rows - sortRows uint32 - // Metric, number of sort scans - sortScan uint32 - // Metric, no index used flag - noIndexUsed uint8 - // Metric, no good index used flag - noGoodIndexUsed uint8 -} - -const ( - // Maximum allowed number of elements in table events_statements_history. - // TODO: make it configurable? - stmtsHistoryElemMax int = 1024 -) - -var ( - stmtInfos = make(map[reflect.Type]*statementInfo) -) - -func (ps *perfSchema) RegisterStatement(category, name string, elem interface{}) { - instrumentName := fmt.Sprintf("%s%s/%s", statementInstrumentPrefix, category, name) - key, err := ps.addInstrument(instrumentName) - if err != nil { - // just ignore, do nothing else. - log.Errorf("Unable to register instrument %s", instrumentName) - return - } - - stmtInfos[reflect.TypeOf(elem)] = &statementInfo{ - key: key, - name: instrumentName, - } -} - -func (ps *perfSchema) StartStatement(sql string, connID uint64, callerName EnumCallerName, elem interface{}) *StatementState { - stmtType := reflect.TypeOf(elem) - info, ok := stmtInfos[stmtType] - if !ok { - // just ignore, do nothing else. - log.Errorf("No instrument registered for statement %s", stmtType) - return nil - } - - // check and apply the configuration parameter in table setup_timers. - timerName, err := ps.getTimerName(flagStatement) - if err != nil { - // just ignore, do nothing else. - log.Error("Unable to check setup_timers table") - return nil - } - var timerStart int64 - switch timerName { - case timerNameNanosec: - timerStart = time.Now().UnixNano() - case timerNameMicrosec: - timerStart = time.Now().UnixNano() / int64(time.Microsecond) - case timerNameMillisec: - timerStart = time.Now().UnixNano() / int64(time.Millisecond) - default: - return nil - } - - // TODO: check and apply the additional configuration parameters in: - // - table setup_actors - // - table setup_setup_consumers - // - table setup_instruments - // - table setup_objects - - var source string - source, ok = callerNames[callerName] - if !ok { - _, fileName, fileLine, ok := runtime.Caller(1) - if !ok { - // just ignore, do nothing else. - log.Error("Unable to get runtime.Caller(1)") - return nil - } - source = fmt.Sprintf("%s:%d", fileName, fileLine) - callerNames[callerName] = source - } - - return &StatementState{ - connID: connID, - info: info, - stmtType: stmtType, - source: source, - timerName: timerName, - timerStart: timerStart, - sqlText: sql, - } -} - -func (ps *perfSchema) EndStatement(state *StatementState) { - if state == nil { - return - } - - switch state.timerName { - case timerNameNanosec: - state.timerEnd = time.Now().UnixNano() - case timerNameMicrosec: - state.timerEnd = time.Now().UnixNano() / int64(time.Microsecond) - case timerNameMillisec: - state.timerEnd = time.Now().UnixNano() / int64(time.Millisecond) - default: - return - } - - log.Debugf("EndStatement: sql %s, connection id %d, type %s", state.sqlText, state.connID, state.stmtType) - - record := state2Record(state) - err := ps.updateEventsStmtsCurrent(state.connID, record) - if err != nil { - log.Error("Unable to update events_statements_current table") - } - err = ps.appendEventsStmtsHistory(record) - if err != nil { - log.Errorf("Unable to append to events_statements_history table %v", errors.ErrorStack(err)) - } -} - -func state2Record(state *StatementState) []types.Datum { - return types.MakeDatums( - state.connID, // THREAD_ID - state.info.key, // EVENT_ID - nil, // END_EVENT_ID - state.info.name, // EVENT_NAME - state.source, // SOURCE - uint64(state.timerStart), // TIMER_START - uint64(state.timerEnd), // TIMER_END - nil, // TIMER_WAIT - uint64(state.lockTime), // LOCK_TIME - state.sqlText, // SQL_TEXT - nil, // DIGEST - nil, // DIGEST_TEXT - state.schemaName, // CURRENT_SCHEMA - nil, // OBJECT_TYPE - nil, // OBJECT_SCHEMA - nil, // OBJECT_NAME - nil, // OBJECT_INSTANCE_BEGIN - nil, // MYSQL_ERRNO, - nil, // RETURNED_SQLSTATE - nil, // MESSAGE_TEXT - uint64(state.errNum), // ERRORS - uint64(state.warnNum), // WARNINGS - state.rowsAffected, // ROWS_AFFECTED - state.rowsSent, // ROWS_SENT - state.rowsExamined, // ROWS_EXAMINED - uint64(state.createdTmpDiskTables), // CREATED_TMP_DISK_TABLES - uint64(state.createdTmpTables), // CREATED_TMP_TABLES - uint64(state.selectFullJoin), // SELECT_FULL_JOIN - uint64(state.selectFullRangeJoin), // SELECT_FULL_RANGE_JOIN - uint64(state.selectRange), // SELECT_RANGE - uint64(state.selectRangeCheck), // SELECT_RANGE_CHECK - uint64(state.selectScan), // SELECT_SCAN - uint64(state.sortMergePasses), // SORT_MERGE_PASSES - uint64(state.sortRange), // SORT_RANGE - uint64(state.sortRows), // SORT_ROWS - uint64(state.sortScan), // SORT_SCAN - uint64(state.noIndexUsed), // NO_INDEX_USED - uint64(state.noGoodIndexUsed), // NO_GOOD_INDEX_USED - nil, // NESTING_EVENT_ID - nil, // NESTING_EVENT_TYPE - nil, // NESTING_EVENT_LEVEL - ) -} - -func (ps *perfSchema) updateEventsStmtsCurrent(connID uint64, record []types.Datum) error { - // Try AddRecord - tbl := ps.mTables[TableStmtsCurrent] - _, err := tbl.AddRecord(nil, record) - if err == nil { - return nil - } - if terror.ErrorNotEqual(err, kv.ErrKeyExists) { - return errors.Trace(err) - } - // Update it - handle := int64(connID) - err = tbl.UpdateRecord(nil, handle, nil, record, nil) - return errors.Trace(err) -} - -func (ps *perfSchema) appendEventsStmtsHistory(record []types.Datum) error { - tbl := ps.mTables[TableStmtsHistory] - if len(ps.historyHandles) < stmtsHistoryElemMax { - h, err := tbl.AddRecord(nil, record) - if err == nil { - ps.historyHandles = append(ps.historyHandles, h) - return nil - } - if terror.ErrorNotEqual(err, kv.ErrKeyExists) { - return errors.Trace(err) - } - // THREAD_ID is PK - handle := int64(record[0].GetUint64()) - err = tbl.UpdateRecord(nil, handle, nil, record, nil) - return errors.Trace(err) - - } - // If histroy is full, replace old data - if ps.historyCursor >= len(ps.historyHandles) { - ps.historyCursor = 0 - } - h := ps.historyHandles[ps.historyCursor] - ps.historyCursor++ - err := tbl.UpdateRecord(nil, h, nil, record, nil) - return errors.Trace(err) -} - -func registerStatements() { - // Existing instrument names are the same as MySQL 5.7 - PerfHandle.RegisterStatement("sql", "alter_table", (*ast.AlterTableStmt)(nil)) - PerfHandle.RegisterStatement("sql", "begin", (*ast.BeginStmt)(nil)) - PerfHandle.RegisterStatement("sql", "commit", (*ast.CommitStmt)(nil)) - PerfHandle.RegisterStatement("sql", "create_db", (*ast.CreateDatabaseStmt)(nil)) - PerfHandle.RegisterStatement("sql", "create_index", (*ast.CreateIndexStmt)(nil)) - PerfHandle.RegisterStatement("sql", "create_table", (*ast.CreateTableStmt)(nil)) - PerfHandle.RegisterStatement("sql", "deallocate", (*ast.DeallocateStmt)(nil)) - PerfHandle.RegisterStatement("sql", "delete", (*ast.DeleteStmt)(nil)) - PerfHandle.RegisterStatement("sql", "do", (*ast.DoStmt)(nil)) - PerfHandle.RegisterStatement("sql", "drop_db", (*ast.DropDatabaseStmt)(nil)) - PerfHandle.RegisterStatement("sql", "drop_table", (*ast.DropTableStmt)(nil)) - PerfHandle.RegisterStatement("sql", "drop_index", (*ast.DropIndexStmt)(nil)) - PerfHandle.RegisterStatement("sql", "execute", (*ast.ExecuteStmt)(nil)) - PerfHandle.RegisterStatement("sql", "explain", (*ast.ExplainStmt)(nil)) - PerfHandle.RegisterStatement("sql", "insert", (*ast.InsertStmt)(nil)) - PerfHandle.RegisterStatement("sql", "prepare", (*ast.PrepareStmt)(nil)) - PerfHandle.RegisterStatement("sql", "rollback", (*ast.RollbackStmt)(nil)) - PerfHandle.RegisterStatement("sql", "select", (*ast.SelectStmt)(nil)) - PerfHandle.RegisterStatement("sql", "set", (*ast.SetStmt)(nil)) - PerfHandle.RegisterStatement("sql", "show", (*ast.ShowStmt)(nil)) - PerfHandle.RegisterStatement("sql", "truncate", (*ast.TruncateTableStmt)(nil)) - PerfHandle.RegisterStatement("sql", "union", (*ast.UnionStmt)(nil)) - PerfHandle.RegisterStatement("sql", "update", (*ast.UpdateStmt)(nil)) - PerfHandle.RegisterStatement("sql", "use", (*ast.UseStmt)(nil)) -} diff --git a/vendor/github.com/pingcap/tidb/privilege/privilege.go b/vendor/github.com/pingcap/tidb/privilege/privilege.go deleted file mode 100644 index 653baedc8..000000000 --- a/vendor/github.com/pingcap/tidb/privilege/privilege.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package privilege - -import ( - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" -) - -type keyType int - -func (k keyType) String() string { - return "privilege-key" -} - -// Checker is the interface for check privileges. -type Checker interface { - // Check checks privilege. - // If tbl is nil, only check global/db scope privileges. - // If tbl is not nil, check global/db/table scope privileges. - Check(ctx context.Context, db *model.DBInfo, tbl *model.TableInfo, privilege mysql.PrivilegeType) (bool, error) - // Show granted privileges for user. - ShowGrants(ctx context.Context, user string) ([]string, error) -} - -const key keyType = 0 - -// BindPrivilegeChecker binds Checker to context. -func BindPrivilegeChecker(ctx context.Context, pc Checker) { - ctx.SetValue(key, pc) -} - -// GetPrivilegeChecker gets Checker from context. -func GetPrivilegeChecker(ctx context.Context) Checker { - if v, ok := ctx.Value(key).(Checker); ok { - return v - } - return nil -} diff --git a/vendor/github.com/pingcap/tidb/privilege/privileges/privileges.go b/vendor/github.com/pingcap/tidb/privilege/privileges/privileges.go deleted file mode 100644 index 7ff658806..000000000 --- a/vendor/github.com/pingcap/tidb/privilege/privileges/privileges.go +++ /dev/null @@ -1,381 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package privileges - -import ( - "fmt" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/privilege" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/util/sqlexec" - "github.com/pingcap/tidb/util/types" -) - -var _ privilege.Checker = (*UserPrivileges)(nil) - -type privileges struct { - Level ast.GrantLevelType - privs map[mysql.PrivilegeType]bool -} - -func (ps *privileges) contain(p mysql.PrivilegeType) bool { - if ps.privs == nil { - return false - } - _, ok := ps.privs[p] - return ok -} - -func (ps *privileges) add(p mysql.PrivilegeType) { - if ps.privs == nil { - ps.privs = make(map[mysql.PrivilegeType]bool) - } - ps.privs[p] = true -} - -func (ps *privileges) String() string { - switch ps.Level { - case ast.GrantLevelGlobal: - return ps.globalPrivToString() - case ast.GrantLevelDB: - return ps.dbPrivToString() - case ast.GrantLevelTable: - return ps.tablePrivToString() - } - return "" -} - -func (ps *privileges) globalPrivToString() string { - if len(ps.privs) == len(mysql.AllGlobalPrivs) { - return mysql.AllPrivilegeLiteral - } - pstrs := make([]string, 0, len(ps.privs)) - // Iterate AllGlobalPrivs to get stable order result. - for _, p := range mysql.AllGlobalPrivs { - _, ok := ps.privs[p] - if !ok { - continue - } - s, _ := mysql.Priv2Str[p] - pstrs = append(pstrs, s) - } - return strings.Join(pstrs, ",") -} - -func (ps *privileges) dbPrivToString() string { - if len(ps.privs) == len(mysql.AllDBPrivs) { - return mysql.AllPrivilegeLiteral - } - pstrs := make([]string, 0, len(ps.privs)) - // Iterate AllDBPrivs to get stable order result. - for _, p := range mysql.AllDBPrivs { - _, ok := ps.privs[p] - if !ok { - continue - } - s, _ := mysql.Priv2SetStr[p] - pstrs = append(pstrs, s) - } - return strings.Join(pstrs, ",") -} - -func (ps *privileges) tablePrivToString() string { - if len(ps.privs) == len(mysql.AllTablePrivs) { - return mysql.AllPrivilegeLiteral - } - pstrs := make([]string, 0, len(ps.privs)) - // Iterate AllTablePrivs to get stable order result. - for _, p := range mysql.AllTablePrivs { - _, ok := ps.privs[p] - if !ok { - continue - } - s, _ := mysql.Priv2Str[p] - pstrs = append(pstrs, s) - } - return strings.Join(pstrs, ",") -} - -type userPrivileges struct { - User string - Host string - // Global privileges - GlobalPrivs *privileges - // DBName-privileges - DBPrivs map[string]*privileges - // DBName-TableName-privileges - TablePrivs map[string]map[string]*privileges -} - -func (ps *userPrivileges) ShowGrants() []string { - gs := []string{} - // Show global grants - g := ps.GlobalPrivs.String() - if len(g) > 0 { - s := fmt.Sprintf(`GRANT %s ON *.* TO '%s'@'%s'`, g, ps.User, ps.Host) - gs = append(gs, s) - } - // Show db scope grants - for d, p := range ps.DBPrivs { - g := p.String() - if len(g) > 0 { - s := fmt.Sprintf(`GRANT %s ON %s.* TO '%s'@'%s'`, g, d, ps.User, ps.Host) - gs = append(gs, s) - } - } - // Show table scope grants - for d, dps := range ps.TablePrivs { - for t, p := range dps { - g := p.String() - if len(g) > 0 { - s := fmt.Sprintf(`GRANT %s ON %s.%s TO '%s'@'%s'`, g, d, t, ps.User, ps.Host) - gs = append(gs, s) - } - } - } - return gs -} - -// UserPrivileges implements privilege.Checker interface. -// This is used to check privilege for the current user. -type UserPrivileges struct { - User string - privs *userPrivileges -} - -// Check implements Checker.Check interface. -func (p *UserPrivileges) Check(ctx context.Context, db *model.DBInfo, tbl *model.TableInfo, privilege mysql.PrivilegeType) (bool, error) { - if p.privs == nil { - // Lazy load - if len(p.User) == 0 { - // User current user - p.User = variable.GetSessionVars(ctx).User - if len(p.User) == 0 { - // In embedded db mode, user does not need to login. So we do not have username. - // TODO: remove this check latter. - return true, nil - } - } - err := p.loadPrivileges(ctx) - if err != nil { - return false, errors.Trace(err) - } - } - // Check global scope privileges. - ok := p.privs.GlobalPrivs.contain(privilege) - if ok { - return true, nil - } - // Check db scope privileges. - dbp, ok := p.privs.DBPrivs[db.Name.O] - if ok { - ok = dbp.contain(privilege) - if ok { - return true, nil - } - } - if tbl == nil { - return false, nil - } - // Check table scope privileges. - dbTbl, ok := p.privs.TablePrivs[db.Name.O] - if !ok { - return false, nil - } - tblp, ok := dbTbl[tbl.Name.O] - if !ok { - return false, nil - } - return tblp.contain(privilege), nil -} - -func (p *UserPrivileges) loadPrivileges(ctx context.Context) error { - strs := strings.Split(p.User, "@") - if len(strs) != 2 { - return errors.Errorf("Wrong username format: %s", p.User) - } - username, host := strs[0], strs[1] - p.privs = &userPrivileges{ - User: username, - Host: host, - } - // Load privileges from mysql.User/DB/Table_privs/Column_privs table - err := p.loadGlobalPrivileges(ctx) - if err != nil { - return errors.Trace(err) - } - err = p.loadDBScopePrivileges(ctx) - if err != nil { - return errors.Trace(err) - } - err = p.loadTableScopePrivileges(ctx) - if err != nil { - return errors.Trace(err) - } - // TODO: consider column scope privilege latter. - return nil -} - -// mysql.User/mysql.DB table privilege columns start from index 3. -// See: booststrap.go CreateUserTable/CreateDBPrivTable -const userTablePrivColumnStartIndex = 3 -const dbTablePrivColumnStartIndex = 3 - -func (p *UserPrivileges) loadGlobalPrivileges(ctx context.Context) error { - sql := fmt.Sprintf(`SELECT * FROM %s.%s WHERE User="%s" AND (Host="%s" OR Host="%%");`, - mysql.SystemDB, mysql.UserTable, p.privs.User, p.privs.Host) - rs, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - if err != nil { - return errors.Trace(err) - } - defer rs.Close() - ps := &privileges{Level: ast.GrantLevelGlobal} - fs, err := rs.Fields() - if err != nil { - return errors.Trace(err) - } - for { - row, err := rs.Next() - if err != nil { - return errors.Trace(err) - } - if row == nil { - break - } - for i := userTablePrivColumnStartIndex; i < len(fs); i++ { - d := row.Data[i] - if d.Kind() != types.KindMysqlEnum { - return errors.Errorf("Privilege should be mysql.Enum: %v(%T)", d, d) - } - ed := d.GetMysqlEnum() - if ed.String() != "Y" { - continue - } - f := fs[i] - p, ok := mysql.Col2PrivType[f.ColumnAsName.O] - if !ok { - return errors.New("Unknown Privilege Type!") - } - ps.add(p) - } - } - p.privs.GlobalPrivs = ps - return nil -} - -func (p *UserPrivileges) loadDBScopePrivileges(ctx context.Context) error { - sql := fmt.Sprintf(`SELECT * FROM %s.%s WHERE User="%s" AND (Host="%s" OR Host="%%");`, - mysql.SystemDB, mysql.DBTable, p.privs.User, p.privs.Host) - rs, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - if err != nil { - return errors.Trace(err) - } - defer rs.Close() - ps := make(map[string]*privileges) - fs, err := rs.Fields() - if err != nil { - return errors.Trace(err) - } - for { - row, err := rs.Next() - if err != nil { - return errors.Trace(err) - } - if row == nil { - break - } - // DB - dbStr := row.Data[1].GetString() - ps[dbStr] = &privileges{Level: ast.GrantLevelDB} - for i := dbTablePrivColumnStartIndex; i < len(fs); i++ { - d := row.Data[i] - if d.Kind() != types.KindMysqlEnum { - return errors.Errorf("Privilege should be mysql.Enum: %v(%T)", d, d) - } - ed := d.GetMysqlEnum() - if ed.String() != "Y" { - continue - } - f := fs[i] - p, ok := mysql.Col2PrivType[f.ColumnAsName.O] - if !ok { - return errors.New("Unknown Privilege Type!") - } - ps[dbStr].add(p) - } - } - p.privs.DBPrivs = ps - return nil -} - -func (p *UserPrivileges) loadTableScopePrivileges(ctx context.Context) error { - sql := fmt.Sprintf(`SELECT * FROM %s.%s WHERE User="%s" AND (Host="%s" OR Host="%%");`, - mysql.SystemDB, mysql.TablePrivTable, p.privs.User, p.privs.Host) - rs, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, sql) - if err != nil { - return errors.Trace(err) - } - defer rs.Close() - ps := make(map[string]map[string]*privileges) - for { - row, err := rs.Next() - if err != nil { - return errors.Trace(err) - } - if row == nil { - break - } - // DB - dbStr := row.Data[1].GetString() - // Table_name - tblStr := row.Data[3].GetString() - _, ok := ps[dbStr] - if !ok { - ps[dbStr] = make(map[string]*privileges) - } - ps[dbStr][tblStr] = &privileges{Level: ast.GrantLevelTable} - // Table_priv - tblPrivs := row.Data[6].GetMysqlSet() - pvs := strings.Split(tblPrivs.Name, ",") - for _, d := range pvs { - p, ok := mysql.SetStr2Priv[d] - if !ok { - return errors.New("Unknown Privilege Type!") - } - ps[dbStr][tblStr].add(p) - } - } - p.privs.TablePrivs = ps - return nil -} - -// ShowGrants implements privilege.Checker ShowGrants interface. -func (p *UserPrivileges) ShowGrants(ctx context.Context, user string) ([]string, error) { - // If user is current user - if user == p.User { - return p.privs.ShowGrants(), nil - } - userp := &UserPrivileges{User: user} - err := userp.loadPrivileges(ctx) - if err != nil { - return nil, errors.Trace(err) - } - return userp.privs.ShowGrants(), nil -} diff --git a/vendor/github.com/pingcap/tidb/session.go b/vendor/github.com/pingcap/tidb/session.go deleted file mode 100644 index 691558ff3..000000000 --- a/vendor/github.com/pingcap/tidb/session.go +++ /dev/null @@ -1,660 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tidb - -import ( - "bytes" - "encoding/json" - "fmt" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/executor" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/perfschema" - "github.com/pingcap/tidb/privilege" - "github.com/pingcap/tidb/privilege/privileges" - "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/sessionctx/autocommit" - "github.com/pingcap/tidb/sessionctx/db" - "github.com/pingcap/tidb/sessionctx/forupdate" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/store/localstore" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/types" -) - -// Session context -type Session interface { - Status() uint16 // Flag of current status, such as autocommit - LastInsertID() uint64 // Last inserted auto_increment id - AffectedRows() uint64 // Affected rows by lastest executed stmt - Execute(sql string) ([]ast.RecordSet, error) // Execute a sql statement - String() string // For debug - FinishTxn(rollback bool) error - // For execute prepare statement in binary protocol - PrepareStmt(sql string) (stmtID uint32, paramCount int, fields []*ast.ResultField, err error) - // Execute a prepared statement - ExecutePreparedStmt(stmtID uint32, param ...interface{}) (ast.RecordSet, error) - DropPreparedStmt(stmtID uint32) error - SetClientCapability(uint32) // Set client capability flags - SetConnectionID(uint64) - Close() error - Retry() error - Auth(user string, auth []byte, salt []byte) bool -} - -var ( - _ Session = (*session)(nil) - sessionID int64 - sessionMu sync.Mutex -) - -type stmtRecord struct { - stmtID uint32 - st ast.Statement - params []interface{} -} - -type stmtHistory struct { - history []*stmtRecord -} - -func (h *stmtHistory) add(stmtID uint32, st ast.Statement, params ...interface{}) { - s := &stmtRecord{ - stmtID: stmtID, - st: st, - params: append(([]interface{})(nil), params...), - } - h.history = append(h.history, s) -} - -func (h *stmtHistory) reset() { - if len(h.history) > 0 { - h.history = h.history[:0] - } -} - -func (h *stmtHistory) clone() *stmtHistory { - nh := *h - nh.history = make([]*stmtRecord, len(h.history)) - copy(nh.history, h.history) - return &nh -} - -const unlimitedRetryCnt = -1 - -type session struct { - txn kv.Transaction // Current transaction - args []interface{} // Statment execution args, this should be cleaned up after exec - values map[fmt.Stringer]interface{} - store kv.Storage - sid int64 - history stmtHistory - initing bool // Running bootstrap using this session. - retrying bool - maxRetryCnt int // Max retry times. If maxRetryCnt <=0, there is no limitation for retry times. - - debugInfos map[string]interface{} // Vars for debug and unit tests. - - // For performance_schema only. - stmtState *perfschema.StatementState -} - -func (s *session) Status() uint16 { - return variable.GetSessionVars(s).Status -} - -func (s *session) LastInsertID() uint64 { - return variable.GetSessionVars(s).LastInsertID -} - -func (s *session) AffectedRows() uint64 { - return variable.GetSessionVars(s).AffectedRows -} - -func (s *session) resetHistory() { - s.ClearValue(forupdate.ForUpdateKey) - s.history.reset() -} - -func (s *session) SetClientCapability(capability uint32) { - variable.GetSessionVars(s).ClientCapability = capability -} - -func (s *session) SetConnectionID(connectionID uint64) { - variable.GetSessionVars(s).ConnectionID = connectionID -} - -func (s *session) FinishTxn(rollback bool) error { - // transaction has already been committed or rolled back - if s.txn == nil { - return nil - } - defer func() { - s.txn = nil - variable.GetSessionVars(s).SetStatusFlag(mysql.ServerStatusInTrans, false) - }() - - if rollback { - s.resetHistory() - return s.txn.Rollback() - } - - err := s.txn.Commit() - if err != nil { - if !s.retrying && kv.IsRetryableError(err) { - err = s.Retry() - } - if err != nil { - log.Warnf("txn:%s, %v", s.txn, err) - return errors.Trace(err) - } - } - - s.resetHistory() - return nil -} - -func (s *session) String() string { - // TODO: how to print binded context in values appropriately? - data := map[string]interface{}{ - "currDBName": db.GetCurrentSchema(s), - "sid": s.sid, - } - - if s.txn != nil { - // if txn is committed or rolled back, txn is nil. - data["txn"] = s.txn.String() - } - - b, _ := json.MarshalIndent(data, "", " ") - return string(b) -} - -func (s *session) Retry() error { - s.retrying = true - nh := s.history.clone() - // Debug infos. - if len(nh.history) == 0 { - s.debugInfos[retryEmptyHistoryList] = true - } else { - s.debugInfos[retryEmptyHistoryList] = false - } - defer func() { - s.history.history = nh.history - s.retrying = false - }() - - if forUpdate := s.Value(forupdate.ForUpdateKey); forUpdate != nil { - return errors.Errorf("can not retry select for update statement") - } - var err error - retryCnt := 0 - for { - s.resetHistory() - s.FinishTxn(true) - success := true - for _, sr := range nh.history { - st := sr.st - log.Warnf("Retry %s", st.OriginText()) - _, err = runStmt(s, st) - if err != nil { - if kv.IsRetryableError(err) { - success = false - break - } - log.Warnf("session:%v, err:%v", s, err) - return errors.Trace(err) - } - } - if success { - err = s.FinishTxn(false) - if !kv.IsRetryableError(err) { - break - } - } - retryCnt++ - if (s.maxRetryCnt != unlimitedRetryCnt) && (retryCnt >= s.maxRetryCnt) { - return errors.Trace(err) - } - kv.BackOff(retryCnt) - } - return err -} - -// ExecRestrictedSQL implements SQLHelper interface. -// This is used for executing some restricted sql statements. -func (s *session) ExecRestrictedSQL(ctx context.Context, sql string) (ast.RecordSet, error) { - rawStmts, err := Parse(ctx, sql) - if err != nil { - return nil, errors.Trace(err) - } - if len(rawStmts) != 1 { - log.Errorf("ExecRestrictedSQL only executes one statement. Too many/few statement in %s", sql) - return nil, errors.New("Wrong number of statement.") - } - st, err := Compile(s, rawStmts[0]) - if err != nil { - log.Errorf("Compile %s with error: %v", sql, err) - return nil, errors.Trace(err) - } - // Check statement for some restriction - // For example only support DML on system meta table. - // TODO: Add more restrictions. - log.Debugf("Executing %s [%s]", st.OriginText(), sql) - rs, err := st.Exec(ctx) - return rs, errors.Trace(err) -} - -// getExecRet executes restricted sql and the result is one column. -// It returns a string value. -func (s *session) getExecRet(ctx context.Context, sql string) (string, error) { - cleanTxn := s.txn == nil - rs, err := s.ExecRestrictedSQL(ctx, sql) - if err != nil { - return "", errors.Trace(err) - } - defer rs.Close() - row, err := rs.Next() - if err != nil { - return "", errors.Trace(err) - } - if row == nil { - return "", terror.ExecResultIsEmpty - } - value, err := types.ToString(row.Data[0].GetValue()) - if err != nil { - return "", errors.Trace(err) - } - if cleanTxn { - // This function has some side effect. Run select may create new txn. - // We should make environment unchanged. - s.txn = nil - } - return value, nil -} - -// GetGlobalSysVar implements GlobalVarAccessor.GetGlobalSysVar interface. -func (s *session) GetGlobalSysVar(ctx context.Context, name string) (string, error) { - sql := fmt.Sprintf(`SELECT VARIABLE_VALUE FROM %s.%s WHERE VARIABLE_NAME="%s";`, - mysql.SystemDB, mysql.GlobalVariablesTable, name) - sysVar, err := s.getExecRet(ctx, sql) - if err != nil { - if terror.ExecResultIsEmpty.Equal(err) { - return "", variable.UnknownSystemVar.Gen("unknown sys variable:%s", name) - } - return "", errors.Trace(err) - } - return sysVar, nil -} - -// SetGlobalSysVar implements GlobalVarAccessor.SetGlobalSysVar interface. -func (s *session) SetGlobalSysVar(ctx context.Context, name string, value string) error { - sql := fmt.Sprintf(`UPDATE %s.%s SET VARIABLE_VALUE="%s" WHERE VARIABLE_NAME="%s";`, - mysql.SystemDB, mysql.GlobalVariablesTable, value, strings.ToLower(name)) - _, err := s.ExecRestrictedSQL(ctx, sql) - return errors.Trace(err) -} - -// IsAutocommit checks if it is in the auto-commit mode. -func (s *session) isAutocommit(ctx context.Context) bool { - autocommit, ok := variable.GetSessionVars(ctx).Systems["autocommit"] - if !ok { - if s.initing { - return false - } - var err error - autocommit, err = s.GetGlobalSysVar(ctx, "autocommit") - if err != nil { - log.Errorf("Get global sys var error: %v", err) - return false - } - variable.GetSessionVars(ctx).Systems["autocommit"] = autocommit - ok = true - } - if ok && (autocommit == "ON" || autocommit == "on" || autocommit == "1") { - variable.GetSessionVars(ctx).SetStatusFlag(mysql.ServerStatusAutocommit, true) - return true - } - variable.GetSessionVars(ctx).SetStatusFlag(mysql.ServerStatusAutocommit, false) - return false -} - -func (s *session) ShouldAutocommit(ctx context.Context) bool { - // With START TRANSACTION, autocommit remains disabled until you end - // the transaction with COMMIT or ROLLBACK. - if variable.GetSessionVars(ctx).Status&mysql.ServerStatusInTrans == 0 && s.isAutocommit(ctx) { - return true - } - return false -} - -func (s *session) Execute(sql string) ([]ast.RecordSet, error) { - rawStmts, err := Parse(s, sql) - if err != nil { - return nil, errors.Trace(err) - } - var rs []ast.RecordSet - for i, rst := range rawStmts { - st, err1 := Compile(s, rst) - if err1 != nil { - log.Errorf("Syntax error: %s", sql) - log.Errorf("Error occurs at %s.", err1) - return nil, errors.Trace(err1) - } - id := variable.GetSessionVars(s).ConnectionID - s.stmtState = perfschema.PerfHandle.StartStatement(sql, id, perfschema.CallerNameSessionExecute, rawStmts[i]) - r, err := runStmt(s, st) - perfschema.PerfHandle.EndStatement(s.stmtState) - if err != nil { - log.Warnf("session:%v, err:%v", s, err) - return nil, errors.Trace(err) - } - if r != nil { - rs = append(rs, r) - } - } - return rs, nil -} - -// For execute prepare statement in binary protocol -func (s *session) PrepareStmt(sql string) (stmtID uint32, paramCount int, fields []*ast.ResultField, err error) { - prepareExec := &executor.PrepareExec{ - IS: sessionctx.GetDomain(s).InfoSchema(), - Ctx: s, - SQLText: sql, - } - prepareExec.DoPrepare() - return prepareExec.ID, prepareExec.ParamCount, prepareExec.ResultFields, prepareExec.Err -} - -// checkArgs makes sure all the arguments' types are known and can be handled. -// integer types are converted to int64 and uint64, time.Time is converted to mysql.Time. -// time.Duration is converted to mysql.Duration, other known types are leaved as it is. -func checkArgs(args ...interface{}) error { - for i, v := range args { - switch x := v.(type) { - case bool: - if x { - args[i] = int64(1) - } else { - args[i] = int64(0) - } - case int8: - args[i] = int64(x) - case int16: - args[i] = int64(x) - case int32: - args[i] = int64(x) - case int: - args[i] = int64(x) - case uint8: - args[i] = uint64(x) - case uint16: - args[i] = uint64(x) - case uint32: - args[i] = uint64(x) - case uint: - args[i] = uint64(x) - case int64: - case uint64: - case float32: - case float64: - case string: - case []byte: - case time.Duration: - args[i] = mysql.Duration{Duration: x} - case time.Time: - args[i] = mysql.Time{Time: x, Type: mysql.TypeDatetime} - case nil: - default: - return errors.Errorf("cannot use arg[%d] (type %T):unsupported type", i, v) - } - } - return nil -} - -// Execute a prepared statement -func (s *session) ExecutePreparedStmt(stmtID uint32, args ...interface{}) (ast.RecordSet, error) { - err := checkArgs(args...) - if err != nil { - return nil, err - } - st := executor.CompileExecutePreparedStmt(s, stmtID, args...) - r, err := runStmt(s, st, args...) - return r, errors.Trace(err) -} - -func (s *session) DropPreparedStmt(stmtID uint32) error { - vars := variable.GetSessionVars(s) - if _, ok := vars.PreparedStmts[stmtID]; !ok { - return executor.ErrStmtNotFound - } - delete(vars.PreparedStmts, stmtID) - return nil -} - -// If forceNew is true, GetTxn() must return a new transaction. -// In this situation, if current transaction is still in progress, -// there will be an implicit commit and create a new transaction. -func (s *session) GetTxn(forceNew bool) (kv.Transaction, error) { - var err error - if s.txn == nil { - s.resetHistory() - s.txn, err = s.store.Begin() - if err != nil { - return nil, errors.Trace(err) - } - if !s.isAutocommit(s) { - variable.GetSessionVars(s).SetStatusFlag(mysql.ServerStatusInTrans, true) - } - log.Infof("New txn:%s in session:%d", s.txn, s.sid) - return s.txn, nil - } - if forceNew { - err = s.FinishTxn(false) - if err != nil { - return nil, errors.Trace(err) - } - s.txn, err = s.store.Begin() - if err != nil { - return nil, errors.Trace(err) - } - if !s.isAutocommit(s) { - variable.GetSessionVars(s).SetStatusFlag(mysql.ServerStatusInTrans, true) - } - log.Warnf("Force new txn:%s in session:%d", s.txn, s.sid) - } - return s.txn, nil -} - -func (s *session) SetValue(key fmt.Stringer, value interface{}) { - s.values[key] = value -} - -func (s *session) Value(key fmt.Stringer) interface{} { - value := s.values[key] - return value -} - -func (s *session) ClearValue(key fmt.Stringer) { - delete(s.values, key) -} - -// Close function does some clean work when session end. -func (s *session) Close() error { - return s.FinishTxn(true) -} - -func (s *session) getPassword(name, host string) (string, error) { - // Get password for name and host. - authSQL := fmt.Sprintf("SELECT Password FROM %s.%s WHERE User='%s' and Host='%s';", mysql.SystemDB, mysql.UserTable, name, host) - pwd, err := s.getExecRet(s, authSQL) - if err == nil { - return pwd, nil - } else if !terror.ExecResultIsEmpty.Equal(err) { - return "", errors.Trace(err) - } - //Try to get user password for name with any host(%). - authSQL = fmt.Sprintf("SELECT Password FROM %s.%s WHERE User='%s' and Host='%%';", mysql.SystemDB, mysql.UserTable, name) - pwd, err = s.getExecRet(s, authSQL) - return pwd, errors.Trace(err) -} - -func (s *session) Auth(user string, auth []byte, salt []byte) bool { - strs := strings.Split(user, "@") - if len(strs) != 2 { - log.Warnf("Invalid format for user: %s", user) - return false - } - // Get user password. - name := strs[0] - host := strs[1] - pwd, err := s.getPassword(name, host) - if err != nil { - if terror.ExecResultIsEmpty.Equal(err) { - log.Errorf("User [%s] not exist %v", name, err) - } else { - log.Errorf("Get User [%s] password from SystemDB error %v", name, err) - } - return false - } - if len(pwd) != 0 && len(pwd) != 40 { - log.Errorf("User [%s] password from SystemDB not like a sha1sum", name) - return false - } - hpwd, err := util.DecodePassword(pwd) - if err != nil { - log.Errorf("Decode password string error %v", err) - return false - } - checkAuth := util.CalcPassword(salt, hpwd) - if !bytes.Equal(auth, checkAuth) { - return false - } - variable.GetSessionVars(s).SetCurrentUser(user) - return true -} - -// Some vars name for debug. -const ( - retryEmptyHistoryList = "RetryEmptyHistoryList" -) - -// CreateSession creates a new session environment. -func CreateSession(store kv.Storage) (Session, error) { - s := &session{ - values: make(map[fmt.Stringer]interface{}), - store: store, - sid: atomic.AddInt64(&sessionID, 1), - debugInfos: make(map[string]interface{}), - retrying: false, - maxRetryCnt: 10, - } - domain, err := domap.Get(store) - if err != nil { - return nil, err - } - sessionctx.BindDomain(s, domain) - - variable.BindSessionVars(s) - variable.GetSessionVars(s).SetStatusFlag(mysql.ServerStatusAutocommit, true) - - // session implements variable.GlobalVarAccessor. Bind it to ctx. - variable.BindGlobalVarAccessor(s, s) - - // session implements autocommit.Checker. Bind it to ctx - autocommit.BindAutocommitChecker(s, s) - sessionMu.Lock() - defer sessionMu.Unlock() - - ok := isBoostrapped(store) - if !ok { - // if no bootstrap and storage is remote, we must use a little lease time to - // bootstrap quickly, after bootstrapped, we will reset the lease time. - // TODO: Using a bootstap tool for doing this may be better later. - if !localstore.IsLocalStore(store) { - sessionctx.GetDomain(s).SetLease(100 * time.Millisecond) - } - - s.initing = true - bootstrap(s) - s.initing = false - - if !localstore.IsLocalStore(store) { - sessionctx.GetDomain(s).SetLease(schemaLease) - } - - finishBoostrap(store) - } - - // TODO: Add auth here - privChecker := &privileges.UserPrivileges{} - privilege.BindPrivilegeChecker(s, privChecker) - return s, nil -} - -func isBoostrapped(store kv.Storage) bool { - // check in memory - _, ok := storeBootstrapped[store.UUID()] - if ok { - return true - } - - // check in kv store - err := kv.RunInNewTxn(store, false, func(txn kv.Transaction) error { - var err error - t := meta.NewMeta(txn) - ok, err = t.IsBootstrapped() - return errors.Trace(err) - }) - - if err != nil { - log.Fatalf("check bootstrapped err %v", err) - } - - if ok { - // here mean memory is not ok, but other server has already finished it - storeBootstrapped[store.UUID()] = true - } - - return ok -} - -func finishBoostrap(store kv.Storage) { - storeBootstrapped[store.UUID()] = true - - err := kv.RunInNewTxn(store, true, func(txn kv.Transaction) error { - t := meta.NewMeta(txn) - err := t.FinishBootstrap() - return errors.Trace(err) - }) - if err != nil { - log.Fatalf("finish bootstrap err %v", err) - } -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/autocommit/autocommit.go b/vendor/github.com/pingcap/tidb/sessionctx/autocommit/autocommit.go deleted file mode 100644 index 089acbb04..000000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/autocommit/autocommit.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package autocommit - -import ( - "github.com/pingcap/tidb/context" -) - -// Checker is the interface checks if it should autocommit in the context. -// TODO: Choose a better name. -type Checker interface { - // ShouldAutocommit returns true if it should autocommit in the context. - ShouldAutocommit(ctx context.Context) bool -} - -// keyType is a dummy type to avoid naming collision in context. -type keyType int - -// String defines a Stringer function for debugging and pretty printing. -func (k keyType) String() string { - return "autocommit_checker" -} - -const key keyType = 0 - -// BindAutocommitChecker binds autocommit checker to context. -func BindAutocommitChecker(ctx context.Context, checker Checker) { - ctx.SetValue(key, checker) -} - -// ShouldAutocommit gets checker from ctx and checks if it should autocommit. -func ShouldAutocommit(ctx context.Context) bool { - v, ok := ctx.Value(key).(Checker) - if !ok { - panic("Miss autocommit checker") - } - return v.ShouldAutocommit(ctx) -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/db/db.go b/vendor/github.com/pingcap/tidb/sessionctx/db/db.go deleted file mode 100644 index 1917ce9a1..000000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/db/db.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package db - -import ( - "github.com/pingcap/tidb/context" -) - -// currentDBKeyType is a dummy type to avoid naming collision in context. -type currentDBKeyType int - -// String defines a Stringer function for debugging and pretty printing. -func (k currentDBKeyType) String() string { - return "current_db" -} - -const currentDBKey currentDBKeyType = 0 - -// BindCurrentSchema saves parameter schema as current schema name value into context. -func BindCurrentSchema(ctx context.Context, schema string) { - ctx.SetValue(currentDBKey, schema) -} - -// GetCurrentSchema gets current schema name from context. -func GetCurrentSchema(ctx context.Context) string { - v, ok := ctx.Value(currentDBKey).(string) - if !ok { - return "" - } - return v -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/domainctx.go b/vendor/github.com/pingcap/tidb/sessionctx/domainctx.go deleted file mode 100644 index dfbbe5cb7..000000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/domainctx.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package sessionctx - -import ( - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/domain" -) - -// A dummy type to avoid naming collision in context. -type domainKeyType int - -// String defines a Stringer function for debugging and pretty printing. -func (k domainKeyType) String() string { - return "domain" -} - -const domainKey domainKeyType = 0 - -// BindDomain binds domain to context. -func BindDomain(ctx context.Context, domain *domain.Domain) { - ctx.SetValue(domainKey, domain) -} - -// GetDomain gets domain from context. -func GetDomain(ctx context.Context) *domain.Domain { - v, ok := ctx.Value(domainKey).(*domain.Domain) - if !ok { - return nil - } - return v -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/forupdate/for_update_ctx.go b/vendor/github.com/pingcap/tidb/sessionctx/forupdate/for_update_ctx.go deleted file mode 100644 index f413bd1c5..000000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/forupdate/for_update_ctx.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package forupdate record information for "select ... for update" statement -package forupdate - -import "github.com/pingcap/tidb/context" - -// A dummy type to avoid naming collision in context. -type forupdateKeyType int - -// String defines a Stringer function for debugging and pretty printing. -func (k forupdateKeyType) String() string { - return "for update" -} - -// ForUpdateKey is used to retrive "select for update" statement information -const ForUpdateKey forupdateKeyType = 0 - -// SetForUpdate set "select for update" flag. -func SetForUpdate(ctx context.Context) { - ctx.SetValue(ForUpdateKey, true) -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/variable/session.go b/vendor/github.com/pingcap/tidb/sessionctx/variable/session.go deleted file mode 100644 index 908733032..000000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/variable/session.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package variable - -import ( - "github.com/pingcap/tidb/context" -) - -// SessionVars is to handle user-defined or global variables in current session. -type SessionVars struct { - // user-defined variables - Users map[string]string - // system variables - Systems map[string]string - // prepared statement - PreparedStmts map[uint32]interface{} - - PreparedStmtNameToID map[string]uint32 - // prepared statement auto increment id - preparedStmtID uint32 - - // following variables are special for current session - Status uint16 - LastInsertID uint64 - AffectedRows uint64 - - // Client capability - ClientCapability uint32 - - // Connection ID - ConnectionID uint64 - - // Found rows - FoundRows uint64 - - // Current user - User string -} - -// sessionVarsKeyType is a dummy type to avoid naming collision in context. -type sessionVarsKeyType int - -// String defines a Stringer function for debugging and pretty printing. -func (k sessionVarsKeyType) String() string { - return "session_vars" -} - -const sessionVarsKey sessionVarsKeyType = 0 - -// BindSessionVars creates a session vars object and binds it to context. -func BindSessionVars(ctx context.Context) { - v := &SessionVars{ - Users: make(map[string]string), - Systems: make(map[string]string), - PreparedStmts: make(map[uint32]interface{}), - PreparedStmtNameToID: make(map[string]uint32), - } - - ctx.SetValue(sessionVarsKey, v) -} - -// GetSessionVars gets the session vars from context. -func GetSessionVars(ctx context.Context) *SessionVars { - v, ok := ctx.Value(sessionVarsKey).(*SessionVars) - if !ok { - return nil - } - return v -} - -const ( - characterSetConnection = "character_set_connection" - collationConnection = "collation_connection" -) - -// GetCharsetInfo gets charset and collation for current context. -// What character set should the server translate a statement to after receiving it? -// For this, the server uses the character_set_connection and collation_connection system variables. -// It converts statements sent by the client from character_set_client to character_set_connection -// (except for string literals that have an introducer such as _latin1 or _utf8). -// collation_connection is important for comparisons of literal strings. -// For comparisons of strings with column values, collation_connection does not matter because columns -// have their own collation, which has a higher collation precedence. -// See: https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html -func GetCharsetInfo(ctx context.Context) (charset, collation string) { - sessionVars := GetSessionVars(ctx) - charset = sessionVars.Systems[characterSetConnection] - collation = sessionVars.Systems[collationConnection] - return -} - -// SetLastInsertID saves the last insert id to the session context. -// TODO: we may store the result for last_insert_id sys var later. -func (s *SessionVars) SetLastInsertID(insertID uint64) { - s.LastInsertID = insertID -} - -// SetAffectedRows saves the affected rows to the session context. -func (s *SessionVars) SetAffectedRows(affectedRows uint64) { - s.AffectedRows = affectedRows -} - -// AddAffectedRows adds affected rows with the argument rows. -func (s *SessionVars) AddAffectedRows(rows uint64) { - s.AffectedRows += rows -} - -// AddFoundRows adds found rows with the argument rows. -func (s *SessionVars) AddFoundRows(rows uint64) { - s.FoundRows += rows -} - -// SetStatusFlag sets the session server status variable. -// If on is ture sets the flag in session status, -// otherwise removes the flag. -func (s *SessionVars) SetStatusFlag(flag uint16, on bool) { - if on { - s.Status |= flag - return - } - s.Status &= (^flag) -} - -// GetNextPreparedStmtID generates and returns the next session scope prepared statement id. -func (s *SessionVars) GetNextPreparedStmtID() uint32 { - s.preparedStmtID++ - return s.preparedStmtID -} - -// SetCurrentUser saves the current user to the session context. -func (s *SessionVars) SetCurrentUser(user string) { - s.User = user -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/variable/statusvar.go b/vendor/github.com/pingcap/tidb/sessionctx/variable/statusvar.go deleted file mode 100644 index c2753e905..000000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/variable/statusvar.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package variable - -import ( - "github.com/juju/errors" -) - -var statisticsList []Statistics -var globalStatusScopes = make(map[string]ScopeFlag) - -// DefaultScopeFlag is the status default scope. -var DefaultScopeFlag = ScopeGlobal | ScopeSession - -// StatusVal is the value of the corresponding status variable. -type StatusVal struct { - Scope ScopeFlag - Value interface{} -} - -// Statistics is the interface of statistics. -type Statistics interface { - // GetScope gets the status variables scope. - GetScope(status string) ScopeFlag - // Stats returns the statistics status variables. - Stats() (map[string]interface{}, error) -} - -// RegisterStatistics registers statistics. -func RegisterStatistics(s Statistics) { - statisticsList = append(statisticsList, s) -} - -// GetStatusVars gets registered statistics status variables. -func GetStatusVars() (map[string]*StatusVal, error) { - statusVars := make(map[string]*StatusVal) - - for _, statistics := range statisticsList { - vals, err := statistics.Stats() - if err != nil { - return nil, errors.Trace(err) - } - - for name, val := range vals { - scope := statistics.GetScope(name) - statusVars[name] = &StatusVal{Value: val, Scope: scope} - } - } - - return statusVars, nil -} diff --git a/vendor/github.com/pingcap/tidb/sessionctx/variable/sysvar.go b/vendor/github.com/pingcap/tidb/sessionctx/variable/sysvar.go deleted file mode 100644 index 1f281ce19..000000000 --- a/vendor/github.com/pingcap/tidb/sessionctx/variable/sysvar.go +++ /dev/null @@ -1,631 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package variable - -import ( - "strings" - - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" -) - -// ScopeFlag is for system variable whether can be changed in global/session dynamically or not. -type ScopeFlag uint8 - -const ( - // ScopeNone means the system variable can not be changed dynamically. - ScopeNone ScopeFlag = iota << 0 - // ScopeGlobal means the system variable can be changed globally. - ScopeGlobal - // ScopeSession means the system variable can only be changed in current session. - ScopeSession -) - -// SysVar is for system variable. -type SysVar struct { - // Scope is for whether can be changed or not - Scope ScopeFlag - - // Variable name - Name string - - // Variable value - Value string -} - -// SysVars is global sys vars map. -var SysVars map[string]*SysVar - -// GetSysVar returns sys var info for name as key. -func GetSysVar(name string) *SysVar { - name = strings.ToLower(name) - return SysVars[name] -} - -// Variable error codes. -const ( - CodeUnknownStatusVar terror.ErrCode = 1 - CodeUnknownSystemVar terror.ErrCode = 1193 -) - -// Variable errors -var ( - UnknownStatusVar = terror.ClassVariable.New(CodeUnknownStatusVar, "unknown status variable") - UnknownSystemVar = terror.ClassVariable.New(CodeUnknownSystemVar, "unknown system variable") -) - -func init() { - SysVars = make(map[string]*SysVar) - for _, v := range defaultSysVars { - SysVars[v.Name] = v - } - - // Register terror to mysql error map. - mySQLErrCodes := map[terror.ErrCode]uint16{ - CodeUnknownSystemVar: mysql.ErrUnknownSystemVariable, - } - terror.ErrClassToMySQLCodes[terror.ClassVariable] = mySQLErrCodes -} - -// we only support MySQL now -var defaultSysVars = []*SysVar{ - {ScopeGlobal, "gtid_mode", "OFF"}, - {ScopeGlobal, "flush_time", "0"}, - {ScopeSession, "pseudo_slave_mode", ""}, - {ScopeNone, "performance_schema_max_mutex_classes", "200"}, - {ScopeGlobal | ScopeSession, "low_priority_updates", "OFF"}, - {ScopeGlobal | ScopeSession, "session_track_gtids", ""}, - {ScopeGlobal | ScopeSession, "ndbinfo_max_rows", ""}, - {ScopeGlobal | ScopeSession, "ndb_index_stat_option", ""}, - {ScopeGlobal | ScopeSession, "old_passwords", "0"}, - {ScopeNone, "innodb_version", "5.6.25"}, - {ScopeGlobal, "max_connections", "151"}, - {ScopeGlobal | ScopeSession, "big_tables", "OFF"}, - {ScopeNone, "skip_external_locking", "ON"}, - {ScopeGlobal, "slave_pending_jobs_size_max", "16777216"}, - {ScopeNone, "innodb_sync_array_size", "1"}, - {ScopeSession, "rand_seed2", ""}, - {ScopeGlobal, "validate_password_number_count", ""}, - {ScopeSession, "gtid_next", ""}, - {ScopeGlobal | ScopeSession, "sql_select_limit", "18446744073709551615"}, - {ScopeGlobal, "ndb_show_foreign_key_mock_tables", ""}, - {ScopeNone, "multi_range_count", "256"}, - {ScopeGlobal | ScopeSession, "default_week_format", "0"}, - {ScopeGlobal | ScopeSession, "binlog_error_action", "IGNORE_ERROR"}, - {ScopeGlobal, "slave_transaction_retries", "10"}, - {ScopeGlobal | ScopeSession, "default_storage_engine", "InnoDB"}, - {ScopeNone, "ft_query_expansion_limit", "20"}, - {ScopeGlobal, "max_connect_errors", "100"}, - {ScopeGlobal, "sync_binlog", "0"}, - {ScopeNone, "max_digest_length", "1024"}, - {ScopeNone, "innodb_force_load_corrupted", "OFF"}, - {ScopeNone, "performance_schema_max_table_handles", "4000"}, - {ScopeGlobal, "innodb_fast_shutdown", "1"}, - {ScopeNone, "ft_max_word_len", "84"}, - {ScopeGlobal, "log_backward_compatible_user_definitions", ""}, - {ScopeNone, "lc_messages_dir", "/usr/local/mysql-5.6.25-osx10.8-x86_64/share/"}, - {ScopeGlobal, "ft_boolean_syntax", "+ -><()~*:\"\"&|"}, - {ScopeGlobal, "table_definition_cache", "1400"}, - {ScopeNone, "skip_name_resolve", "OFF"}, - {ScopeNone, "performance_schema_max_file_handles", "32768"}, - {ScopeSession, "transaction_allow_batching", ""}, - {ScopeGlobal | ScopeSession, "sql_mode", "NO_ENGINE_SUBSTITUTION"}, - {ScopeNone, "performance_schema_max_statement_classes", "168"}, - {ScopeGlobal, "server_id", "0"}, - {ScopeGlobal, "innodb_flushing_avg_loops", "30"}, - {ScopeGlobal | ScopeSession, "tmp_table_size", "16777216"}, - {ScopeGlobal, "innodb_max_purge_lag", "0"}, - {ScopeGlobal | ScopeSession, "preload_buffer_size", "32768"}, - {ScopeGlobal, "slave_checkpoint_period", "300"}, - {ScopeGlobal, "check_proxy_users", ""}, - {ScopeNone, "have_query_cache", "YES"}, - {ScopeGlobal, "innodb_flush_log_at_timeout", "1"}, - {ScopeGlobal, "innodb_max_undo_log_size", ""}, - {ScopeGlobal | ScopeSession, "range_alloc_block_size", "4096"}, - {ScopeGlobal, "connect_timeout", "10"}, - {ScopeGlobal | ScopeSession, "collation_server", "latin1_swedish_ci"}, - {ScopeNone, "have_rtree_keys", "YES"}, - {ScopeGlobal, "innodb_old_blocks_pct", "37"}, - {ScopeGlobal, "innodb_file_format", "Antelope"}, - {ScopeGlobal, "innodb_compression_failure_threshold_pct", "5"}, - {ScopeNone, "performance_schema_events_waits_history_long_size", "10000"}, - {ScopeGlobal, "innodb_checksum_algorithm", "innodb"}, - {ScopeNone, "innodb_ft_sort_pll_degree", "2"}, - {ScopeNone, "thread_stack", "262144"}, - {ScopeGlobal, "relay_log_info_repository", "FILE"}, - {ScopeGlobal | ScopeSession, "sql_log_bin", "ON"}, - {ScopeGlobal, "super_read_only", ""}, - {ScopeGlobal | ScopeSession, "max_delayed_threads", "20"}, - {ScopeNone, "protocol_version", "10"}, - {ScopeGlobal | ScopeSession, "new", "OFF"}, - {ScopeGlobal | ScopeSession, "myisam_sort_buffer_size", "8388608"}, - {ScopeGlobal | ScopeSession, "optimizer_trace_offset", "-1"}, - {ScopeGlobal, "innodb_buffer_pool_dump_at_shutdown", "OFF"}, - {ScopeGlobal | ScopeSession, "sql_notes", "ON"}, - {ScopeGlobal, "innodb_cmp_per_index_enabled", "OFF"}, - {ScopeGlobal, "innodb_ft_server_stopword_table", ""}, - {ScopeNone, "performance_schema_max_file_instances", "7693"}, - {ScopeNone, "log_output", "FILE"}, - {ScopeGlobal, "binlog_group_commit_sync_delay", ""}, - {ScopeGlobal, "binlog_group_commit_sync_no_delay_count", ""}, - {ScopeNone, "have_crypt", "YES"}, - {ScopeGlobal, "innodb_log_write_ahead_size", ""}, - {ScopeNone, "innodb_log_group_home_dir", "./"}, - {ScopeNone, "performance_schema_events_statements_history_size", "10"}, - {ScopeGlobal, "general_log", "OFF"}, - {ScopeGlobal, "validate_password_dictionary_file", ""}, - {ScopeGlobal, "binlog_order_commits", "ON"}, - {ScopeGlobal, "master_verify_checksum", "OFF"}, - {ScopeGlobal, "key_cache_division_limit", "100"}, - {ScopeGlobal, "rpl_semi_sync_master_trace_level", ""}, - {ScopeGlobal | ScopeSession, "max_insert_delayed_threads", "20"}, - {ScopeNone, "performance_schema_session_connect_attrs_size", "512"}, - {ScopeGlobal | ScopeSession, "time_zone", "SYSTEM"}, - {ScopeGlobal, "innodb_max_dirty_pages_pct", "75"}, - {ScopeGlobal, "innodb_file_per_table", "ON"}, - {ScopeGlobal, "innodb_log_compressed_pages", "ON"}, - {ScopeGlobal, "master_info_repository", "FILE"}, - {ScopeGlobal, "rpl_stop_slave_timeout", "31536000"}, - {ScopeNone, "skip_networking", "OFF"}, - {ScopeGlobal, "innodb_monitor_reset", ""}, - {ScopeNone, "have_ssl", "DISABLED"}, - {ScopeNone, "system_time_zone", "CST"}, - {ScopeGlobal, "innodb_print_all_deadlocks", "OFF"}, - {ScopeNone, "innodb_autoinc_lock_mode", "1"}, - {ScopeGlobal, "slave_net_timeout", "3600"}, - {ScopeGlobal, "key_buffer_size", "8388608"}, - {ScopeGlobal | ScopeSession, "foreign_key_checks", "ON"}, - {ScopeGlobal, "host_cache_size", "279"}, - {ScopeGlobal, "delay_key_write", "ON"}, - {ScopeNone, "metadata_locks_cache_size", "1024"}, - {ScopeNone, "innodb_force_recovery", "0"}, - {ScopeGlobal, "innodb_file_format_max", "Antelope"}, - {ScopeGlobal | ScopeSession, "debug", ""}, - {ScopeGlobal, "log_warnings", "1"}, - {ScopeGlobal, "offline_mode", ""}, - {ScopeGlobal | ScopeSession, "innodb_strict_mode", "OFF"}, - {ScopeGlobal, "innodb_rollback_segments", "128"}, - {ScopeGlobal | ScopeSession, "join_buffer_size", "262144"}, - {ScopeNone, "innodb_mirrored_log_groups", "1"}, - {ScopeGlobal, "max_binlog_size", "1073741824"}, - {ScopeGlobal, "sync_master_info", "10000"}, - {ScopeGlobal, "concurrent_insert", "AUTO"}, - {ScopeGlobal, "innodb_adaptive_hash_index", "ON"}, - {ScopeGlobal, "innodb_ft_enable_stopword", "ON"}, - {ScopeGlobal, "general_log_file", "/usr/local/mysql/data/localhost.log"}, - {ScopeGlobal | ScopeSession, "innodb_support_xa", "ON"}, - {ScopeGlobal, "innodb_compression_level", "6"}, - {ScopeNone, "innodb_file_format_check", "ON"}, - {ScopeNone, "myisam_mmap_size", "18446744073709551615"}, - {ScopeGlobal, "init_slave", ""}, - {ScopeNone, "innodb_buffer_pool_instances", "8"}, - {ScopeGlobal | ScopeSession, "block_encryption_mode", "aes-128-ecb"}, - {ScopeGlobal | ScopeSession, "max_length_for_sort_data", "1024"}, - {ScopeNone, "character_set_system", "utf8"}, - {ScopeGlobal | ScopeSession, "interactive_timeout", "28800"}, - {ScopeGlobal, "innodb_optimize_fulltext_only", "OFF"}, - {ScopeNone, "character_sets_dir", "/usr/local/mysql-5.6.25-osx10.8-x86_64/share/charsets/"}, - {ScopeGlobal | ScopeSession, "query_cache_type", "OFF"}, - {ScopeNone, "innodb_rollback_on_timeout", "OFF"}, - {ScopeGlobal | ScopeSession, "query_alloc_block_size", "8192"}, - {ScopeGlobal, "slave_compressed_protocol", "OFF"}, - {ScopeGlobal, "init_connect", ""}, - {ScopeGlobal, "rpl_semi_sync_slave_trace_level", ""}, - {ScopeNone, "have_compress", "YES"}, - {ScopeNone, "thread_concurrency", "10"}, - {ScopeGlobal | ScopeSession, "query_prealloc_size", "8192"}, - {ScopeNone, "relay_log_space_limit", "0"}, - {ScopeGlobal | ScopeSession, "max_user_connections", "0"}, - {ScopeNone, "performance_schema_max_thread_classes", "50"}, - {ScopeGlobal, "innodb_api_trx_level", "0"}, - {ScopeNone, "disconnect_on_expired_password", "ON"}, - {ScopeNone, "performance_schema_max_file_classes", "50"}, - {ScopeGlobal, "expire_logs_days", "0"}, - {ScopeGlobal | ScopeSession, "binlog_rows_query_log_events", "OFF"}, - {ScopeGlobal, "validate_password_policy", ""}, - {ScopeGlobal, "default_password_lifetime", ""}, - {ScopeNone, "pid_file", "/usr/local/mysql/data/localhost.pid"}, - {ScopeNone, "innodb_undo_tablespaces", "0"}, - {ScopeGlobal, "innodb_status_output_locks", "OFF"}, - {ScopeNone, "performance_schema_accounts_size", "100"}, - {ScopeGlobal | ScopeSession, "max_error_count", "64"}, - {ScopeGlobal, "max_write_lock_count", "18446744073709551615"}, - {ScopeNone, "performance_schema_max_socket_instances", "322"}, - {ScopeNone, "performance_schema_max_table_instances", "12500"}, - {ScopeGlobal, "innodb_stats_persistent_sample_pages", "20"}, - {ScopeGlobal, "show_compatibility_56", ""}, - {ScopeGlobal, "log_slow_slave_statements", "OFF"}, - {ScopeNone, "innodb_open_files", "2000"}, - {ScopeGlobal, "innodb_spin_wait_delay", "6"}, - {ScopeGlobal, "thread_cache_size", "9"}, - {ScopeGlobal, "log_slow_admin_statements", "OFF"}, - {ScopeNone, "innodb_checksums", "ON"}, - {ScopeNone, "hostname", "localhost"}, - {ScopeGlobal | ScopeSession, "auto_increment_offset", "1"}, - {ScopeNone, "ft_stopword_file", "(built-in)"}, - {ScopeGlobal, "innodb_max_dirty_pages_pct_lwm", "0"}, - {ScopeGlobal, "log_queries_not_using_indexes", "OFF"}, - {ScopeSession, "timestamp", ""}, - {ScopeGlobal | ScopeSession, "query_cache_wlock_invalidate", "OFF"}, - {ScopeGlobal | ScopeSession, "sql_buffer_result", "OFF"}, - {ScopeGlobal | ScopeSession, "character_set_filesystem", "binary"}, - {ScopeGlobal | ScopeSession, "collation_database", "latin1_swedish_ci"}, - {ScopeGlobal | ScopeSession, "auto_increment_increment", "1"}, - {ScopeGlobal | ScopeSession, "max_heap_table_size", "16777216"}, - {ScopeGlobal | ScopeSession, "div_precision_increment", "4"}, - {ScopeGlobal, "innodb_lru_scan_depth", "1024"}, - {ScopeGlobal, "innodb_purge_rseg_truncate_frequency", ""}, - {ScopeGlobal | ScopeSession, "sql_auto_is_null", "OFF"}, - {ScopeNone, "innodb_api_enable_binlog", "OFF"}, - {ScopeGlobal | ScopeSession, "innodb_ft_user_stopword_table", ""}, - {ScopeNone, "server_id_bits", "32"}, - {ScopeGlobal, "innodb_log_checksum_algorithm", ""}, - {ScopeNone, "innodb_buffer_pool_load_at_startup", "OFF"}, - {ScopeGlobal | ScopeSession, "sort_buffer_size", "262144"}, - {ScopeGlobal, "innodb_flush_neighbors", "1"}, - {ScopeNone, "innodb_use_sys_malloc", "ON"}, - {ScopeNone, "plugin_dir", "/usr/local/mysql/lib/plugin/"}, - {ScopeNone, "performance_schema_max_socket_classes", "10"}, - {ScopeNone, "performance_schema_max_stage_classes", "150"}, - {ScopeGlobal, "innodb_purge_batch_size", "300"}, - {ScopeNone, "have_profiling", "YES"}, - {ScopeGlobal, "slave_checkpoint_group", "512"}, - {ScopeGlobal | ScopeSession, "character_set_client", "latin1"}, - {ScopeNone, "slave_load_tmpdir", "/var/tmp/"}, - {ScopeGlobal, "innodb_buffer_pool_dump_now", "OFF"}, - {ScopeGlobal, "relay_log_purge", "ON"}, - {ScopeGlobal, "ndb_distribution", ""}, - {ScopeGlobal, "myisam_data_pointer_size", "6"}, - {ScopeGlobal, "ndb_optimization_delay", ""}, - {ScopeGlobal, "innodb_ft_num_word_optimize", "2000"}, - {ScopeGlobal | ScopeSession, "max_join_size", "18446744073709551615"}, - {ScopeNone, "core_file", "OFF"}, - {ScopeGlobal | ScopeSession, "max_seeks_for_key", "18446744073709551615"}, - {ScopeNone, "innodb_log_buffer_size", "8388608"}, - {ScopeGlobal, "delayed_insert_timeout", "300"}, - {ScopeGlobal, "max_relay_log_size", "0"}, - {ScopeGlobal | ScopeSession, "max_sort_length", "1024"}, - {ScopeNone, "metadata_locks_hash_instances", "8"}, - {ScopeGlobal, "ndb_eventbuffer_free_percent", ""}, - {ScopeNone, "large_files_support", "ON"}, - {ScopeGlobal, "binlog_max_flush_queue_time", "0"}, - {ScopeGlobal, "innodb_fill_factor", ""}, - {ScopeGlobal, "log_syslog_facility", ""}, - {ScopeNone, "innodb_ft_min_token_size", "3"}, - {ScopeGlobal | ScopeSession, "transaction_write_set_extraction", ""}, - {ScopeGlobal | ScopeSession, "ndb_blob_write_batch_bytes", ""}, - {ScopeGlobal, "automatic_sp_privileges", "ON"}, - {ScopeGlobal, "innodb_flush_sync", ""}, - {ScopeNone, "performance_schema_events_statements_history_long_size", "10000"}, - {ScopeGlobal, "innodb_monitor_disable", ""}, - {ScopeNone, "innodb_doublewrite", "ON"}, - {ScopeGlobal, "slave_parallel_type", ""}, - {ScopeNone, "log_bin_use_v1_row_events", "OFF"}, - {ScopeSession, "innodb_optimize_point_storage", ""}, - {ScopeNone, "innodb_api_disable_rowlock", "OFF"}, - {ScopeGlobal, "innodb_adaptive_flushing_lwm", "10"}, - {ScopeNone, "innodb_log_files_in_group", "2"}, - {ScopeGlobal, "innodb_buffer_pool_load_now", "OFF"}, - {ScopeNone, "performance_schema_max_rwlock_classes", "40"}, - {ScopeNone, "binlog_gtid_simple_recovery", "OFF"}, - {ScopeNone, "port", "3306"}, - {ScopeNone, "performance_schema_digests_size", "10000"}, - {ScopeGlobal | ScopeSession, "profiling", "OFF"}, - {ScopeNone, "lower_case_table_names", "2"}, - {ScopeSession, "rand_seed1", ""}, - {ScopeGlobal, "sha256_password_proxy_users", ""}, - {ScopeGlobal | ScopeSession, "sql_quote_show_create", "ON"}, - {ScopeGlobal | ScopeSession, "binlogging_impossible_mode", "IGNORE_ERROR"}, - {ScopeGlobal, "query_cache_size", "1048576"}, - {ScopeGlobal, "innodb_stats_transient_sample_pages", "8"}, - {ScopeGlobal, "innodb_stats_on_metadata", "OFF"}, - {ScopeNone, "server_uuid", "d530594e-1c86-11e5-878b-6b36ce6799ca"}, - {ScopeNone, "open_files_limit", "5000"}, - {ScopeGlobal | ScopeSession, "ndb_force_send", ""}, - {ScopeNone, "skip_show_database", "OFF"}, - {ScopeGlobal, "log_timestamps", ""}, - {ScopeNone, "version_compile_machine", "x86_64"}, - {ScopeGlobal, "slave_parallel_workers", "0"}, - {ScopeGlobal, "event_scheduler", "OFF"}, - {ScopeGlobal | ScopeSession, "ndb_deferred_constraints", ""}, - {ScopeGlobal, "log_syslog_include_pid", ""}, - {ScopeSession, "last_insert_id", ""}, - {ScopeNone, "innodb_ft_cache_size", "8000000"}, - {ScopeNone, "log_bin", "OFF"}, - {ScopeGlobal, "innodb_disable_sort_file_cache", "OFF"}, - {ScopeGlobal, "log_error_verbosity", ""}, - {ScopeNone, "performance_schema_hosts_size", "100"}, - {ScopeGlobal, "innodb_replication_delay", "0"}, - {ScopeGlobal, "slow_query_log", "OFF"}, - {ScopeSession, "debug_sync", ""}, - {ScopeGlobal, "innodb_stats_auto_recalc", "ON"}, - {ScopeGlobal, "timed_mutexes", "OFF"}, - {ScopeGlobal | ScopeSession, "lc_messages", "en_US"}, - {ScopeGlobal | ScopeSession, "bulk_insert_buffer_size", "8388608"}, - {ScopeGlobal | ScopeSession, "binlog_direct_non_transactional_updates", "OFF"}, - {ScopeGlobal, "innodb_change_buffering", "all"}, - {ScopeGlobal | ScopeSession, "sql_big_selects", "ON"}, - {ScopeGlobal | ScopeSession, "character_set_results", "latin1"}, - {ScopeGlobal, "innodb_max_purge_lag_delay", "0"}, - {ScopeGlobal | ScopeSession, "session_track_schema", ""}, - {ScopeGlobal, "innodb_io_capacity_max", "2000"}, - {ScopeGlobal, "innodb_autoextend_increment", "64"}, - {ScopeGlobal | ScopeSession, "binlog_format", "STATEMENT"}, - {ScopeGlobal | ScopeSession, "optimizer_trace", "enabled=off,one_line=off"}, - {ScopeGlobal | ScopeSession, "read_rnd_buffer_size", "262144"}, - {ScopeNone, "version_comment", "MySQL Community Server (GPL)"}, - {ScopeGlobal | ScopeSession, "net_write_timeout", "60"}, - {ScopeGlobal, "innodb_buffer_pool_load_abort", "OFF"}, - {ScopeGlobal | ScopeSession, "tx_isolation", "REPEATABLE-READ"}, - {ScopeGlobal | ScopeSession, "collation_connection", "latin1_swedish_ci"}, - {ScopeGlobal, "rpl_semi_sync_master_timeout", ""}, - {ScopeGlobal | ScopeSession, "transaction_prealloc_size", "4096"}, - {ScopeNone, "slave_skip_errors", "OFF"}, - {ScopeNone, "performance_schema_setup_objects_size", "100"}, - {ScopeGlobal, "sync_relay_log", "10000"}, - {ScopeGlobal, "innodb_ft_result_cache_limit", "2000000000"}, - {ScopeNone, "innodb_sort_buffer_size", "1048576"}, - {ScopeGlobal, "innodb_ft_enable_diag_print", "OFF"}, - {ScopeNone, "thread_handling", "one-thread-per-connection"}, - {ScopeGlobal, "stored_program_cache", "256"}, - {ScopeNone, "performance_schema_max_mutex_instances", "15906"}, - {ScopeGlobal, "innodb_adaptive_max_sleep_delay", "150000"}, - {ScopeNone, "large_pages", "OFF"}, - {ScopeGlobal | ScopeSession, "session_track_system_variables", ""}, - {ScopeGlobal, "innodb_change_buffer_max_size", "25"}, - {ScopeGlobal, "log_bin_trust_function_creators", "OFF"}, - {ScopeNone, "innodb_write_io_threads", "4"}, - {ScopeGlobal, "mysql_native_password_proxy_users", ""}, - {ScopeGlobal, "read_only", "OFF"}, - {ScopeNone, "large_page_size", "0"}, - {ScopeNone, "table_open_cache_instances", "1"}, - {ScopeGlobal, "innodb_stats_persistent", "ON"}, - {ScopeGlobal | ScopeSession, "session_track_state_change", ""}, - {ScopeNone, "optimizer_switch", "index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on"}, - {ScopeGlobal, "delayed_queue_size", "1000"}, - {ScopeNone, "innodb_read_only", "OFF"}, - {ScopeNone, "datetime_format", "%Y-%m-%d %H:%i:%s"}, - {ScopeGlobal, "log_syslog", ""}, - {ScopeNone, "version", "5.6.25"}, - {ScopeGlobal | ScopeSession, "transaction_alloc_block_size", "8192"}, - {ScopeGlobal, "sql_slave_skip_counter", "0"}, - {ScopeNone, "have_openssl", "DISABLED"}, - {ScopeGlobal, "innodb_large_prefix", "OFF"}, - {ScopeNone, "performance_schema_max_cond_classes", "80"}, - {ScopeGlobal, "innodb_io_capacity", "200"}, - {ScopeGlobal, "max_binlog_cache_size", "18446744073709547520"}, - {ScopeGlobal | ScopeSession, "ndb_index_stat_enable", ""}, - {ScopeGlobal, "executed_gtids_compression_period", ""}, - {ScopeNone, "time_format", "%H:%i:%s"}, - {ScopeGlobal | ScopeSession, "old_alter_table", "OFF"}, - {ScopeGlobal | ScopeSession, "long_query_time", "10.000000"}, - {ScopeNone, "innodb_use_native_aio", "OFF"}, - {ScopeGlobal, "log_throttle_queries_not_using_indexes", "0"}, - {ScopeNone, "locked_in_memory", "OFF"}, - {ScopeNone, "innodb_api_enable_mdl", "OFF"}, - {ScopeGlobal, "binlog_cache_size", "32768"}, - {ScopeGlobal, "innodb_compression_pad_pct_max", "50"}, - {ScopeGlobal, "innodb_commit_concurrency", "0"}, - {ScopeNone, "ft_min_word_len", "4"}, - {ScopeGlobal, "enforce_gtid_consistency", "OFF"}, - {ScopeGlobal, "secure_auth", "ON"}, - {ScopeNone, "max_tmp_tables", "32"}, - {ScopeGlobal, "innodb_random_read_ahead", "OFF"}, - {ScopeGlobal | ScopeSession, "unique_checks", "ON"}, - {ScopeGlobal, "internal_tmp_disk_storage_engine", ""}, - {ScopeGlobal | ScopeSession, "myisam_repair_threads", "1"}, - {ScopeGlobal, "ndb_eventbuffer_max_alloc", ""}, - {ScopeGlobal, "innodb_read_ahead_threshold", "56"}, - {ScopeGlobal, "key_cache_block_size", "1024"}, - {ScopeGlobal, "rpl_semi_sync_slave_enabled", ""}, - {ScopeNone, "ndb_recv_thread_cpu_mask", ""}, - {ScopeGlobal, "gtid_purged", ""}, - {ScopeGlobal, "max_binlog_stmt_cache_size", "18446744073709547520"}, - {ScopeGlobal | ScopeSession, "lock_wait_timeout", "31536000"}, - {ScopeGlobal | ScopeSession, "read_buffer_size", "131072"}, - {ScopeNone, "innodb_read_io_threads", "4"}, - {ScopeGlobal | ScopeSession, "max_sp_recursion_depth", "0"}, - {ScopeNone, "ignore_builtin_innodb", "OFF"}, - {ScopeGlobal, "rpl_semi_sync_master_enabled", ""}, - {ScopeGlobal, "slow_query_log_file", "/usr/local/mysql/data/localhost-slow.log"}, - {ScopeGlobal, "innodb_thread_sleep_delay", "10000"}, - {ScopeNone, "license", "GPL"}, - {ScopeGlobal, "innodb_ft_aux_table", ""}, - {ScopeGlobal | ScopeSession, "sql_warnings", "OFF"}, - {ScopeGlobal | ScopeSession, "keep_files_on_create", "OFF"}, - {ScopeGlobal, "slave_preserve_commit_order", ""}, - {ScopeNone, "innodb_data_file_path", "ibdata1:12M:autoextend"}, - {ScopeNone, "performance_schema_setup_actors_size", "100"}, - {ScopeNone, "innodb_additional_mem_pool_size", "8388608"}, - {ScopeNone, "log_error", "/usr/local/mysql/data/localhost.err"}, - {ScopeGlobal, "slave_exec_mode", "STRICT"}, - {ScopeGlobal, "binlog_stmt_cache_size", "32768"}, - {ScopeNone, "relay_log_info_file", "relay-log.info"}, - {ScopeNone, "innodb_ft_total_cache_size", "640000000"}, - {ScopeNone, "performance_schema_max_rwlock_instances", "9102"}, - {ScopeGlobal, "table_open_cache", "2000"}, - {ScopeNone, "log_slave_updates", "OFF"}, - {ScopeNone, "performance_schema_events_stages_history_long_size", "10000"}, - {ScopeGlobal | ScopeSession, "autocommit", "ON"}, - {ScopeSession, "insert_id", ""}, - {ScopeGlobal | ScopeSession, "default_tmp_storage_engine", "InnoDB"}, - {ScopeGlobal | ScopeSession, "optimizer_search_depth", "62"}, - {ScopeGlobal, "max_points_in_geometry", ""}, - {ScopeGlobal, "innodb_stats_sample_pages", "8"}, - {ScopeGlobal | ScopeSession, "profiling_history_size", "15"}, - {ScopeGlobal | ScopeSession, "character_set_database", "latin1"}, - {ScopeNone, "have_symlink", "YES"}, - {ScopeGlobal | ScopeSession, "storage_engine", "InnoDB"}, - {ScopeGlobal | ScopeSession, "sql_log_off", "OFF"}, - {ScopeNone, "explicit_defaults_for_timestamp", "OFF"}, - {ScopeNone, "performance_schema_events_waits_history_size", "10"}, - {ScopeGlobal, "log_syslog_tag", ""}, - {ScopeGlobal | ScopeSession, "tx_read_only", "OFF"}, - {ScopeGlobal, "rpl_semi_sync_master_wait_point", ""}, - {ScopeGlobal, "innodb_undo_log_truncate", ""}, - {ScopeNone, "simplified_binlog_gtid_recovery", "OFF"}, - {ScopeSession, "innodb_create_intrinsic", ""}, - {ScopeGlobal, "gtid_executed_compression_period", ""}, - {ScopeGlobal, "ndb_log_empty_epochs", ""}, - {ScopeGlobal, "max_prepared_stmt_count", "16382"}, - {ScopeNone, "have_geometry", "YES"}, - {ScopeGlobal | ScopeSession, "optimizer_trace_max_mem_size", "16384"}, - {ScopeGlobal | ScopeSession, "net_retry_count", "10"}, - {ScopeSession, "ndb_table_no_logging", ""}, - {ScopeGlobal | ScopeSession, "optimizer_trace_features", "greedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subselect=on"}, - {ScopeGlobal, "innodb_flush_log_at_trx_commit", "1"}, - {ScopeGlobal, "rewriter_enabled", ""}, - {ScopeGlobal, "query_cache_min_res_unit", "4096"}, - {ScopeGlobal | ScopeSession, "updatable_views_with_limit", "YES"}, - {ScopeGlobal | ScopeSession, "optimizer_prune_level", "1"}, - {ScopeGlobal, "slave_sql_verify_checksum", "ON"}, - {ScopeGlobal | ScopeSession, "completion_type", "NO_CHAIN"}, - {ScopeGlobal, "binlog_checksum", "CRC32"}, - {ScopeNone, "report_port", "3306"}, - {ScopeGlobal | ScopeSession, "show_old_temporals", "OFF"}, - {ScopeGlobal, "query_cache_limit", "1048576"}, - {ScopeGlobal, "innodb_buffer_pool_size", "134217728"}, - {ScopeGlobal, "innodb_adaptive_flushing", "ON"}, - {ScopeNone, "datadir", "/usr/local/mysql/data/"}, - {ScopeGlobal | ScopeSession, "wait_timeout", "28800"}, - {ScopeGlobal, "innodb_monitor_enable", ""}, - {ScopeNone, "date_format", "%Y-%m-%d"}, - {ScopeGlobal, "innodb_buffer_pool_filename", "ib_buffer_pool"}, - {ScopeGlobal, "slow_launch_time", "2"}, - {ScopeGlobal, "slave_max_allowed_packet", "1073741824"}, - {ScopeGlobal | ScopeSession, "ndb_use_transactions", ""}, - {ScopeNone, "innodb_purge_threads", "1"}, - {ScopeGlobal, "innodb_concurrency_tickets", "5000"}, - {ScopeGlobal, "innodb_monitor_reset_all", ""}, - {ScopeNone, "performance_schema_users_size", "100"}, - {ScopeGlobal, "ndb_log_updated_only", ""}, - {ScopeNone, "basedir", "/usr/local/mysql"}, - {ScopeGlobal, "innodb_old_blocks_time", "1000"}, - {ScopeGlobal, "innodb_stats_method", "nulls_equal"}, - {ScopeGlobal | ScopeSession, "innodb_lock_wait_timeout", "50"}, - {ScopeGlobal, "local_infile", "ON"}, - {ScopeGlobal | ScopeSession, "myisam_stats_method", "nulls_unequal"}, - {ScopeNone, "version_compile_os", "osx10.8"}, - {ScopeNone, "relay_log_recovery", "OFF"}, - {ScopeNone, "old", "OFF"}, - {ScopeGlobal | ScopeSession, "innodb_table_locks", "ON"}, - {ScopeNone, "performance_schema", "ON"}, - {ScopeNone, "myisam_recover_options", "OFF"}, - {ScopeGlobal | ScopeSession, "net_buffer_length", "16384"}, - {ScopeGlobal, "rpl_semi_sync_master_wait_for_slave_count", ""}, - {ScopeGlobal | ScopeSession, "binlog_row_image", "FULL"}, - {ScopeNone, "innodb_locks_unsafe_for_binlog", "OFF"}, - {ScopeSession, "rbr_exec_mode", ""}, - {ScopeGlobal, "myisam_max_sort_file_size", "9223372036853727232"}, - {ScopeNone, "back_log", "80"}, - {ScopeNone, "lower_case_file_system", "ON"}, - {ScopeGlobal, "rpl_semi_sync_master_wait_no_slave", ""}, - {ScopeGlobal | ScopeSession, "group_concat_max_len", "1024"}, - {ScopeSession, "pseudo_thread_id", ""}, - {ScopeNone, "socket", "/tmp/myssock"}, - {ScopeNone, "have_dynamic_loading", "YES"}, - {ScopeGlobal, "rewriter_verbose", ""}, - {ScopeGlobal, "innodb_undo_logs", "128"}, - {ScopeNone, "performance_schema_max_cond_instances", "3504"}, - {ScopeGlobal, "delayed_insert_limit", "100"}, - {ScopeGlobal, "flush", "OFF"}, - {ScopeGlobal | ScopeSession, "eq_range_index_dive_limit", "10"}, - {ScopeNone, "performance_schema_events_stages_history_size", "10"}, - {ScopeGlobal | ScopeSession, "character_set_connection", "latin1"}, - {ScopeGlobal, "myisam_use_mmap", "OFF"}, - {ScopeGlobal | ScopeSession, "ndb_join_pushdown", ""}, - {ScopeGlobal | ScopeSession, "character_set_server", "latin1"}, - {ScopeGlobal, "validate_password_special_char_count", ""}, - {ScopeNone, "performance_schema_max_thread_instances", "402"}, - {ScopeGlobal, "slave_rows_search_algorithms", "TABLE_SCAN,INDEX_SCAN"}, - {ScopeGlobal | ScopeSession, "ndbinfo_show_hidden", ""}, - {ScopeGlobal | ScopeSession, "net_read_timeout", "30"}, - {ScopeNone, "innodb_page_size", "16384"}, - {ScopeGlobal, "max_allowed_packet", "4194304"}, - {ScopeNone, "innodb_log_file_size", "50331648"}, - {ScopeGlobal, "sync_relay_log_info", "10000"}, - {ScopeGlobal | ScopeSession, "optimizer_trace_limit", "1"}, - {ScopeNone, "innodb_ft_max_token_size", "84"}, - {ScopeGlobal, "validate_password_length", ""}, - {ScopeGlobal, "ndb_log_binlog_index", ""}, - {ScopeGlobal, "validate_password_mixed_case_count", ""}, - {ScopeGlobal, "innodb_api_bk_commit_interval", "5"}, - {ScopeNone, "innodb_undo_directory", "."}, - {ScopeNone, "bind_address", "*"}, - {ScopeGlobal, "innodb_sync_spin_loops", "30"}, - {ScopeGlobal | ScopeSession, "sql_safe_updates", "OFF"}, - {ScopeNone, "tmpdir", "/var/tmp/"}, - {ScopeGlobal, "innodb_thread_concurrency", "0"}, - {ScopeGlobal, "slave_allow_batching", "OFF"}, - {ScopeGlobal, "innodb_buffer_pool_dump_pct", ""}, - {ScopeGlobal | ScopeSession, "lc_time_names", "en_US"}, - {ScopeGlobal | ScopeSession, "max_statement_time", ""}, - {ScopeGlobal | ScopeSession, "end_markers_in_json", "OFF"}, - {ScopeGlobal, "avoid_temporal_upgrade", "OFF"}, - {ScopeGlobal, "key_cache_age_threshold", "300"}, - {ScopeGlobal, "innodb_status_output", "OFF"}, - {ScopeSession, "identity", ""}, - {ScopeGlobal | ScopeSession, "min_examined_row_limit", "0"}, - {ScopeGlobal, "sync_frm", "ON"}, - {ScopeGlobal, "innodb_online_alter_log_max_size", "134217728"}, -} - -// SetNamesVariables is the system variable names related to set names statements. -var SetNamesVariables = []string{ - "character_set_client", - "character_set_connection", - "character_set_results", -} - -const ( - // CollationConnection is the name for collation_connection system variable. - CollationConnection = "collation_connection" - // CharsetDatabase is the name for charactor_set_database system variable. - CharsetDatabase = "character_set_database" - // CollationDatabase is the name for collation_database system variable. - CollationDatabase = "collation_database" -) - -// GlobalVarAccessor is the interface for accessing global scope system and status variables. -type GlobalVarAccessor interface { - // GetGlobalSysVar gets the global system variable value for name. - GetGlobalSysVar(ctx context.Context, name string) (string, error) - // SetGlobalSysVar sets the global system variable name to value. - SetGlobalSysVar(ctx context.Context, name string, value string) error -} - -// globalSysVarAccessorKeyType is a dummy type to avoid naming collision in context. -type globalSysVarAccessorKeyType int - -// String defines a Stringer function for debugging and pretty printing. -func (k globalSysVarAccessorKeyType) String() string { - return "global_sysvar_accessor" -} - -const accessorKey globalSysVarAccessorKeyType = 0 - -// BindGlobalVarAccessor binds global var accessor to context. -func BindGlobalVarAccessor(ctx context.Context, accessor GlobalVarAccessor) { - ctx.SetValue(accessorKey, accessor) -} - -// GetGlobalVarAccessor gets accessor from ctx. -func GetGlobalVarAccessor(ctx context.Context) GlobalVarAccessor { - v, ok := ctx.Value(accessorKey).(GlobalVarAccessor) - if !ok { - panic("Miss global sysvar accessor") - } - return v -} diff --git a/vendor/github.com/pingcap/tidb/store/hbase/kv.go b/vendor/github.com/pingcap/tidb/store/hbase/kv.go deleted file mode 100644 index 6ceaff305..000000000 --- a/vendor/github.com/pingcap/tidb/store/hbase/kv.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package hbasekv - -import ( - "fmt" - "math/rand" - "net/url" - "path/filepath" - "strings" - "sync" - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/go-hbase" - "github.com/pingcap/go-themis" - "github.com/pingcap/go-themis/oracle" - "github.com/pingcap/go-themis/oracle/oracles" - "github.com/pingcap/tidb/kv" -) - -const ( - // hbaseColFamily is the hbase column family name. - hbaseColFamily = "f" - // hbaseQualifier is the hbase column name. - hbaseQualifier = "q" - // hbaseFmlAndQual is a shortcut. - hbaseFmlAndQual = hbaseColFamily + ":" + hbaseQualifier - // fix length conn pool - hbaseConnPoolSize = 10 -) - -var ( - hbaseColFamilyBytes = []byte(hbaseColFamily) - hbaseQualifierBytes = []byte(hbaseQualifier) -) - -var ( - _ kv.Storage = (*hbaseStore)(nil) -) - -var ( - // ErrInvalidDSN is returned when store dsn is invalid. - ErrInvalidDSN = errors.New("invalid dsn") -) - -type storeCache struct { - mu sync.Mutex - cache map[string]*hbaseStore -} - -var mc storeCache - -func init() { - mc.cache = make(map[string]*hbaseStore) - rand.Seed(time.Now().UnixNano()) -} - -type hbaseStore struct { - mu sync.Mutex - uuid string - storeName string - oracle oracle.Oracle - conns []hbase.HBaseClient -} - -func (s *hbaseStore) getHBaseClient() hbase.HBaseClient { - // return hbase connection randomly - return s.conns[rand.Intn(hbaseConnPoolSize)] -} - -func (s *hbaseStore) Begin() (kv.Transaction, error) { - s.mu.Lock() - defer s.mu.Unlock() - hbaseCli := s.getHBaseClient() - t, err := themis.NewTxn(hbaseCli, s.oracle) - if err != nil { - return nil, errors.Trace(err) - } - txn := newHbaseTxn(t, s.storeName) - return txn, nil -} - -func (s *hbaseStore) GetSnapshot(ver kv.Version) (kv.Snapshot, error) { - hbaseCli := s.getHBaseClient() - t, err := themis.NewTxn(hbaseCli, s.oracle) - if err != nil { - return nil, errors.Trace(err) - } - return newHbaseSnapshot(t, s.storeName), nil -} - -func (s *hbaseStore) Close() error { - mc.mu.Lock() - defer mc.mu.Unlock() - - delete(mc.cache, s.uuid) - - var err error - for _, conn := range s.conns { - err = conn.Close() - if err != nil { - log.Error(err) - } - } - // return last error - return err -} - -func (s *hbaseStore) UUID() string { - return s.uuid -} - -func (s *hbaseStore) CurrentVersion() (kv.Version, error) { - hbaseCli := s.getHBaseClient() - t, err := themis.NewTxn(hbaseCli, s.oracle) - if err != nil { - return kv.Version{Ver: 0}, errors.Trace(err) - } - defer t.Release() - - return kv.Version{Ver: t.GetStartTS()}, nil -} - -// Driver implements engine Driver. -type Driver struct { -} - -const ( - tsoTypeLocal = "local" - tsoTypeZK = "zk" - - tsoZKPath = "/zk/tso" -) - -// Open opens or creates an HBase storage with given path. -// -// The format of path should be 'hbase://zk1,zk2,zk3/table[?tso=local|zk]'. -// If tso is not provided, it will use a local oracle instead. (for test only) -func (d Driver) Open(path string) (kv.Storage, error) { - mc.mu.Lock() - defer mc.mu.Unlock() - - zks, tso, tableName, err := parsePath(path) - if err != nil { - return nil, errors.Trace(err) - } - if tso != tsoTypeLocal && tso != tsoTypeZK { - return nil, errors.Trace(ErrInvalidDSN) - } - - uuid := fmt.Sprintf("hbase-%v-%v", zks, tableName) - if tso == tsoTypeLocal { - log.Warnf("hbase: store(%s) is using local oracle(for test only)", uuid) - } - if store, ok := mc.cache[uuid]; ok { - return store, nil - } - - // create buffered HBase connections, HBaseClient is goroutine-safe, so - // it's OK to redistribute to transactions. - conns := make([]hbase.HBaseClient, 0, hbaseConnPoolSize) - for i := 0; i < hbaseConnPoolSize; i++ { - var c hbase.HBaseClient - c, err = hbase.NewClient(strings.Split(zks, ","), "/hbase") - if err != nil { - return nil, errors.Trace(err) - } - conns = append(conns, c) - } - - c := conns[0] - var b bool - b, err = c.TableExists(tableName) - if err != nil { - return nil, errors.Trace(err) - } - if !b { - // Create new hbase table for store. - t := hbase.NewTableDesciptor(tableName) - cf := hbase.NewColumnFamilyDescriptor(hbaseColFamily) - cf.AddAttr("THEMIS_ENABLE", "true") - t.AddColumnDesc(cf) - //TODO: specify split? - if err := c.CreateTable(t, nil); err != nil { - return nil, errors.Trace(err) - } - } - - var ora oracle.Oracle - switch tso { - case tsoTypeLocal: - ora = oracles.NewLocalOracle() - case tsoTypeZK: - ora = oracles.NewRemoteOracle(zks, tsoZKPath) - } - - s := &hbaseStore{ - uuid: uuid, - storeName: tableName, - oracle: ora, - conns: conns, - } - mc.cache[uuid] = s - return s, nil -} - -func parsePath(path string) (zks, tso, tableName string, err error) { - u, err := url.Parse(path) - if err != nil { - return "", "", "", errors.Trace(err) - } - if strings.ToLower(u.Scheme) != "hbase" { - return "", "", "", errors.Trace(ErrInvalidDSN) - } - p, tableName := filepath.Split(u.Path) - if p != "/" { - return "", "", "", errors.Trace(ErrInvalidDSN) - } - zks = u.Host - tso = u.Query().Get("tso") - if tso == "" { - tso = tsoTypeLocal - } - return zks, tso, tableName, nil -} diff --git a/vendor/github.com/pingcap/tidb/store/hbase/snapshot.go b/vendor/github.com/pingcap/tidb/store/hbase/snapshot.go deleted file mode 100644 index 8efe2a06b..000000000 --- a/vendor/github.com/pingcap/tidb/store/hbase/snapshot.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package hbasekv - -import ( - "github.com/juju/errors" - "github.com/pingcap/go-hbase" - "github.com/pingcap/go-themis" - "github.com/pingcap/tidb/kv" -) - -var ( - _ kv.Snapshot = (*hbaseSnapshot)(nil) - _ kv.Iterator = (*hbaseIter)(nil) -) - -// hbaseBatchSize is used for go-themis Scanner. -const hbaseBatchSize = 1000 - -// hbaseSnapshot implements MvccSnapshot interface. -type hbaseSnapshot struct { - txn themis.Txn - storeName string -} - -// newHBaseSnapshot creates a snapshot of an HBase store. -func newHbaseSnapshot(txn themis.Txn, storeName string) *hbaseSnapshot { - return &hbaseSnapshot{ - txn: txn, - storeName: storeName, - } -} - -// Get gets the value for key k from snapshot. -func (s *hbaseSnapshot) Get(k kv.Key) ([]byte, error) { - g := hbase.NewGet([]byte(k)) - g.AddColumn(hbaseColFamilyBytes, hbaseQualifierBytes) - v, err := internalGet(s, g) - if err != nil { - return nil, errors.Trace(err) - } - return v, nil -} - -// BatchGet implements kv.Snapshot.BatchGet interface. -func (s *hbaseSnapshot) BatchGet(keys []kv.Key) (map[string][]byte, error) { - gets := make([]*hbase.Get, len(keys)) - for i, key := range keys { - g := hbase.NewGet(key) - g.AddColumn(hbaseColFamilyBytes, hbaseQualifierBytes) - gets[i] = g - } - rows, err := s.txn.Gets(s.storeName, gets) - if err != nil { - return nil, errors.Trace(err) - } - - m := make(map[string][]byte, len(rows)) - for _, r := range rows { - k := string(r.Row) - v := r.Columns[hbaseFmlAndQual].Value - m[k] = v - } - return m, nil -} - -func internalGet(s *hbaseSnapshot, g *hbase.Get) ([]byte, error) { - r, err := s.txn.Get(s.storeName, g) - if err != nil { - return nil, errors.Trace(err) - } - if r == nil || len(r.Columns) == 0 { - return nil, errors.Trace(kv.ErrNotExist) - } - return r.Columns[hbaseFmlAndQual].Value, nil -} - -func (s *hbaseSnapshot) Seek(k kv.Key) (kv.Iterator, error) { - scanner := s.txn.GetScanner([]byte(s.storeName), []byte(k), nil, hbaseBatchSize) - return newInnerScanner(scanner), nil -} - -func newInnerScanner(scanner *themis.ThemisScanner) kv.Iterator { - it := &hbaseIter{ - ThemisScanner: scanner, - } - it.Next() - return it -} - -func (s *hbaseSnapshot) Release() { - if s.txn != nil { - s.txn.Release() - s.txn = nil - } -} - -type hbaseIter struct { - *themis.ThemisScanner - rs *hbase.ResultRow -} - -func (it *hbaseIter) Next() error { - it.rs = it.ThemisScanner.Next() - return nil -} - -func (it *hbaseIter) Valid() bool { - if it.rs == nil || len(it.rs.Columns) == 0 { - return false - } - if it.ThemisScanner.Closed() { - return false - } - return true -} - -func (it *hbaseIter) Key() kv.Key { - return it.rs.Row -} - -func (it *hbaseIter) Value() []byte { - return it.rs.Columns[hbaseFmlAndQual].Value -} - -func (it *hbaseIter) Close() { - if it.ThemisScanner != nil { - it.ThemisScanner.Close() - it.ThemisScanner = nil - } - it.rs = nil -} diff --git a/vendor/github.com/pingcap/tidb/store/hbase/txn.go b/vendor/github.com/pingcap/tidb/store/hbase/txn.go deleted file mode 100644 index 0fa4262e8..000000000 --- a/vendor/github.com/pingcap/tidb/store/hbase/txn.go +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package hbasekv - -import ( - "fmt" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/go-hbase" - "github.com/pingcap/go-themis" - "github.com/pingcap/tidb/kv" -) - -var ( - _ kv.Transaction = (*hbaseTxn)(nil) -) - -// dbTxn implements kv.Transacton. It is not thread safe. -type hbaseTxn struct { - us kv.UnionStore - txn themis.Txn - store *hbaseStore // for commit - storeName string - tid uint64 - valid bool - version kv.Version // commit version - dirty bool -} - -func newHbaseTxn(t themis.Txn, storeName string) *hbaseTxn { - return &hbaseTxn{ - txn: t, - valid: true, - storeName: storeName, - tid: t.GetStartTS(), - us: kv.NewUnionStore(newHbaseSnapshot(t, storeName)), - } -} - -// Implement transaction interface - -func (txn *hbaseTxn) Get(k kv.Key) ([]byte, error) { - log.Debugf("[kv] get key:%q, txn:%d", k, txn.tid) - return txn.us.Get(k) -} - -func (txn *hbaseTxn) Set(k kv.Key, v []byte) error { - log.Debugf("[kv] set %q txn:%d", k, txn.tid) - txn.dirty = true - return txn.us.Set(k, v) -} - -func (txn *hbaseTxn) String() string { - return fmt.Sprintf("%d", txn.tid) -} - -func (txn *hbaseTxn) Seek(k kv.Key) (kv.Iterator, error) { - log.Debugf("[kv] seek %q txn:%d", k, txn.tid) - return txn.us.Seek(k) -} - -func (txn *hbaseTxn) Delete(k kv.Key) error { - log.Debugf("[kv] delete %q txn:%d", k, txn.tid) - txn.dirty = true - return txn.us.Delete(k) -} - -func (txn *hbaseTxn) SetOption(opt kv.Option, val interface{}) { - txn.us.SetOption(opt, val) -} - -func (txn *hbaseTxn) DelOption(opt kv.Option) { - txn.us.DelOption(opt) -} - -func (txn *hbaseTxn) doCommit() error { - if err := txn.us.CheckLazyConditionPairs(); err != nil { - return errors.Trace(err) - } - - err := txn.us.WalkBuffer(func(k kv.Key, v []byte) error { - row := append([]byte(nil), k...) - if len(v) == 0 { // Deleted marker - d := hbase.NewDelete(row) - d.AddStringColumn(hbaseColFamily, hbaseQualifier) - err := txn.txn.Delete(txn.storeName, d) - if err != nil { - return errors.Trace(err) - } - } else { - val := append([]byte(nil), v...) - p := hbase.NewPut(row) - p.AddValue(hbaseColFamilyBytes, hbaseQualifierBytes, val) - txn.txn.Put(txn.storeName, p) - } - return nil - }) - - if err != nil { - return errors.Trace(err) - } - - err = txn.txn.Commit() - if err != nil { - log.Error(err) - return errors.Trace(err) - } - - txn.version = kv.NewVersion(txn.txn.GetCommitTS()) - log.Debugf("[kv] commit successfully, txn.version:%d", txn.version.Ver) - return nil -} - -func (txn *hbaseTxn) Commit() error { - if !txn.valid { - return kv.ErrInvalidTxn - } - log.Debugf("[kv] start to commit txn %d", txn.tid) - defer func() { - txn.close() - }() - return txn.doCommit() -} - -func (txn *hbaseTxn) close() error { - txn.us.Release() - txn.valid = false - return nil -} - -//if fail, themis auto rollback -func (txn *hbaseTxn) Rollback() error { - if !txn.valid { - return kv.ErrInvalidTxn - } - log.Warnf("[kv] Rollback txn %d", txn.tid) - return txn.close() -} - -func (txn *hbaseTxn) LockKeys(keys ...kv.Key) error { - for _, key := range keys { - if err := txn.txn.LockRow(txn.storeName, key); err != nil { - return errors.Trace(err) - } - } - return nil -} - -func (txn *hbaseTxn) IsReadOnly() bool { - return !txn.dirty -} - -func (txn *hbaseTxn) StartTS() int64 { - return int64(txn.tid) -} - -func (txn *hbaseTxn) GetClient() kv.Client { - return nil -} - -type hbaseClient struct { -} - -func (c *hbaseClient) SupportRequestType(reqType, subType int64) bool { - return false -} - -func (c *hbaseClient) Send(req *kv.Request) kv.Response { - return nil -} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/boltdb/boltdb.go b/vendor/github.com/pingcap/tidb/store/localstore/boltdb/boltdb.go deleted file mode 100644 index 4095f9c2f..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/boltdb/boltdb.go +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package boltdb - -import ( - "os" - "path" - - "github.com/boltdb/bolt" - "github.com/juju/errors" - "github.com/pingcap/tidb/store/localstore/engine" - "github.com/pingcap/tidb/util/bytes" -) - -var ( - _ engine.DB = (*db)(nil) -) - -var ( - bucketName = []byte("tidb") -) - -type db struct { - *bolt.DB -} - -func (d *db) Get(key []byte) ([]byte, error) { - var value []byte - - err := d.DB.View(func(tx *bolt.Tx) error { - b := tx.Bucket(bucketName) - v := b.Get(key) - if v == nil { - return errors.Trace(engine.ErrNotFound) - } - value = bytes.CloneBytes(v) - return nil - }) - - return value, errors.Trace(err) -} - -func (d *db) MultiSeek(keys [][]byte) []*engine.MSeekResult { - res := make([]*engine.MSeekResult, 0, len(keys)) - d.DB.View(func(tx *bolt.Tx) error { - b := tx.Bucket(bucketName) - c := b.Cursor() - for _, key := range keys { - var k, v []byte - if key == nil { - k, v = c.First() - } else { - k, v = c.Seek(key) - } - - r := &engine.MSeekResult{} - if k == nil { - r.Err = engine.ErrNotFound - } else { - r.Key, r.Value, r.Err = bytes.CloneBytes(k), bytes.CloneBytes(v), nil - } - - res = append(res, r) - } - return nil - }) - - return res -} - -func (d *db) Seek(startKey []byte) ([]byte, []byte, error) { - var key, value []byte - err := d.DB.View(func(tx *bolt.Tx) error { - b := tx.Bucket(bucketName) - c := b.Cursor() - var k, v []byte - if startKey == nil { - k, v = c.First() - } else { - k, v = c.Seek(startKey) - } - if k != nil { - key, value = bytes.CloneBytes(k), bytes.CloneBytes(v) - } - return nil - }) - - if err != nil { - return nil, nil, errors.Trace(err) - } - if key == nil { - return nil, nil, errors.Trace(engine.ErrNotFound) - } - return key, value, nil -} - -func (d *db) NewBatch() engine.Batch { - return &batch{} -} - -func (d *db) Commit(b engine.Batch) error { - bt, ok := b.(*batch) - if !ok { - return errors.Errorf("invalid batch type %T", b) - } - err := d.DB.Update(func(tx *bolt.Tx) error { - b := tx.Bucket(bucketName) - // err1 is used for passing `go tool vet --shadow` check. - var err1 error - for _, w := range bt.writes { - if !w.isDelete { - err1 = b.Put(w.key, w.value) - } else { - err1 = b.Delete(w.key) - } - - if err1 != nil { - return errors.Trace(err1) - } - } - - return nil - }) - return errors.Trace(err) -} - -func (d *db) Close() error { - return d.DB.Close() -} - -type write struct { - key []byte - value []byte - isDelete bool -} - -type batch struct { - writes []write -} - -func (b *batch) Put(key []byte, value []byte) { - w := write{ - key: append([]byte(nil), key...), - value: append([]byte(nil), value...), - } - b.writes = append(b.writes, w) -} - -func (b *batch) Delete(key []byte) { - w := write{ - key: append([]byte(nil), key...), - value: nil, - isDelete: true, - } - b.writes = append(b.writes, w) -} - -func (b *batch) Len() int { - return len(b.writes) -} - -// Driver implements engine Driver. -type Driver struct { -} - -// Open opens or creates a local storage database with given path. -func (driver Driver) Open(dbPath string) (engine.DB, error) { - base := path.Dir(dbPath) - os.MkdirAll(base, 0755) - - d, err := bolt.Open(dbPath, 0600, nil) - if err != nil { - return nil, err - } - - tx, err := d.Begin(true) - if err != nil { - return nil, err - } - - if _, err = tx.CreateBucketIfNotExists(bucketName); err != nil { - tx.Rollback() - return nil, err - } - - if err = tx.Commit(); err != nil { - return nil, err - } - - return &db{d}, nil -} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/compactor.go b/vendor/github.com/pingcap/tidb/store/localstore/compactor.go deleted file mode 100644 index 29e21910e..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/compactor.go +++ /dev/null @@ -1,215 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package localstore - -import ( - "sync" - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/store/localstore/engine" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/bytes" -) - -const ( - deleteWorkerCnt = 3 -) - -// compactPolicy defines gc policy of MVCC storage. -type compactPolicy struct { - // SafePoint specifies - SafePoint int - // TriggerInterval specifies how often should the compactor - // scans outdated data. - TriggerInterval time.Duration - // BatchDeleteCnt specifies the batch size for - // deleting outdated data transaction. - BatchDeleteCnt int -} - -var localCompactDefaultPolicy = compactPolicy{ - SafePoint: 20 * 1000, // in ms - TriggerInterval: 10 * time.Second, - BatchDeleteCnt: 100, -} - -type localstoreCompactor struct { - mu sync.Mutex - recentKeys map[string]struct{} - stopCh chan struct{} - delCh chan kv.EncodedKey - workerWaitGroup *sync.WaitGroup - ticker *time.Ticker - db engine.DB - policy compactPolicy -} - -func (gc *localstoreCompactor) OnSet(k kv.Key) { - gc.mu.Lock() - defer gc.mu.Unlock() - gc.recentKeys[string(k)] = struct{}{} -} - -func (gc *localstoreCompactor) OnDelete(k kv.Key) { - gc.mu.Lock() - defer gc.mu.Unlock() - gc.recentKeys[string(k)] = struct{}{} -} - -func (gc *localstoreCompactor) getAllVersions(key kv.Key) ([]kv.EncodedKey, error) { - var keys []kv.EncodedKey - k := key - for ver := kv.MaxVersion; ver.Ver > 0; ver.Ver-- { - mvccK, _, err := gc.db.Seek(MvccEncodeVersionKey(key, ver)) - if terror.ErrorEqual(err, engine.ErrNotFound) { - break - } - if err != nil { - return nil, errors.Trace(err) - } - k, ver, err = MvccDecode(mvccK) - if k.Cmp(key) != 0 { - break - } - if err != nil { - return nil, errors.Trace(err) - } - keys = append(keys, bytes.CloneBytes(mvccK)) - } - return keys, nil -} - -func (gc *localstoreCompactor) deleteWorker() { - defer gc.workerWaitGroup.Done() - cnt := 0 - batch := gc.db.NewBatch() - for { - select { - case <-gc.stopCh: - return - case key := <-gc.delCh: - cnt++ - batch.Delete(key) - // Batch delete. - if cnt == gc.policy.BatchDeleteCnt { - log.Debugf("[kv] GC delete commit %d keys", batch.Len()) - err := gc.db.Commit(batch) - if err != nil { - log.Error(err) - } - batch = gc.db.NewBatch() - cnt = 0 - } - } - } -} - -func (gc *localstoreCompactor) checkExpiredKeysWorker() { - defer gc.workerWaitGroup.Done() - for { - select { - case <-gc.stopCh: - log.Debug("[kv] GC stopped") - return - case <-gc.ticker.C: - gc.mu.Lock() - m := gc.recentKeys - if len(m) == 0 { - gc.mu.Unlock() - continue - } - gc.recentKeys = make(map[string]struct{}) - gc.mu.Unlock() - for k := range m { - err := gc.Compact([]byte(k)) - if err != nil { - log.Error(err) - } - } - } - } -} - -func (gc *localstoreCompactor) filterExpiredKeys(keys []kv.EncodedKey) []kv.EncodedKey { - var ret []kv.EncodedKey - first := true - currentTS := time.Now().UnixNano() / int64(time.Millisecond) - // keys are always in descending order. - for _, k := range keys { - _, ver, err := MvccDecode(k) - if err != nil { - // Should not happen. - panic(err) - } - ts := localVersionToTimestamp(ver) - // Check timeout keys. - if currentTS-int64(ts) >= int64(gc.policy.SafePoint) { - // Skip first version. - if first { - first = false - continue - } - ret = append(ret, k) - } - } - return ret -} - -func (gc *localstoreCompactor) Compact(k kv.Key) error { - keys, err := gc.getAllVersions(k) - if err != nil { - return errors.Trace(err) - } - filteredKeys := gc.filterExpiredKeys(keys) - if len(filteredKeys) > 0 { - log.Debugf("[kv] GC send %d keys to delete worker", len(filteredKeys)) - } - for _, key := range filteredKeys { - gc.delCh <- key - } - return nil -} - -func (gc *localstoreCompactor) Start() { - // Start workers. - gc.workerWaitGroup.Add(deleteWorkerCnt) - for i := 0; i < deleteWorkerCnt; i++ { - go gc.deleteWorker() - } - - gc.workerWaitGroup.Add(1) - go gc.checkExpiredKeysWorker() -} - -func (gc *localstoreCompactor) Stop() { - gc.ticker.Stop() - close(gc.stopCh) - // Wait for all workers to finish. - gc.workerWaitGroup.Wait() -} - -func newLocalCompactor(policy compactPolicy, db engine.DB) *localstoreCompactor { - return &localstoreCompactor{ - recentKeys: make(map[string]struct{}), - stopCh: make(chan struct{}), - delCh: make(chan kv.EncodedKey, 100), - ticker: time.NewTicker(policy.TriggerInterval), - policy: policy, - db: db, - workerWaitGroup: &sync.WaitGroup{}, - } -} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/engine/engine.go b/vendor/github.com/pingcap/tidb/store/localstore/engine/engine.go deleted file mode 100644 index 5628f4a05..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/engine/engine.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package engine - -import "github.com/juju/errors" - -// ErrNotFound indicates no key is found when trying Get or Seek an entry from DB. -var ErrNotFound = errors.New("local engine: key not found") - -// Driver is the interface that must be implemented by a local storage db engine. -type Driver interface { - // Open opens or creates a local storage DB. - // The schema is a string for a local storage DB specific format. - Open(schema string) (DB, error) -} - -// MSeekResult is used to get multiple seek results. -type MSeekResult struct { - Key []byte - Value []byte - Err error -} - -// DB is the interface for local storage. -type DB interface { - // Get gets the associated value with key, returns (nil, ErrNotFound) if no value found. - Get(key []byte) ([]byte, error) - // Seek searches for the first key in the engine which is >= key in byte order, returns (nil, nil, ErrNotFound) - // if such key is not found. - Seek(key []byte) ([]byte, []byte, error) - // MultiSeek seeks multiple keys from the engine. - MultiSeek(keys [][]byte) []*MSeekResult - // NewBatch creates a Batch for writing. - NewBatch() Batch - // Commit writes the changed data in Batch. - Commit(b Batch) error - // Close closes database. - Close() error -} - -// Batch is the interface for local storage. -type Batch interface { - // Put appends 'put operation' of the key/value to the batch. - Put(key []byte, value []byte) - // Delete appends 'delete operation' of the key/value to the batch. - Delete(key []byte) - // Len return length of the batch - Len() int -} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/goleveldb/goleveldb.go b/vendor/github.com/pingcap/tidb/store/localstore/goleveldb/goleveldb.go deleted file mode 100644 index 26f3dfc81..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/goleveldb/goleveldb.go +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package goleveldb - -import ( - "sync" - - "github.com/juju/errors" - "github.com/pingcap/tidb/store/localstore/engine" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/util" -) - -var ( - _ engine.DB = (*db)(nil) - _ engine.Batch = (*leveldb.Batch)(nil) -) - -var ( - p = sync.Pool{ - New: func() interface{} { - return &leveldb.Batch{} - }, - } -) - -type db struct { - *leveldb.DB -} - -func (d *db) Get(key []byte) ([]byte, error) { - v, err := d.DB.Get(key, nil) - if err == leveldb.ErrNotFound { - return nil, errors.Trace(engine.ErrNotFound) - } - return v, err -} - -func (d *db) NewBatch() engine.Batch { - b := p.Get().(*leveldb.Batch) - return b -} - -func (d *db) Seek(startKey []byte) ([]byte, []byte, error) { - iter := d.DB.NewIterator(&util.Range{Start: startKey}, nil) - defer iter.Release() - if ok := iter.First(); !ok { - return nil, nil, errors.Trace(engine.ErrNotFound) - } - return iter.Key(), iter.Value(), nil -} - -func (d *db) MultiSeek(keys [][]byte) []*engine.MSeekResult { - iter := d.DB.NewIterator(&util.Range{Start: []byte{0x0}}, nil) - defer iter.Release() - - res := make([]*engine.MSeekResult, 0, len(keys)) - for _, k := range keys { - if ok := iter.Seek(k); !ok { - res = append(res, &engine.MSeekResult{Err: engine.ErrNotFound}) - } else { - res = append(res, &engine.MSeekResult{ - Key: append([]byte(nil), iter.Key()...), - Value: append([]byte(nil), iter.Value()...), - }) - } - } - return res -} - -func (d *db) Commit(b engine.Batch) error { - batch, ok := b.(*leveldb.Batch) - if !ok { - return errors.Errorf("invalid batch type %T", b) - } - err := d.DB.Write(batch, nil) - batch.Reset() - p.Put(batch) - return err -} - -func (d *db) Close() error { - return d.DB.Close() -} - -// Driver implements engine Driver. -type Driver struct { -} - -// Open opens or creates a local storage database for the given path. -func (driver Driver) Open(path string) (engine.DB, error) { - d, err := leveldb.OpenFile(path, &opt.Options{BlockCacheCapacity: 600 * 1024 * 1024}) - - return &db{d}, err -} - -// MemoryDriver implements engine Driver -type MemoryDriver struct { -} - -// Open opens a memory storage database. -func (driver MemoryDriver) Open(path string) (engine.DB, error) { - d, err := leveldb.Open(storage.NewMemStorage(), nil) - return &db{d}, err -} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/kv.go b/vendor/github.com/pingcap/tidb/store/localstore/kv.go deleted file mode 100644 index 88979bc5a..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/kv.go +++ /dev/null @@ -1,466 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package localstore - -import ( - "net/url" - "path/filepath" - "runtime/debug" - "sync" - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/store/localstore/engine" - "github.com/pingcap/tidb/util/segmentmap" - "github.com/twinj/uuid" -) - -var ( - _ kv.Storage = (*dbStore)(nil) -) - -type op int - -const ( - opSeek = iota + 1 - opCommit -) - -const ( - maxSeekWorkers = 3 - - lowerWaterMark = 10 // second -) - -type command struct { - op op - txn *dbTxn - args interface{} - reply interface{} - done chan error -} - -type seekReply struct { - key []byte - value []byte -} - -type commitReply struct { - err error -} - -type seekArgs struct { - key []byte -} - -type commitArgs struct { -} - -// Seek searches for the first key in the engine which is >= key in byte order, returns (nil, nil, ErrNotFound) -// if such key is not found. -func (s *dbStore) Seek(key []byte) ([]byte, []byte, error) { - c := &command{ - op: opSeek, - args: &seekArgs{key: key}, - done: make(chan error, 1), - } - - s.commandCh <- c - err := <-c.done - if err != nil { - return nil, nil, errors.Trace(err) - } - - reply := c.reply.(*seekReply) - return reply.key, reply.value, nil -} - -// Commit writes the changed data in Batch. -func (s *dbStore) CommitTxn(txn *dbTxn) error { - if len(txn.lockedKeys) == 0 { - return nil - } - c := &command{ - op: opCommit, - txn: txn, - args: &commitArgs{}, - done: make(chan error, 1), - } - - s.commandCh <- c - err := <-c.done - return errors.Trace(err) -} - -func (s *dbStore) seekWorker(wg *sync.WaitGroup, seekCh chan *command) { - defer wg.Done() - for { - var pending []*command - select { - case cmd, ok := <-seekCh: - if !ok { - return - } - pending = append(pending, cmd) - L: - for { - select { - case cmd, ok := <-seekCh: - if !ok { - break L - } - pending = append(pending, cmd) - default: - break L - } - } - } - - s.doSeek(pending) - } -} - -func (s *dbStore) scheduler() { - closed := false - seekCh := make(chan *command, 1000) - wgSeekWorkers := &sync.WaitGroup{} - wgSeekWorkers.Add(maxSeekWorkers) - for i := 0; i < maxSeekWorkers; i++ { - go s.seekWorker(wgSeekWorkers, seekCh) - } - - segmentIndex := int64(0) - - tick := time.NewTicker(time.Second) - defer tick.Stop() - - for { - select { - case cmd := <-s.commandCh: - if closed { - cmd.done <- ErrDBClosed - continue - } - switch cmd.op { - case opSeek: - seekCh <- cmd - case opCommit: - s.doCommit(cmd) - } - case <-s.closeCh: - closed = true - // notify seek worker to exit - close(seekCh) - wgSeekWorkers.Wait() - s.wg.Done() - case <-tick.C: - segmentIndex = segmentIndex % s.recentUpdates.SegmentCount() - s.cleanRecentUpdates(segmentIndex) - segmentIndex++ - } - } -} - -func (s *dbStore) cleanRecentUpdates(segmentIndex int64) { - m, err := s.recentUpdates.GetSegment(segmentIndex) - if err != nil { - log.Error(err) - return - } - - now := time.Now().Unix() - for k, v := range m { - dis := now - version2Second(v.(kv.Version)) - if dis > lowerWaterMark { - delete(m, k) - } - } -} - -func (s *dbStore) tryLock(txn *dbTxn) (err error) { - // check conflict - for k := range txn.lockedKeys { - if _, ok := s.keysLocked[k]; ok { - return errors.Trace(kv.ErrLockConflict) - } - - lastVer, ok := s.recentUpdates.Get([]byte(k)) - if !ok { - continue - } - // If there's newer version of this key, returns error. - if lastVer.(kv.Version).Cmp(kv.Version{Ver: txn.tid}) > 0 { - return errors.Trace(kv.ErrConditionNotMatch) - } - } - - // record - for k := range txn.lockedKeys { - s.keysLocked[k] = txn.tid - } - - return nil -} - -func (s *dbStore) doCommit(cmd *command) { - txn := cmd.txn - curVer, err := globalVersionProvider.CurrentVersion() - if err != nil { - log.Fatal(err) - } - err = s.tryLock(txn) - if err != nil { - cmd.done <- errors.Trace(err) - return - } - // Update commit version. - txn.version = curVer - b := s.db.NewBatch() - txn.us.WalkBuffer(func(k kv.Key, value []byte) error { - mvccKey := MvccEncodeVersionKey(kv.Key(k), curVer) - if len(value) == 0 { // Deleted marker - b.Put(mvccKey, nil) - s.compactor.OnDelete(k) - } else { - b.Put(mvccKey, value) - s.compactor.OnSet(k) - } - return nil - }) - err = s.writeBatch(b) - s.unLockKeys(txn) - cmd.done <- errors.Trace(err) -} - -func (s *dbStore) doSeek(seekCmds []*command) { - keys := make([][]byte, 0, len(seekCmds)) - for _, cmd := range seekCmds { - keys = append(keys, cmd.args.(*seekArgs).key) - } - - results := s.db.MultiSeek(keys) - - for i, cmd := range seekCmds { - reply := &seekReply{} - var err error - reply.key, reply.value, err = results[i].Key, results[i].Value, results[i].Err - cmd.reply = reply - cmd.done <- errors.Trace(err) - } -} - -func (s *dbStore) NewBatch() engine.Batch { - return s.db.NewBatch() -} - -type dbStore struct { - db engine.DB - - txns map[uint64]*dbTxn - keysLocked map[string]uint64 - // TODO: clean up recentUpdates - recentUpdates *segmentmap.SegmentMap - uuid string - path string - compactor *localstoreCompactor - wg *sync.WaitGroup - - commandCh chan *command - closeCh chan struct{} - - mu sync.Mutex - closed bool -} - -type storeCache struct { - mu sync.Mutex - cache map[string]*dbStore -} - -var ( - globalVersionProvider kv.VersionProvider - mc storeCache - - // ErrDBClosed is the error meaning db is closed and we can use it anymore. - ErrDBClosed = errors.New("db is closed") -) - -func init() { - mc.cache = make(map[string]*dbStore) - globalVersionProvider = &LocalVersionProvider{} -} - -// Driver implements kv.Driver interface. -type Driver struct { - // engine.Driver is the engine driver for different local db engine. - engine.Driver -} - -// IsLocalStore checks whether a storage is local or not. -func IsLocalStore(s kv.Storage) bool { - _, ok := s.(*dbStore) - return ok -} - -// Open opens or creates a storage with specific format for a local engine Driver. -// The path should be a URL format which is described in tidb package. -func (d Driver) Open(path string) (kv.Storage, error) { - mc.mu.Lock() - defer mc.mu.Unlock() - - u, err := url.Parse(path) - if err != nil { - return nil, errors.Trace(err) - } - - engineSchema := filepath.Join(u.Host, u.Path) - if store, ok := mc.cache[engineSchema]; ok { - // TODO: check the cache store has the same engine with this Driver. - log.Info("[kv] cache store", engineSchema) - return store, nil - } - - db, err := d.Driver.Open(engineSchema) - if err != nil { - return nil, errors.Trace(err) - } - - log.Info("[kv] New store", engineSchema) - s := &dbStore{ - txns: make(map[uint64]*dbTxn), - keysLocked: make(map[string]uint64), - uuid: uuid.NewV4().String(), - path: engineSchema, - db: db, - compactor: newLocalCompactor(localCompactDefaultPolicy, db), - commandCh: make(chan *command, 1000), - closed: false, - closeCh: make(chan struct{}), - wg: &sync.WaitGroup{}, - } - s.recentUpdates, err = segmentmap.NewSegmentMap(100) - if err != nil { - return nil, errors.Trace(err) - - } - mc.cache[engineSchema] = s - s.compactor.Start() - s.wg.Add(1) - go s.scheduler() - return s, nil -} - -func (s *dbStore) UUID() string { - return s.uuid -} - -func (s *dbStore) GetSnapshot(ver kv.Version) (kv.Snapshot, error) { - s.mu.Lock() - if s.closed { - s.mu.Unlock() - return nil, ErrDBClosed - } - s.mu.Unlock() - - currentVer, err := globalVersionProvider.CurrentVersion() - if err != nil { - return nil, errors.Trace(err) - } - - if ver.Cmp(currentVer) > 0 { - ver = currentVer - } - - return &dbSnapshot{ - store: s, - version: ver, - }, nil -} - -func (s *dbStore) CurrentVersion() (kv.Version, error) { - return globalVersionProvider.CurrentVersion() -} - -// Begin transaction -func (s *dbStore) Begin() (kv.Transaction, error) { - s.mu.Lock() - if s.closed { - s.mu.Unlock() - return nil, ErrDBClosed - } - s.mu.Unlock() - - beginVer, err := globalVersionProvider.CurrentVersion() - if err != nil { - return nil, errors.Trace(err) - } - - return newTxn(s, beginVer), nil -} - -func (s *dbStore) Close() error { - s.mu.Lock() - if s.closed { - s.mu.Unlock() - return ErrDBClosed - } - - s.closed = true - s.mu.Unlock() - - mc.mu.Lock() - defer mc.mu.Unlock() - s.compactor.Stop() - s.closeCh <- struct{}{} - s.wg.Wait() - delete(mc.cache, s.path) - return s.db.Close() -} - -func (s *dbStore) writeBatch(b engine.Batch) error { - if b.Len() == 0 { - return nil - } - - if s.closed { - return errors.Trace(ErrDBClosed) - } - - err := s.db.Commit(b) - if err != nil { - log.Error(err) - return errors.Trace(err) - } - - return nil -} - -func (s *dbStore) newBatch() engine.Batch { - return s.db.NewBatch() -} -func (s *dbStore) unLockKeys(txn *dbTxn) error { - for k := range txn.lockedKeys { - if tid, ok := s.keysLocked[k]; !ok || tid != txn.tid { - debug.PrintStack() - log.Fatalf("should never happend:%v, %v", tid, txn.tid) - } - - delete(s.keysLocked, k) - s.recentUpdates.Set([]byte(k), txn.version, true) - } - - return nil -} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/local_version_provider.go b/vendor/github.com/pingcap/tidb/store/localstore/local_version_provider.go deleted file mode 100644 index 6a2cdb8cd..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/local_version_provider.go +++ /dev/null @@ -1,67 +0,0 @@ -package localstore - -import ( - "errors" - "sync" - "time" - - "github.com/ngaut/log" - "github.com/pingcap/tidb/kv" -) - -// ErrOverflow is the error returned by CurrentVersion, it describes if -// there're too many versions allocations in a very short period of time, ID -// may conflict. -var ErrOverflow = errors.New("overflow when allocating new version") - -// LocalVersionProvider uses local timestamp for version. -type LocalVersionProvider struct { - mu sync.Mutex - lastTimestamp uint64 - // logical guaranteed version's monotonic increasing for calls when lastTimestamp - // are equal. - logical uint64 -} - -const ( - timePrecisionOffset = 18 -) - -func time2TsPhysical(t time.Time) uint64 { - return uint64((t.UnixNano() / int64(time.Millisecond)) << timePrecisionOffset) -} - -func version2Second(v kv.Version) int64 { - return int64(v.Ver>>timePrecisionOffset) / 1000 -} - -// CurrentVersion implements the VersionProvider's GetCurrentVer interface. -func (l *LocalVersionProvider) CurrentVersion() (kv.Version, error) { - l.mu.Lock() - defer l.mu.Unlock() - - for { - var ts uint64 - ts = time2TsPhysical(time.Now()) - - if l.lastTimestamp > ts { - log.Error("[kv] invalid physical time stamp") - continue - } - - if l.lastTimestamp == uint64(ts) { - l.logical++ - if l.logical >= 1<> timePrecisionOffset -} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/mvcc.go b/vendor/github.com/pingcap/tidb/store/localstore/mvcc.go deleted file mode 100644 index f61296eee..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/mvcc.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package localstore - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/util/codec" -) - -// ErrInvalidEncodedKey describes parsing an invalid format of EncodedKey. -var ErrInvalidEncodedKey = errors.New("invalid encoded key") - -func isTombstone(v []byte) bool { - return len(v) == 0 -} - -// MvccEncodeVersionKey returns the encoded key. -func MvccEncodeVersionKey(key kv.Key, ver kv.Version) kv.EncodedKey { - b := codec.EncodeBytes(nil, key) - ret := codec.EncodeUintDesc(b, ver.Ver) - return ret -} - -// MvccDecode parses the origin key and version of an encoded key, if the encoded key is a meta key, -// just returns the origin key. -func MvccDecode(encodedKey kv.EncodedKey) (kv.Key, kv.Version, error) { - // Skip DataPrefix - remainBytes, key, err := codec.DecodeBytes([]byte(encodedKey)) - if err != nil { - // should never happen - return nil, kv.Version{}, errors.Trace(err) - } - // if it's meta key - if len(remainBytes) == 0 { - return key, kv.Version{}, nil - } - var ver uint64 - remainBytes, ver, err = codec.DecodeUintDesc(remainBytes) - if err != nil { - // should never happen - return nil, kv.Version{}, errors.Trace(err) - } - if len(remainBytes) != 0 { - return nil, kv.Version{}, ErrInvalidEncodedKey - } - return key, kv.Version{Ver: ver}, nil -} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/snapshot.go b/vendor/github.com/pingcap/tidb/store/localstore/snapshot.go deleted file mode 100644 index ac436a6cf..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/snapshot.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package localstore - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/store/localstore/engine" - "github.com/pingcap/tidb/terror" -) - -var ( - _ kv.Snapshot = (*dbSnapshot)(nil) - _ kv.Iterator = (*dbIter)(nil) -) - -// dbSnapshot implements MvccSnapshot interface. -type dbSnapshot struct { - store *dbStore - version kv.Version // transaction begin version -} - -func newSnapshot(store *dbStore, ver kv.Version) *dbSnapshot { - ss := &dbSnapshot{ - store: store, - version: ver, - } - - return ss -} - -// mvccSeek seeks for the first key in db which has a k >= key and a version <= -// snapshot's version, returns kv.ErrNotExist if such key is not found. If exact -// is true, only k == key can be returned. -func (s *dbSnapshot) mvccSeek(key kv.Key, exact bool) (kv.Key, []byte, error) { - // Key layout: - // ... - // Key_verMax -- (1) - // ... - // Key_ver+1 -- (2) - // Key_ver -- (3) - // Key_ver-1 -- (4) - // ... - // Key_0 -- (5) - // NextKey_verMax -- (6) - // ... - // NextKey_ver+1 -- (7) - // NextKey_ver -- (8) - // NextKey_ver-1 -- (9) - // ... - // NextKey_0 -- (10) - // ... - // EOF - for { - mvccKey := MvccEncodeVersionKey(key, s.version) - mvccK, v, err := s.store.Seek([]byte(mvccKey)) // search for [3...EOF) - if err != nil { - if terror.ErrorEqual(err, engine.ErrNotFound) { // EOF - return nil, nil, errors.Trace(kv.ErrNotExist) - } - return nil, nil, errors.Trace(err) - } - k, ver, err := MvccDecode(mvccK) - if err != nil { - return nil, nil, errors.Trace(err) - } - // quick test for exact mode - if exact { - if key.Cmp(k) != 0 || isTombstone(v) { - return nil, nil, errors.Trace(kv.ErrNotExist) - } - return k, v, nil - } - if ver.Ver > s.version.Ver { - // currently on [6...7] - key = k // search for [8...EOF) next loop - continue - } - // currently on [3...5] or [8...10] - if isTombstone(v) { - key = k.Next() // search for (5...EOF) or (10..EOF) next loop - continue - } - // target found - return k, v, nil - } -} - -func (s *dbSnapshot) Get(key kv.Key) ([]byte, error) { - _, v, err := s.mvccSeek(key, true) - if err != nil { - return nil, errors.Trace(err) - } - return v, nil -} - -func (s *dbSnapshot) BatchGet(keys []kv.Key) (map[string][]byte, error) { - m := make(map[string][]byte) - for _, k := range keys { - v, err := s.Get(k) - if err != nil && !kv.IsErrNotFound(err) { - return nil, errors.Trace(err) - } - if len(v) > 0 { - m[string(k)] = v - } - } - return m, nil -} - -func (s *dbSnapshot) Seek(k kv.Key) (kv.Iterator, error) { - it, err := newDBIter(s, k) - return it, errors.Trace(err) -} - -func (s *dbSnapshot) Release() { -} - -type dbIter struct { - s *dbSnapshot - valid bool - k kv.Key - v []byte -} - -func newDBIter(s *dbSnapshot, startKey kv.Key) (*dbIter, error) { - k, v, err := s.mvccSeek(startKey, false) - if err != nil { - if terror.ErrorEqual(err, kv.ErrNotExist) { - err = nil - } - return &dbIter{valid: false}, errors.Trace(err) - } - - return &dbIter{ - s: s, - valid: true, - k: k, - v: v, - }, nil -} - -func (it *dbIter) Next() error { - k, v, err := it.s.mvccSeek(it.k.Next(), false) - if err != nil { - it.valid = false - if !terror.ErrorEqual(err, kv.ErrNotExist) { - return errors.Trace(err) - } - } - it.k, it.v = k, v - return nil -} - -func (it *dbIter) Valid() bool { - return it.valid -} - -func (it *dbIter) Key() kv.Key { - return it.k -} - -func (it *dbIter) Value() []byte { - return it.v -} - -func (it *dbIter) Close() {} diff --git a/vendor/github.com/pingcap/tidb/store/localstore/txn.go b/vendor/github.com/pingcap/tidb/store/localstore/txn.go deleted file mode 100644 index 2b7d696dd..000000000 --- a/vendor/github.com/pingcap/tidb/store/localstore/txn.go +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package localstore - -import ( - "fmt" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/kv" -) - -var ( - _ kv.Transaction = (*dbTxn)(nil) -) - -// dbTxn is not thread safe -type dbTxn struct { - us kv.UnionStore - store *dbStore // for commit - tid uint64 - valid bool - version kv.Version // commit version - lockedKeys map[string]struct{} // origin version in snapshot - dirty bool -} - -func newTxn(s *dbStore, ver kv.Version) *dbTxn { - txn := &dbTxn{ - us: kv.NewUnionStore(newSnapshot(s, ver)), - store: s, - tid: ver.Ver, - valid: true, - version: kv.MinVersion, - lockedKeys: make(map[string]struct{}), - } - log.Debugf("[kv] Begin txn:%d", txn.tid) - return txn -} - -// Implement transaction interface - -func (txn *dbTxn) Get(k kv.Key) ([]byte, error) { - log.Debugf("[kv] get key:%q, txn:%d", k, txn.tid) - return txn.us.Get(k) -} - -func (txn *dbTxn) Set(k kv.Key, data []byte) error { - log.Debugf("[kv] set key:%q, txn:%d", k, txn.tid) - txn.dirty = true - return txn.us.Set(k, data) -} - -func (txn *dbTxn) String() string { - return fmt.Sprintf("%d", txn.tid) -} - -func (txn *dbTxn) Seek(k kv.Key) (kv.Iterator, error) { - log.Debugf("[kv] seek key:%q, txn:%d", k, txn.tid) - return txn.us.Seek(k) -} - -func (txn *dbTxn) Delete(k kv.Key) error { - log.Debugf("[kv] delete key:%q, txn:%d", k, txn.tid) - txn.dirty = true - return txn.us.Delete(k) -} - -func (txn *dbTxn) SetOption(opt kv.Option, val interface{}) { - txn.us.SetOption(opt, val) -} - -func (txn *dbTxn) DelOption(opt kv.Option) { - txn.us.DelOption(opt) -} - -func (txn *dbTxn) doCommit() error { - // check lazy condition pairs - if err := txn.us.CheckLazyConditionPairs(); err != nil { - return errors.Trace(err) - } - - err := txn.us.WalkBuffer(func(k kv.Key, v []byte) error { - e := txn.LockKeys(k) - return errors.Trace(e) - }) - if err != nil { - return errors.Trace(err) - } - - return txn.store.CommitTxn(txn) -} - -func (txn *dbTxn) Commit() error { - if !txn.valid { - return errors.Trace(kv.ErrInvalidTxn) - } - log.Debugf("[kv] commit txn %d", txn.tid) - defer func() { - txn.close() - }() - - return errors.Trace(txn.doCommit()) -} - -func (txn *dbTxn) close() error { - txn.us.Release() - txn.lockedKeys = nil - txn.valid = false - return nil -} - -func (txn *dbTxn) Rollback() error { - if !txn.valid { - return errors.Trace(kv.ErrInvalidTxn) - } - log.Warnf("[kv] Rollback txn %d", txn.tid) - return txn.close() -} - -func (txn *dbTxn) LockKeys(keys ...kv.Key) error { - for _, key := range keys { - txn.lockedKeys[string(key)] = struct{}{} - } - return nil -} - -func (txn *dbTxn) IsReadOnly() bool { - return !txn.dirty -} - -func (txn *dbTxn) StartTS() int64 { - return int64(txn.tid) -} - -func (txn *dbTxn) GetClient() kv.Client { - return nil -} - -type dbClient struct { -} - -func (c *dbClient) SupportRequestType(reqType, subType int64) bool { - return false -} - -func (c *dbClient) Send(req *kv.Request) kv.Response { - return nil -} diff --git a/vendor/github.com/pingcap/tidb/structure/hash.go b/vendor/github.com/pingcap/tidb/structure/hash.go deleted file mode 100644 index 9c0f80aed..000000000 --- a/vendor/github.com/pingcap/tidb/structure/hash.go +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "bytes" - "encoding/binary" - "strconv" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/terror" -) - -// HashPair is the pair for (field, value) in a hash. -type HashPair struct { - Field []byte - Value []byte -} - -type hashMeta struct { - FieldCount int64 -} - -func (meta hashMeta) Value() []byte { - buf := make([]byte, 8) - binary.BigEndian.PutUint64(buf[0:8], uint64(meta.FieldCount)) - return buf -} - -func (meta hashMeta) IsEmpty() bool { - return meta.FieldCount <= 0 -} - -// HSet sets the string value of a hash field. -func (t *TxStructure) HSet(key []byte, field []byte, value []byte) error { - return t.updateHash(key, field, func([]byte) ([]byte, error) { - return value, nil - }) -} - -// HGet gets the value of a hash field. -func (t *TxStructure) HGet(key []byte, field []byte) ([]byte, error) { - dataKey := t.encodeHashDataKey(key, field) - value, err := t.txn.Get(dataKey) - if terror.ErrorEqual(err, kv.ErrNotExist) { - err = nil - } - return value, errors.Trace(err) -} - -// HInc increments the integer value of a hash field, by step, returns -// the value after the increment. -func (t *TxStructure) HInc(key []byte, field []byte, step int64) (int64, error) { - base := int64(0) - err := t.updateHash(key, field, func(oldValue []byte) ([]byte, error) { - if oldValue != nil { - var err error - base, err = strconv.ParseInt(string(oldValue), 10, 64) - if err != nil { - return nil, errors.Trace(err) - } - } - base += step - return []byte(strconv.FormatInt(base, 10)), nil - }) - - return base, errors.Trace(err) -} - -// HGetInt64 gets int64 value of a hash field. -func (t *TxStructure) HGetInt64(key []byte, field []byte) (int64, error) { - value, err := t.HGet(key, field) - if err != nil || value == nil { - return 0, errors.Trace(err) - } - - var n int64 - n, err = strconv.ParseInt(string(value), 10, 64) - return n, errors.Trace(err) -} - -func (t *TxStructure) updateHash(key []byte, field []byte, fn func(oldValue []byte) ([]byte, error)) error { - dataKey := t.encodeHashDataKey(key, field) - oldValue, err := t.loadHashValue(dataKey) - if err != nil { - return errors.Trace(err) - } - - newValue, err := fn(oldValue) - if err != nil { - return errors.Trace(err) - } - - // Check if new value is equal to old value. - if bytes.Equal(oldValue, newValue) { - return nil - } - - if err = t.txn.Set(dataKey, newValue); err != nil { - return errors.Trace(err) - } - - metaKey := t.encodeHashMetaKey(key) - meta, err := t.loadHashMeta(metaKey) - if err != nil { - return errors.Trace(err) - } - - if oldValue == nil { - meta.FieldCount++ - if err = t.txn.Set(metaKey, meta.Value()); err != nil { - return errors.Trace(err) - } - } - - return nil -} - -// HLen gets the number of fields in a hash. -func (t *TxStructure) HLen(key []byte) (int64, error) { - metaKey := t.encodeHashMetaKey(key) - meta, err := t.loadHashMeta(metaKey) - if err != nil { - return 0, errors.Trace(err) - } - return meta.FieldCount, nil -} - -// HDel deletes one or more hash fields. -func (t *TxStructure) HDel(key []byte, fields ...[]byte) error { - metaKey := t.encodeHashMetaKey(key) - meta, err := t.loadHashMeta(metaKey) - if err != nil || meta.IsEmpty() { - return errors.Trace(err) - } - - var value []byte - for _, field := range fields { - dataKey := t.encodeHashDataKey(key, field) - - value, err = t.loadHashValue(dataKey) - if err != nil { - return errors.Trace(err) - } - - if value != nil { - if err = t.txn.Delete(dataKey); err != nil { - return errors.Trace(err) - } - - meta.FieldCount-- - } - } - - if meta.IsEmpty() { - err = t.txn.Delete(metaKey) - } else { - err = t.txn.Set(metaKey, meta.Value()) - } - - return errors.Trace(err) -} - -// HKeys gets all the fields in a hash. -func (t *TxStructure) HKeys(key []byte) ([][]byte, error) { - var keys [][]byte - err := t.iterateHash(key, func(field []byte, value []byte) error { - keys = append(keys, append([]byte{}, field...)) - return nil - }) - - return keys, errors.Trace(err) -} - -// HGetAll gets all the fields and values in a hash. -func (t *TxStructure) HGetAll(key []byte) ([]HashPair, error) { - var res []HashPair - err := t.iterateHash(key, func(field []byte, value []byte) error { - pair := HashPair{ - Field: append([]byte{}, field...), - Value: append([]byte{}, value...), - } - res = append(res, pair) - return nil - }) - - return res, errors.Trace(err) -} - -// HClear removes the hash value of the key. -func (t *TxStructure) HClear(key []byte) error { - metaKey := t.encodeHashMetaKey(key) - meta, err := t.loadHashMeta(metaKey) - if err != nil || meta.IsEmpty() { - return errors.Trace(err) - } - - err = t.iterateHash(key, func(field []byte, value []byte) error { - k := t.encodeHashDataKey(key, field) - return errors.Trace(t.txn.Delete(k)) - }) - - if err != nil { - return errors.Trace(err) - } - - return errors.Trace(t.txn.Delete(metaKey)) -} - -func (t *TxStructure) iterateHash(key []byte, fn func(k []byte, v []byte) error) error { - dataPrefix := t.hashDataKeyPrefix(key) - it, err := t.txn.Seek(dataPrefix) - if err != nil { - return errors.Trace(err) - } - - var field []byte - - for it.Valid() { - if !it.Key().HasPrefix(dataPrefix) { - break - } - - _, field, err = t.decodeHashDataKey(it.Key()) - if err != nil { - return errors.Trace(err) - } - - if err = fn(field, it.Value()); err != nil { - return errors.Trace(err) - } - - err = it.Next() - if err != nil { - return errors.Trace(err) - } - } - - return nil -} - -func (t *TxStructure) loadHashMeta(metaKey []byte) (hashMeta, error) { - v, err := t.txn.Get(metaKey) - if terror.ErrorEqual(err, kv.ErrNotExist) { - err = nil - } else if err != nil { - return hashMeta{}, errors.Trace(err) - } - - meta := hashMeta{FieldCount: 0} - if v == nil { - return meta, nil - } - - if len(v) != 8 { - return meta, errors.New("invalid list meta data") - } - - meta.FieldCount = int64(binary.BigEndian.Uint64(v[0:8])) - return meta, nil -} - -func (t *TxStructure) loadHashValue(dataKey []byte) ([]byte, error) { - v, err := t.txn.Get(dataKey) - if terror.ErrorEqual(err, kv.ErrNotExist) { - err = nil - v = nil - } else if err != nil { - return nil, errors.Trace(err) - } - - return v, nil -} diff --git a/vendor/github.com/pingcap/tidb/structure/list.go b/vendor/github.com/pingcap/tidb/structure/list.go deleted file mode 100644 index b6e01cefe..000000000 --- a/vendor/github.com/pingcap/tidb/structure/list.go +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "encoding/binary" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/terror" -) - -type listMeta struct { - LIndex int64 - RIndex int64 -} - -func (meta listMeta) Value() []byte { - buf := make([]byte, 16) - binary.BigEndian.PutUint64(buf[0:8], uint64(meta.LIndex)) - binary.BigEndian.PutUint64(buf[8:16], uint64(meta.RIndex)) - return buf -} - -func (meta listMeta) IsEmpty() bool { - return meta.LIndex >= meta.RIndex -} - -// LPush prepends one or multiple values to a list. -func (t *TxStructure) LPush(key []byte, values ...[]byte) error { - return t.listPush(key, true, values...) -} - -// RPush appends one or multiple values to a list. -func (t *TxStructure) RPush(key []byte, values ...[]byte) error { - return t.listPush(key, false, values...) -} - -func (t *TxStructure) listPush(key []byte, left bool, values ...[]byte) error { - if len(values) == 0 { - return nil - } - - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil { - return errors.Trace(err) - } - - index := int64(0) - for _, v := range values { - if left { - meta.LIndex-- - index = meta.LIndex - } else { - index = meta.RIndex - meta.RIndex++ - } - - dataKey := t.encodeListDataKey(key, index) - if err = t.txn.Set(dataKey, v); err != nil { - return errors.Trace(err) - } - } - - return t.txn.Set(metaKey, meta.Value()) -} - -// LPop removes and gets the first element in a list. -func (t *TxStructure) LPop(key []byte) ([]byte, error) { - return t.listPop(key, true) -} - -// RPop removes and gets the last element in a list. -func (t *TxStructure) RPop(key []byte) ([]byte, error) { - return t.listPop(key, false) -} - -func (t *TxStructure) listPop(key []byte, left bool) ([]byte, error) { - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return nil, errors.Trace(err) - } - - index := int64(0) - if left { - index = meta.LIndex - meta.LIndex++ - } else { - meta.RIndex-- - index = meta.RIndex - } - - dataKey := t.encodeListDataKey(key, index) - - var data []byte - data, err = t.txn.Get(dataKey) - if err != nil { - return nil, errors.Trace(err) - } - - if err = t.txn.Delete(dataKey); err != nil { - return nil, errors.Trace(err) - } - - if !meta.IsEmpty() { - err = t.txn.Set(metaKey, meta.Value()) - } else { - err = t.txn.Delete(metaKey) - } - - return data, errors.Trace(err) -} - -// LLen gets the length of a list. -func (t *TxStructure) LLen(key []byte) (int64, error) { - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - return meta.RIndex - meta.LIndex, errors.Trace(err) -} - -// LIndex gets an element from a list by its index. -func (t *TxStructure) LIndex(key []byte, index int64) ([]byte, error) { - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return nil, errors.Trace(err) - } - - index = adjustIndex(index, meta.LIndex, meta.RIndex) - - if index >= meta.LIndex && index < meta.RIndex { - return t.txn.Get(t.encodeListDataKey(key, index)) - } - return nil, nil -} - -// LSet updates an element in the list by its index. -func (t *TxStructure) LSet(key []byte, index int64, value []byte) error { - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return errors.Trace(err) - } - - index = adjustIndex(index, meta.LIndex, meta.RIndex) - - if index >= meta.LIndex && index < meta.RIndex { - return t.txn.Set(t.encodeListDataKey(key, index), value) - } - return errors.Errorf("invalid index %d", index) -} - -// LClear removes the list of the key. -func (t *TxStructure) LClear(key []byte) error { - metaKey := t.encodeListMetaKey(key) - meta, err := t.loadListMeta(metaKey) - if err != nil || meta.IsEmpty() { - return errors.Trace(err) - } - - for index := meta.LIndex; index < meta.RIndex; index++ { - dataKey := t.encodeListDataKey(key, index) - if err = t.txn.Delete(dataKey); err != nil { - return errors.Trace(err) - } - } - - return t.txn.Delete(metaKey) -} - -func (t *TxStructure) loadListMeta(metaKey []byte) (listMeta, error) { - v, err := t.txn.Get(metaKey) - if terror.ErrorEqual(err, kv.ErrNotExist) { - err = nil - } else if err != nil { - return listMeta{}, errors.Trace(err) - } - - meta := listMeta{0, 0} - if v == nil { - return meta, nil - } - - if len(v) != 16 { - return meta, errors.Errorf("invalid list meta data") - } - - meta.LIndex = int64(binary.BigEndian.Uint64(v[0:8])) - meta.RIndex = int64(binary.BigEndian.Uint64(v[8:16])) - return meta, nil -} - -func adjustIndex(index int64, min, max int64) int64 { - if index >= 0 { - return index + min - } - - return index + max -} diff --git a/vendor/github.com/pingcap/tidb/structure/string.go b/vendor/github.com/pingcap/tidb/structure/string.go deleted file mode 100644 index ecd730a2b..000000000 --- a/vendor/github.com/pingcap/tidb/structure/string.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "strconv" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/terror" -) - -// Set sets the string value of the key. -func (t *TxStructure) Set(key []byte, value []byte) error { - ek := t.encodeStringDataKey(key) - - return t.txn.Set(ek, value) -} - -// Get gets the string value of a key. -func (t *TxStructure) Get(key []byte) ([]byte, error) { - ek := t.encodeStringDataKey(key) - value, err := t.txn.Get(ek) - if terror.ErrorEqual(err, kv.ErrNotExist) { - err = nil - } - return value, errors.Trace(err) -} - -// GetInt64 gets the int64 value of a key. -func (t *TxStructure) GetInt64(key []byte) (int64, error) { - v, err := t.Get(key) - if err != nil || v == nil { - return 0, errors.Trace(err) - } - - n, err := strconv.ParseInt(string(v), 10, 64) - return n, errors.Trace(err) -} - -// Inc increments the integer value of a key by step, returns -// the value after the increment. -func (t *TxStructure) Inc(key []byte, step int64) (int64, error) { - ek := t.encodeStringDataKey(key) - // txn Inc will lock this key, so we don't lock it here. - n, err := kv.IncInt64(t.txn, ek, step) - if terror.ErrorEqual(err, kv.ErrNotExist) { - err = nil - } - return n, errors.Trace(err) -} - -// Clear removes the string value of the key. -func (t *TxStructure) Clear(key []byte) error { - ek := t.encodeStringDataKey(key) - err := t.txn.Delete(ek) - if terror.ErrorEqual(err, kv.ErrNotExist) { - err = nil - } - return errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/structure/structure.go b/vendor/github.com/pingcap/tidb/structure/structure.go deleted file mode 100644 index 61fe269f8..000000000 --- a/vendor/github.com/pingcap/tidb/structure/structure.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import "github.com/pingcap/tidb/kv" - -// NewStructure creates a TxStructure in transaction txn and with key prefix. -func NewStructure(txn kv.Transaction, prefix []byte) *TxStructure { - return &TxStructure{ - txn: txn, - prefix: prefix, - } -} - -// TxStructure supports some simple data structures like string, hash, list, etc... and -// you can use these in a transaction. -type TxStructure struct { - txn kv.Transaction - prefix []byte -} diff --git a/vendor/github.com/pingcap/tidb/structure/type.go b/vendor/github.com/pingcap/tidb/structure/type.go deleted file mode 100644 index 5e8c87cd1..000000000 --- a/vendor/github.com/pingcap/tidb/structure/type.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package structure - -import ( - "bytes" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/util/codec" -) - -// TypeFlag is for data structure meta/data flag. -type TypeFlag byte - -const ( - // StringMeta is the flag for string meta. - StringMeta TypeFlag = 'S' - // StringData is the flag for string data. - StringData TypeFlag = 's' - // HashMeta is the flag for hash meta. - HashMeta TypeFlag = 'H' - // HashData is the flag for hash data. - HashData TypeFlag = 'h' - // ListMeta is the flag for list meta. - ListMeta TypeFlag = 'L' - // ListData is the flag for list data. - ListData TypeFlag = 'l' -) - -func (t *TxStructure) encodeStringDataKey(key []byte) kv.Key { - // for codec Encode, we may add extra bytes data, so here and following encode - // we will use extra length like 4 for a little optimization. - ek := make([]byte, 0, len(t.prefix)+len(key)+24) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - return codec.EncodeUint(ek, uint64(StringData)) -} - -func (t *TxStructure) encodeHashMetaKey(key []byte) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+24) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - return codec.EncodeUint(ek, uint64(HashMeta)) -} - -func (t *TxStructure) encodeHashDataKey(key []byte, field []byte) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+len(field)+30) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - ek = codec.EncodeUint(ek, uint64(HashData)) - return codec.EncodeBytes(ek, field) -} - -func (t *TxStructure) decodeHashDataKey(ek kv.Key) ([]byte, []byte, error) { - var ( - key []byte - field []byte - err error - tp uint64 - ) - - if !bytes.HasPrefix(ek, t.prefix) { - return nil, nil, errors.New("invalid encoded hash data key prefix") - } - - ek = ek[len(t.prefix):] - - ek, key, err = codec.DecodeBytes(ek) - if err != nil { - return nil, nil, errors.Trace(err) - } - - ek, tp, err = codec.DecodeUint(ek) - if err != nil { - return nil, nil, errors.Trace(err) - } else if TypeFlag(tp) != HashData { - return nil, nil, errors.Errorf("invalid encoded hash data key flag %c", byte(tp)) - } - - _, field, err = codec.DecodeBytes(ek) - return key, field, errors.Trace(err) -} - -func (t *TxStructure) hashDataKeyPrefix(key []byte) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+24) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - return codec.EncodeUint(ek, uint64(HashData)) -} - -func (t *TxStructure) encodeListMetaKey(key []byte) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+24) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - return codec.EncodeUint(ek, uint64(ListMeta)) -} - -func (t *TxStructure) encodeListDataKey(key []byte, index int64) kv.Key { - ek := make([]byte, 0, len(t.prefix)+len(key)+36) - ek = append(ek, t.prefix...) - ek = codec.EncodeBytes(ek, key) - ek = codec.EncodeUint(ek, uint64(ListData)) - return codec.EncodeInt(ek, index) -} diff --git a/vendor/github.com/pingcap/tidb/table/table.go b/vendor/github.com/pingcap/tidb/table/table.go deleted file mode 100644 index 7c547ed53..000000000 --- a/vendor/github.com/pingcap/tidb/table/table.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package table - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/evaluator" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/types" -) - -// RecordIterFunc is used for low-level record iteration. -type RecordIterFunc func(h int64, rec []types.Datum, cols []*column.Col) (more bool, err error) - -// Table is used to retrieve and modify rows in table. -type Table interface { - // IterRecords iterates records in the table and calls fn. - IterRecords(ctx context.Context, startKey kv.Key, cols []*column.Col, fn RecordIterFunc) error - - // RowWithCols returns a row that contains the given cols. - RowWithCols(ctx context.Context, h int64, cols []*column.Col) ([]types.Datum, error) - - // Row returns a row for all columns. - Row(ctx context.Context, h int64) ([]types.Datum, error) - - // Cols returns the columns of the table which is used in select. - Cols() []*column.Col - - // Indices returns the indices of the table. - Indices() []*column.IndexedCol - - // RecordPrefix returns the record key prefix. - RecordPrefix() kv.Key - - // IndexPrefix returns the index key prefix. - IndexPrefix() kv.Key - - // FirstKey returns the first key. - FirstKey() kv.Key - - // RecordKey returns the key in KV storage for the column. - RecordKey(h int64, col *column.Col) kv.Key - - // Truncate truncates the table. - Truncate(ctx context.Context) (err error) - - // AddRecord inserts a row into the table. - AddRecord(ctx context.Context, r []types.Datum) (recordID int64, err error) - - // UpdateRecord updates a row in the table. - UpdateRecord(ctx context.Context, h int64, currData []types.Datum, newData []types.Datum, touched map[int]bool) error - - // RemoveRecord removes a row in the table. - RemoveRecord(ctx context.Context, h int64, r []types.Datum) error - - // AllocAutoID allocates an auto_increment ID for a new row. - AllocAutoID() (int64, error) - - // RebaseAutoID rebases the auto_increment ID base. - // If allocIDs is true, it will allocate some IDs and save to the cache. - // If allocIDs is false, it will not allocate IDs. - RebaseAutoID(newBase int64, allocIDs bool) error - - // Meta returns TableInfo. - Meta() *model.TableInfo - - // LockRow locks a row. - LockRow(ctx context.Context, h int64, forRead bool) error - - // Seek returns the handle greater or equal to h. - Seek(ctx context.Context, h int64) (handle int64, found bool, err error) -} - -// TableFromMeta builds a table.Table from *model.TableInfo. -// Currently, it is assigned to tables.TableFromMeta in tidb package's init function. -var TableFromMeta func(alloc autoid.Allocator, tblInfo *model.TableInfo) (Table, error) - -// GetColDefaultValue gets default value of the column. -func GetColDefaultValue(ctx context.Context, col *model.ColumnInfo) (types.Datum, bool, error) { - // Check no default value flag. - if mysql.HasNoDefaultValueFlag(col.Flag) && col.Tp != mysql.TypeEnum { - return types.Datum{}, false, errors.Errorf("Field '%s' doesn't have a default value", col.Name) - } - - // Check and get timestamp/datetime default value. - if col.Tp == mysql.TypeTimestamp || col.Tp == mysql.TypeDatetime { - if col.DefaultValue == nil { - return types.Datum{}, true, nil - } - - value, err := evaluator.GetTimeValue(ctx, col.DefaultValue, col.Tp, col.Decimal) - if err != nil { - return types.Datum{}, true, errors.Errorf("Field '%s' get default value fail - %s", col.Name, errors.Trace(err)) - } - return types.NewDatum(value), true, nil - } else if col.Tp == mysql.TypeEnum { - // For enum type, if no default value and not null is set, - // the default value is the first element of the enum list - if col.DefaultValue == nil && mysql.HasNotNullFlag(col.Flag) { - return types.NewDatum(col.FieldType.Elems[0]), true, nil - } - } - - return types.NewDatum(col.DefaultValue), true, nil -} diff --git a/vendor/github.com/pingcap/tidb/table/tables/memory_tables.go b/vendor/github.com/pingcap/tidb/table/tables/memory_tables.go deleted file mode 100644 index 118781b35..000000000 --- a/vendor/github.com/pingcap/tidb/table/tables/memory_tables.go +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tables - -import ( - "sync" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/petar/GoLLRB/llrb" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/util/types" -) - -var ( - errRowNotFound = errors.New("Can not find the row") -) - -type itemKey int64 - -type itemPair struct { - handle itemKey - data []types.Datum -} - -func (r *itemPair) Less(item llrb.Item) bool { - switch x := item.(type) { - case itemKey: - return r.handle < x - case *itemPair: - return r.handle < x.handle - } - log.Errorf("invalid type %T", item) - return true -} - -func (k itemKey) Less(item llrb.Item) bool { - switch x := item.(type) { - case itemKey: - return k < x - case *itemPair: - return k < x.handle - } - log.Errorf("invalid type %T", item) - return true -} - -// MemoryTable implements table.Table interface. -type MemoryTable struct { - ID int64 - Name model.CIStr - Columns []*column.Col - pkHandleCol *column.Col - - recordPrefix kv.Key - alloc autoid.Allocator - meta *model.TableInfo - - tree *llrb.LLRB - mu sync.RWMutex -} - -// MemoryTableFromMeta creates a Table instance from model.TableInfo. -func MemoryTableFromMeta(alloc autoid.Allocator, tblInfo *model.TableInfo) (table.Table, error) { - columns := make([]*column.Col, 0, len(tblInfo.Columns)) - var pkHandleColumn *column.Col - for _, colInfo := range tblInfo.Columns { - col := &column.Col{ColumnInfo: *colInfo} - columns = append(columns, col) - if col.IsPKHandleColumn(tblInfo) { - pkHandleColumn = col - } - } - t := newMemoryTable(tblInfo.ID, tblInfo.Name.O, columns, alloc) - t.pkHandleCol = pkHandleColumn - t.meta = tblInfo - return t, nil -} - -// newMemoryTable constructs a MemoryTable instance. -func newMemoryTable(tableID int64, tableName string, cols []*column.Col, alloc autoid.Allocator) *MemoryTable { - name := model.NewCIStr(tableName) - t := &MemoryTable{ - ID: tableID, - Name: name, - alloc: alloc, - Columns: cols, - recordPrefix: genTableRecordPrefix(tableID), - tree: llrb.New(), - } - return t -} - -// Seek seeks the handle -func (t *MemoryTable) Seek(ctx context.Context, handle int64) (int64, bool, error) { - var found bool - var result int64 - t.mu.RLock() - t.tree.AscendGreaterOrEqual(itemKey(handle), func(item llrb.Item) bool { - found = true - result = int64(item.(*itemPair).handle) - return false - }) - t.mu.RUnlock() - return result, found, nil -} - -// Indices implements table.Table Indices interface. -func (t *MemoryTable) Indices() []*column.IndexedCol { - return nil -} - -// Meta implements table.Table Meta interface. -func (t *MemoryTable) Meta() *model.TableInfo { - return t.meta -} - -// Cols implements table.Table Cols interface. -func (t *MemoryTable) Cols() []*column.Col { - return t.Columns -} - -// RecordPrefix implements table.Table RecordPrefix interface. -func (t *MemoryTable) RecordPrefix() kv.Key { - return t.recordPrefix -} - -// IndexPrefix implements table.Table IndexPrefix interface. -func (t *MemoryTable) IndexPrefix() kv.Key { - return nil -} - -// RecordKey implements table.Table RecordKey interface. -func (t *MemoryTable) RecordKey(h int64, col *column.Col) kv.Key { - colID := int64(0) - if col != nil { - colID = col.ID - } - return encodeRecordKey(t.recordPrefix, h, colID) -} - -// FirstKey implements table.Table FirstKey interface. -func (t *MemoryTable) FirstKey() kv.Key { - return t.RecordKey(0, nil) -} - -// Truncate implements table.Table Truncate interface. -func (t *MemoryTable) Truncate(ctx context.Context) error { - t.tree = llrb.New() - return nil -} - -// UpdateRecord implements table.Table UpdateRecord interface. -func (t *MemoryTable) UpdateRecord(ctx context.Context, h int64, oldData []types.Datum, newData []types.Datum, touched map[int]bool) error { - t.mu.Lock() - defer t.mu.Unlock() - item := t.tree.Get(itemKey(h)) - if item == nil { - return errRowNotFound - } - pair := item.(*itemPair) - pair.data = newData - return nil -} - -// AddRecord implements table.Table AddRecord interface. -func (t *MemoryTable) AddRecord(ctx context.Context, r []types.Datum) (recordID int64, err error) { - if t.pkHandleCol != nil { - recordID, err = types.ToInt64(r[t.pkHandleCol.Offset].GetValue()) - if err != nil { - return 0, errors.Trace(err) - } - } else { - recordID, err = t.alloc.Alloc(t.ID) - if err != nil { - return 0, errors.Trace(err) - } - } - item := &itemPair{ - handle: itemKey(recordID), - data: r, - } - t.mu.Lock() - defer t.mu.Unlock() - if t.tree.Get(itemKey(recordID)) != nil { - return 0, kv.ErrKeyExists - } - t.tree.ReplaceOrInsert(item) - return -} - -// RowWithCols implements table.Table RowWithCols interface. -func (t *MemoryTable) RowWithCols(ctx context.Context, h int64, cols []*column.Col) ([]types.Datum, error) { - t.mu.RLock() - defer t.mu.RUnlock() - item := t.tree.Get(itemKey(h)) - if item == nil { - return nil, errRowNotFound - } - row := item.(*itemPair).data - v := make([]types.Datum, len(cols)) - for i, col := range cols { - v[i] = row[col.Offset] - } - return v, nil -} - -// Row implements table.Table Row interface. -func (t *MemoryTable) Row(ctx context.Context, h int64) ([]types.Datum, error) { - r, err := t.RowWithCols(nil, h, t.Cols()) - if err != nil { - return nil, errors.Trace(err) - } - return r, nil -} - -// LockRow implements table.Table LockRow interface. -func (t *MemoryTable) LockRow(ctx context.Context, h int64, forRead bool) error { - return nil -} - -// RemoveRecord implements table.Table RemoveRecord interface. -func (t *MemoryTable) RemoveRecord(ctx context.Context, h int64, r []types.Datum) error { - t.mu.Lock() - t.tree.Delete(itemKey(h)) - t.mu.Unlock() - return nil -} - -// AllocAutoID implements table.Table AllocAutoID interface. -func (t *MemoryTable) AllocAutoID() (int64, error) { - return t.alloc.Alloc(t.ID) -} - -// RebaseAutoID implements table.Table RebaseAutoID interface. -func (t *MemoryTable) RebaseAutoID(newBase int64, isSetStep bool) error { - return t.alloc.Rebase(t.ID, newBase, isSetStep) -} - -// IterRecords implements table.Table IterRecords interface. -func (t *MemoryTable) IterRecords(ctx context.Context, startKey kv.Key, cols []*column.Col, - fn table.RecordIterFunc) error { - return nil -} diff --git a/vendor/github.com/pingcap/tidb/table/tables/tables.go b/vendor/github.com/pingcap/tidb/table/tables/tables.go deleted file mode 100644 index 9c038a91d..000000000 --- a/vendor/github.com/pingcap/tidb/table/tables/tables.go +++ /dev/null @@ -1,875 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tables - -import ( - "strings" - "time" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/evaluator" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/codec" - "github.com/pingcap/tidb/util/types" -) - -// TablePrefix is the prefix for table record and index key. -var TablePrefix = []byte{'t'} - -// Table implements table.Table interface. -type Table struct { - ID int64 - Name model.CIStr - Columns []*column.Col - - publicColumns []*column.Col - writableColumns []*column.Col - indices []*column.IndexedCol - recordPrefix kv.Key - indexPrefix kv.Key - alloc autoid.Allocator - meta *model.TableInfo -} - -// TableFromMeta creates a Table instance from model.TableInfo. -func TableFromMeta(alloc autoid.Allocator, tblInfo *model.TableInfo) (table.Table, error) { - if tblInfo.State == model.StateNone { - return nil, errors.Errorf("table %s can't be in none state", tblInfo.Name) - } - - columns := make([]*column.Col, 0, len(tblInfo.Columns)) - for _, colInfo := range tblInfo.Columns { - if colInfo.State == model.StateNone { - return nil, errors.Errorf("column %s can't be in none state", colInfo.Name) - } - - col := &column.Col{ColumnInfo: *colInfo} - columns = append(columns, col) - } - - t := newTable(tblInfo.ID, columns, alloc) - - for _, idxInfo := range tblInfo.Indices { - if idxInfo.State == model.StateNone { - return nil, errors.Errorf("index %s can't be in none state", idxInfo.Name) - } - - idx := &column.IndexedCol{ - IndexInfo: *idxInfo, - } - - idx.X = kv.NewKVIndex(t.IndexPrefix(), idxInfo.Name.L, idxInfo.ID, idxInfo.Unique) - - t.indices = append(t.indices, idx) - } - t.meta = tblInfo - return t, nil -} - -// newTable constructs a Table instance. -func newTable(tableID int64, cols []*column.Col, alloc autoid.Allocator) *Table { - t := &Table{ - ID: tableID, - recordPrefix: genTableRecordPrefix(tableID), - indexPrefix: genTableIndexPrefix(tableID), - alloc: alloc, - Columns: cols, - } - - t.publicColumns = t.Cols() - t.writableColumns = t.writableCols() - return t -} - -// Indices implements table.Table Indices interface. -func (t *Table) Indices() []*column.IndexedCol { - return t.indices -} - -// Meta implements table.Table Meta interface. -func (t *Table) Meta() *model.TableInfo { - return t.meta -} - -// Cols implements table.Table Cols interface. -func (t *Table) Cols() []*column.Col { - if len(t.publicColumns) > 0 { - return t.publicColumns - } - - t.publicColumns = make([]*column.Col, 0, len(t.Columns)) - for _, col := range t.Columns { - if col.State == model.StatePublic { - t.publicColumns = append(t.publicColumns, col) - } - } - - return t.publicColumns -} - -func (t *Table) writableCols() []*column.Col { - if len(t.writableColumns) > 0 { - return t.writableColumns - } - - t.writableColumns = make([]*column.Col, 0, len(t.Columns)) - for _, col := range t.Columns { - if col.State == model.StateDeleteOnly || col.State == model.StateDeleteReorganization { - continue - } - - t.writableColumns = append(t.writableColumns, col) - } - - return t.writableColumns -} - -// RecordPrefix implements table.Table RecordPrefix interface. -func (t *Table) RecordPrefix() kv.Key { - return t.recordPrefix -} - -// IndexPrefix implements table.Table IndexPrefix interface. -func (t *Table) IndexPrefix() kv.Key { - return t.indexPrefix -} - -// RecordKey implements table.Table RecordKey interface. -func (t *Table) RecordKey(h int64, col *column.Col) kv.Key { - colID := int64(0) - if col != nil { - colID = col.ID - } - return encodeRecordKey(t.recordPrefix, h, colID) -} - -// FirstKey implements table.Table FirstKey interface. -func (t *Table) FirstKey() kv.Key { - return t.RecordKey(0, nil) -} - -// Truncate implements table.Table Truncate interface. -func (t *Table) Truncate(ctx context.Context) error { - txn, err := ctx.GetTxn(false) - if err != nil { - return errors.Trace(err) - } - err = util.DelKeyWithPrefix(txn, t.RecordPrefix()) - if err != nil { - return errors.Trace(err) - } - return util.DelKeyWithPrefix(txn, t.IndexPrefix()) -} - -// UpdateRecord implements table.Table UpdateRecord interface. -func (t *Table) UpdateRecord(ctx context.Context, h int64, oldData []types.Datum, newData []types.Datum, touched map[int]bool) error { - // We should check whether this table has on update column which state is write only. - currentData := make([]types.Datum, len(t.writableCols())) - copy(currentData, newData) - - // If they are not set, and other data are changed, they will be updated by current timestamp too. - err := t.setOnUpdateData(ctx, touched, currentData) - if err != nil { - return errors.Trace(err) - } - - txn, err := ctx.GetTxn(false) - if err != nil { - return errors.Trace(err) - } - - bs := kv.NewBufferStore(txn) - defer bs.Release() - - // set new value - if err = t.setNewData(bs, h, touched, currentData); err != nil { - return errors.Trace(err) - } - - // rebuild index - if err = t.rebuildIndices(bs, h, touched, oldData, currentData); err != nil { - return errors.Trace(err) - } - - err = bs.SaveTo(txn) - if err != nil { - return errors.Trace(err) - } - - return nil -} - -func (t *Table) setOnUpdateData(ctx context.Context, touched map[int]bool, data []types.Datum) error { - ucols := column.FindOnUpdateCols(t.writableCols()) - for _, col := range ucols { - if !touched[col.Offset] { - value, err := evaluator.GetTimeValue(ctx, evaluator.CurrentTimestamp, col.Tp, col.Decimal) - if err != nil { - return errors.Trace(err) - } - - data[col.Offset] = types.NewDatum(value) - touched[col.Offset] = true - } - } - return nil -} -func (t *Table) setNewData(rm kv.RetrieverMutator, h int64, touched map[int]bool, data []types.Datum) error { - for _, col := range t.Cols() { - if !touched[col.Offset] { - continue - } - - k := t.RecordKey(h, col) - if err := SetColValue(rm, k, data[col.Offset]); err != nil { - return errors.Trace(err) - } - } - - return nil -} - -func (t *Table) rebuildIndices(rm kv.RetrieverMutator, h int64, touched map[int]bool, oldData []types.Datum, newData []types.Datum) error { - for _, idx := range t.Indices() { - idxTouched := false - for _, ic := range idx.Columns { - if touched[ic.Offset] { - idxTouched = true - break - } - } - if !idxTouched { - continue - } - - oldVs, err := idx.FetchValues(oldData) - if err != nil { - return errors.Trace(err) - } - - if t.removeRowIndex(rm, h, oldVs, idx); err != nil { - return errors.Trace(err) - } - - newVs, err := idx.FetchValues(newData) - if err != nil { - return errors.Trace(err) - } - - if err := t.buildIndexForRow(rm, h, newVs, idx); err != nil { - return errors.Trace(err) - } - } - return nil -} - -// AddRecord implements table.Table AddRecord interface. -func (t *Table) AddRecord(ctx context.Context, r []types.Datum) (recordID int64, err error) { - var hasRecordID bool - for _, col := range t.Cols() { - if col.IsPKHandleColumn(t.meta) { - recordID = r[col.Offset].GetInt64() - hasRecordID = true - break - } - } - if !hasRecordID { - recordID, err = t.alloc.Alloc(t.ID) - if err != nil { - return 0, errors.Trace(err) - } - } - txn, err := ctx.GetTxn(false) - if err != nil { - return 0, errors.Trace(err) - } - bs := kv.NewBufferStore(txn) - defer bs.Release() - // Insert new entries into indices. - h, err := t.addIndices(ctx, recordID, r, bs) - if err != nil { - return h, errors.Trace(err) - } - - if err = t.LockRow(ctx, recordID, false); err != nil { - return 0, errors.Trace(err) - } - // Set public and write only column value. - for _, col := range t.writableCols() { - if col.IsPKHandleColumn(t.meta) { - continue - } - var value types.Datum - if col.State == model.StateWriteOnly || col.State == model.StateWriteReorganization { - // if col is in write only or write reorganization state, we must add it with its default value. - value, _, err = table.GetColDefaultValue(ctx, &col.ColumnInfo) - if err != nil { - return 0, errors.Trace(err) - } - value, err = value.ConvertTo(&col.FieldType) - if err != nil { - return 0, errors.Trace(err) - } - } else { - value = r[col.Offset] - } - - key := t.RecordKey(recordID, col) - err = SetColValue(txn, key, value) - if err != nil { - return 0, errors.Trace(err) - } - } - if err = bs.SaveTo(txn); err != nil { - return 0, errors.Trace(err) - } - - variable.GetSessionVars(ctx).AddAffectedRows(1) - return recordID, nil -} - -// Generate index content string representation. -func (t *Table) genIndexKeyStr(colVals []types.Datum) (string, error) { - // Pass pre-composed error to txn. - strVals := make([]string, 0, len(colVals)) - for _, cv := range colVals { - cvs := "NULL" - var err error - if cv.Kind() != types.KindNull { - cvs, err = types.ToString(cv.GetValue()) - if err != nil { - return "", errors.Trace(err) - } - } - strVals = append(strVals, cvs) - } - return strings.Join(strVals, "-"), nil -} - -// Add data into indices. -func (t *Table) addIndices(ctx context.Context, recordID int64, r []types.Datum, bs *kv.BufferStore) (int64, error) { - txn, err := ctx.GetTxn(false) - if err != nil { - return 0, errors.Trace(err) - } - // Clean up lazy check error environment - defer txn.DelOption(kv.PresumeKeyNotExistsError) - if t.meta.PKIsHandle { - // Check key exists. - recordKey := t.RecordKey(recordID, nil) - e := kv.ErrKeyExists.Gen("Duplicate entry '%d' for key 'PRIMARY'", recordID) - txn.SetOption(kv.PresumeKeyNotExistsError, e) - _, err = txn.Get(recordKey) - if err == nil { - return recordID, errors.Trace(e) - } else if !terror.ErrorEqual(err, kv.ErrNotExist) { - return 0, errors.Trace(err) - } - txn.DelOption(kv.PresumeKeyNotExistsError) - } - - for _, v := range t.indices { - if v == nil || v.State == model.StateDeleteOnly || v.State == model.StateDeleteReorganization { - // if index is in delete only or delete reorganization state, we can't add it. - continue - } - colVals, _ := v.FetchValues(r) - var dupKeyErr error - if v.Unique || v.Primary { - entryKey, err1 := t.genIndexKeyStr(colVals) - if err1 != nil { - return 0, errors.Trace(err1) - } - dupKeyErr = kv.ErrKeyExists.Gen("Duplicate entry '%s' for key '%s'", entryKey, v.Name) - txn.SetOption(kv.PresumeKeyNotExistsError, dupKeyErr) - } - if err = v.X.Create(bs, colVals, recordID); err != nil { - if terror.ErrorEqual(err, kv.ErrKeyExists) { - // Get the duplicate row handle - // For insert on duplicate syntax, we should update the row - iter, _, err1 := v.X.Seek(bs, colVals) - if err1 != nil { - return 0, errors.Trace(err1) - } - _, h, err1 := iter.Next() - if err1 != nil { - return 0, errors.Trace(err1) - } - return h, errors.Trace(dupKeyErr) - } - return 0, errors.Trace(err) - } - txn.DelOption(kv.PresumeKeyNotExistsError) - } - return 0, nil -} - -// RowWithCols implements table.Table RowWithCols interface. -func (t *Table) RowWithCols(ctx context.Context, h int64, cols []*column.Col) ([]types.Datum, error) { - txn, err := ctx.GetTxn(false) - if err != nil { - return nil, errors.Trace(err) - } - v := make([]types.Datum, len(cols)) - for i, col := range cols { - if col.State != model.StatePublic { - return nil, errors.Errorf("Cannot use none public column - %v", cols) - } - if col.IsPKHandleColumn(t.meta) { - v[i].SetInt64(h) - continue - } - - k := t.RecordKey(h, col) - data, err := txn.Get(k) - if err != nil { - return nil, errors.Trace(err) - } - - v[i], err = DecodeValue(data, &col.FieldType) - if err != nil { - return nil, errors.Trace(err) - } - } - return v, nil -} - -// Row implements table.Table Row interface. -func (t *Table) Row(ctx context.Context, h int64) ([]types.Datum, error) { - // TODO: we only interested in mentioned cols - r, err := t.RowWithCols(ctx, h, t.Cols()) - if err != nil { - return nil, errors.Trace(err) - } - return r, nil -} - -// LockRow implements table.Table LockRow interface. -func (t *Table) LockRow(ctx context.Context, h int64, forRead bool) error { - txn, err := ctx.GetTxn(false) - if err != nil { - return errors.Trace(err) - } - // Get row lock key - lockKey := t.RecordKey(h, nil) - if forRead { - err = txn.LockKeys(lockKey) - } else { - // set row lock key to current txn - err = txn.Set(lockKey, []byte(txn.String())) - } - return errors.Trace(err) -} - -// RemoveRecord implements table.Table RemoveRecord interface. -func (t *Table) RemoveRecord(ctx context.Context, h int64, r []types.Datum) error { - err := t.removeRowData(ctx, h) - if err != nil { - return errors.Trace(err) - } - - err = t.removeRowIndices(ctx, h, r) - if err != nil { - return errors.Trace(err) - } - - return nil -} - -func (t *Table) removeRowData(ctx context.Context, h int64) error { - if err := t.LockRow(ctx, h, false); err != nil { - return errors.Trace(err) - } - txn, err := ctx.GetTxn(false) - if err != nil { - return errors.Trace(err) - } - // Remove row's colume one by one - for _, col := range t.Columns { - k := t.RecordKey(h, col) - err = txn.Delete([]byte(k)) - if err != nil { - if col.State != model.StatePublic && terror.ErrorEqual(err, kv.ErrNotExist) { - // If the column is not in public state, we may have not added the column, - // or already deleted the column, so skip ErrNotExist error. - continue - } - - return errors.Trace(err) - } - } - // Remove row lock - err = txn.Delete([]byte(t.RecordKey(h, nil))) - if err != nil { - return errors.Trace(err) - } - return nil -} - -// removeRowAllIndex removes all the indices of a row. -func (t *Table) removeRowIndices(ctx context.Context, h int64, rec []types.Datum) error { - for _, v := range t.indices { - vals, err := v.FetchValues(rec) - if vals == nil { - // TODO: check this - continue - } - txn, err := ctx.GetTxn(false) - if err != nil { - return errors.Trace(err) - } - if err = v.X.Delete(txn, vals, h); err != nil { - if v.State != model.StatePublic && terror.ErrorEqual(err, kv.ErrNotExist) { - // If the index is not in public state, we may have not created the index, - // or already deleted the index, so skip ErrNotExist error. - continue - } - - return errors.Trace(err) - } - } - return nil -} - -// RemoveRowIndex implements table.Table RemoveRowIndex interface. -func (t *Table) removeRowIndex(rm kv.RetrieverMutator, h int64, vals []types.Datum, idx *column.IndexedCol) error { - if err := idx.X.Delete(rm, vals, h); err != nil { - return errors.Trace(err) - } - return nil -} - -// BuildIndexForRow implements table.Table BuildIndexForRow interface. -func (t *Table) buildIndexForRow(rm kv.RetrieverMutator, h int64, vals []types.Datum, idx *column.IndexedCol) error { - if idx.State == model.StateDeleteOnly || idx.State == model.StateDeleteReorganization { - // If the index is in delete only or write reorganization state, we can not add index. - return nil - } - - if err := idx.X.Create(rm, vals, h); err != nil { - return errors.Trace(err) - } - return nil -} - -// IterRecords implements table.Table IterRecords interface. -func (t *Table) IterRecords(ctx context.Context, startKey kv.Key, cols []*column.Col, - fn table.RecordIterFunc) error { - txn, err := ctx.GetTxn(false) - if err != nil { - return errors.Trace(err) - } - it, err := txn.Seek(startKey) - if err != nil { - return errors.Trace(err) - } - defer it.Close() - - if !it.Valid() { - return nil - } - - log.Debugf("startKey:%q, key:%q, value:%q", startKey, it.Key(), it.Value()) - - prefix := t.RecordPrefix() - for it.Valid() && it.Key().HasPrefix(prefix) { - // first kv pair is row lock information. - // TODO: check valid lock - // get row handle - handle, err := DecodeRecordKeyHandle(it.Key()) - if err != nil { - return errors.Trace(err) - } - - data, err := t.RowWithCols(ctx, handle, cols) - if err != nil { - return errors.Trace(err) - } - more, err := fn(handle, data, cols) - if !more || err != nil { - return errors.Trace(err) - } - - rk := t.RecordKey(handle, nil) - err = kv.NextUntil(it, util.RowKeyPrefixFilter(rk)) - if err != nil { - return errors.Trace(err) - } - } - - return nil -} - -// AllocAutoID implements table.Table AllocAutoID interface. -func (t *Table) AllocAutoID() (int64, error) { - return t.alloc.Alloc(t.ID) -} - -// RebaseAutoID implements table.Table RebaseAutoID interface. -func (t *Table) RebaseAutoID(newBase int64, isSetStep bool) error { - return t.alloc.Rebase(t.ID, newBase, isSetStep) -} - -// Seek implements table.Table Seek interface. -func (t *Table) Seek(ctx context.Context, h int64) (int64, bool, error) { - seekKey := EncodeRecordKey(t.ID, h, 0) - txn, err := ctx.GetTxn(false) - if err != nil { - return 0, false, errors.Trace(err) - } - iter, err := txn.Seek(seekKey) - if !iter.Valid() || !iter.Key().HasPrefix(t.RecordPrefix()) { - // No more records in the table, skip to the end. - return 0, false, nil - } - handle, err := DecodeRecordKeyHandle(iter.Key()) - if err != nil { - return 0, false, errors.Trace(err) - } - return handle, true, nil -} - -var ( - recordPrefixSep = []byte("_r") - indexPrefixSep = []byte("_i") -) - -// record prefix is "t[tableID]_r" -func genTableRecordPrefix(tableID int64) kv.Key { - buf := make([]byte, 0, len(TablePrefix)+8+len(recordPrefixSep)) - buf = append(buf, TablePrefix...) - buf = codec.EncodeInt(buf, tableID) - buf = append(buf, recordPrefixSep...) - return buf -} - -// index prefix is "t[tableID]_i" -func genTableIndexPrefix(tableID int64) kv.Key { - buf := make([]byte, 0, len(TablePrefix)+8+len(indexPrefixSep)) - buf = append(buf, TablePrefix...) - buf = codec.EncodeInt(buf, tableID) - buf = append(buf, indexPrefixSep...) - return buf -} - -func encodeRecordKey(recordPrefix kv.Key, h int64, columnID int64) kv.Key { - buf := make([]byte, 0, len(recordPrefix)+16) - buf = append(buf, recordPrefix...) - buf = codec.EncodeInt(buf, h) - - if columnID != 0 { - buf = codec.EncodeInt(buf, columnID) - } - return buf -} - -// EncodeRecordKey encodes the record key for a table column. -func EncodeRecordKey(tableID int64, h int64, columnID int64) kv.Key { - prefix := genTableRecordPrefix(tableID) - return encodeRecordKey(prefix, h, columnID) -} - -// DecodeRecordKey decodes the key and gets the tableID, handle and columnID. -func DecodeRecordKey(key kv.Key) (tableID int64, handle int64, columnID int64, err error) { - k := key - if !key.HasPrefix(TablePrefix) { - return 0, 0, 0, errors.Errorf("invalid record key - %q", k) - } - - key = key[len(TablePrefix):] - key, tableID, err = codec.DecodeInt(key) - if err != nil { - return 0, 0, 0, errors.Trace(err) - } - - if !key.HasPrefix(recordPrefixSep) { - return 0, 0, 0, errors.Errorf("invalid record key - %q", k) - } - - key = key[len(recordPrefixSep):] - - key, handle, err = codec.DecodeInt(key) - if err != nil { - return 0, 0, 0, errors.Trace(err) - } - if len(key) == 0 { - return - } - - key, columnID, err = codec.DecodeInt(key) - if err != nil { - return 0, 0, 0, errors.Trace(err) - } - - return -} - -// EncodeValue encodes a go value to bytes. -func EncodeValue(raw types.Datum) ([]byte, error) { - v, err := flatten(raw) - if err != nil { - return nil, errors.Trace(err) - } - b, err := codec.EncodeValue(nil, v) - return b, errors.Trace(err) -} - -// DecodeValue implements table.Table DecodeValue interface. -func DecodeValue(data []byte, tp *types.FieldType) (types.Datum, error) { - values, err := codec.Decode(data) - if err != nil { - return types.Datum{}, errors.Trace(err) - } - return unflatten(values[0], tp) -} - -func flatten(data types.Datum) (types.Datum, error) { - switch data.Kind() { - case types.KindMysqlTime: - // for mysql datetime, timestamp and date type - b, err := data.GetMysqlTime().Marshal() - if err != nil { - return types.NewDatum(nil), errors.Trace(err) - } - return types.NewDatum(b), nil - case types.KindMysqlDuration: - // for mysql time type - data.SetInt64(int64(data.GetMysqlDuration().Duration)) - return data, nil - case types.KindMysqlDecimal: - data.SetString(data.GetMysqlDecimal().String()) - return data, nil - case types.KindMysqlEnum: - data.SetUint64(data.GetMysqlEnum().Value) - return data, nil - case types.KindMysqlSet: - data.SetUint64(data.GetMysqlSet().Value) - return data, nil - case types.KindMysqlBit: - data.SetUint64(data.GetMysqlBit().Value) - return data, nil - case types.KindMysqlHex: - data.SetInt64(data.GetMysqlHex().Value) - return data, nil - default: - return data, nil - } -} - -func unflatten(datum types.Datum, tp *types.FieldType) (types.Datum, error) { - if datum.Kind() == types.KindNull { - return datum, nil - } - switch tp.Tp { - case mysql.TypeFloat: - datum.SetFloat32(float32(datum.GetFloat64())) - return datum, nil - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeYear, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, - mysql.TypeDouble, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob, - mysql.TypeVarchar, mysql.TypeString: - return datum, nil - case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp: - var t mysql.Time - t.Type = tp.Tp - t.Fsp = tp.Decimal - err := t.Unmarshal(datum.GetBytes()) - if err != nil { - return datum, errors.Trace(err) - } - datum.SetValue(t) - return datum, nil - case mysql.TypeDuration: - dur := mysql.Duration{Duration: time.Duration(datum.GetInt64())} - datum.SetValue(dur) - return datum, nil - case mysql.TypeNewDecimal, mysql.TypeDecimal: - dec, err := mysql.ParseDecimal(datum.GetString()) - if err != nil { - return datum, errors.Trace(err) - } - datum.SetValue(dec) - return datum, nil - case mysql.TypeEnum: - enum, err := mysql.ParseEnumValue(tp.Elems, datum.GetUint64()) - if err != nil { - return datum, errors.Trace(err) - } - datum.SetValue(enum) - return datum, nil - case mysql.TypeSet: - set, err := mysql.ParseSetValue(tp.Elems, datum.GetUint64()) - if err != nil { - return datum, errors.Trace(err) - } - datum.SetValue(set) - return datum, nil - case mysql.TypeBit: - bit := mysql.Bit{Value: datum.GetUint64(), Width: tp.Flen} - datum.SetValue(bit) - return datum, nil - } - log.Error(tp.Tp, datum) - return datum, nil -} - -// SetColValue implements table.Table SetColValue interface. -func SetColValue(rm kv.RetrieverMutator, key []byte, data types.Datum) error { - v, err := EncodeValue(data) - if err != nil { - return errors.Trace(err) - } - if err := rm.Set(key, v); err != nil { - return errors.Trace(err) - } - return nil -} - -// DecodeRecordKeyHandle decodes the key and gets the record handle. -func DecodeRecordKeyHandle(key kv.Key) (int64, error) { - _, handle, _, err := DecodeRecordKey(key) - return handle, errors.Trace(err) -} - -// FindIndexByColName implements table.Table FindIndexByColName interface. -func FindIndexByColName(t table.Table, name string) *column.IndexedCol { - for _, idx := range t.Indices() { - // only public index can be read. - if idx.State != model.StatePublic { - continue - } - - if len(idx.Columns) == 1 && strings.EqualFold(idx.Columns[0].Name.L, name) { - return idx - } - } - return nil -} - -func init() { - table.TableFromMeta = TableFromMeta -} diff --git a/vendor/github.com/pingcap/tidb/terror/terror.go b/vendor/github.com/pingcap/tidb/terror/terror.go deleted file mode 100644 index 46ce78e5f..000000000 --- a/vendor/github.com/pingcap/tidb/terror/terror.go +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package terror - -import ( - "fmt" - "runtime" - "strconv" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/mysql" -) - -// Common base error instances. -var ( - CommitNotInTransaction = ClassExecutor.New(CodeCommitNotInTransaction, "commit not in transaction") - RollbackNotInTransaction = ClassExecutor.New(CodeRollbackNotInTransaction, "rollback not in transaction") - ExecResultIsEmpty = ClassExecutor.New(CodeExecResultIsEmpty, "exec result is empty") - - MissConnectionID = ClassExpression.New(CodeMissConnectionID, "miss connection id information") -) - -// ErrCode represents a specific error type in a error class. -// Same error code can be used in different error classes. -type ErrCode int - -// Executor error codes. -const ( - CodeCommitNotInTransaction ErrCode = 1 - CodeRollbackNotInTransaction = 2 - CodeExecResultIsEmpty = 3 -) - -// Expression error codes. -const ( - CodeMissConnectionID ErrCode = iota + 1 -) - -// ErrClass represents a class of errors. -type ErrClass int - -// Error classes. -const ( - ClassParser ErrClass = iota + 1 - ClassSchema - ClassOptimizer - ClassOptimizerPlan - ClassExecutor - ClassEvaluator - ClassKV - ClassServer - ClassVariable - ClassExpression - // Add more as needed. -) - -// String implements fmt.Stringer interface. -func (ec ErrClass) String() string { - switch ec { - case ClassParser: - return "parser" - case ClassSchema: - return "schema" - case ClassOptimizer: - return "optimizer" - case ClassExecutor: - return "executor" - case ClassKV: - return "kv" - case ClassServer: - return "server" - case ClassVariable: - return "variable" - case ClassExpression: - return "expression" - } - return strconv.Itoa(int(ec)) -} - -// EqualClass returns true if err is *Error with the same class. -func (ec ErrClass) EqualClass(err error) bool { - e := errors.Cause(err) - if e == nil { - return false - } - if te, ok := e.(*Error); ok { - return te.class == ec - } - return false -} - -// NotEqualClass returns true if err is not *Error with the same class. -func (ec ErrClass) NotEqualClass(err error) bool { - return !ec.EqualClass(err) -} - -// New creates an *Error with an error code and an error message. -// Usually used to create base *Error. -func (ec ErrClass) New(code ErrCode, message string) *Error { - return &Error{ - class: ec, - code: code, - message: message, - } -} - -// Error implements error interface and adds integer Class and Code, so -// errors with different message can be compared. -type Error struct { - class ErrClass - code ErrCode - message string - file string - line int -} - -// Class returns ErrClass -func (e *Error) Class() ErrClass { - return e.class -} - -// Code returns ErrCode -func (e *Error) Code() ErrCode { - return e.code -} - -// Location returns the location where the error is created, -// implements juju/errors locationer interface. -func (e *Error) Location() (file string, line int) { - return e.file, e.line -} - -// Error implements error interface. -func (e *Error) Error() string { - return fmt.Sprintf("[%s:%d]%s", e.class, e.code, e.message) -} - -// Gen generates a new *Error with the same class and code, and a new formatted message. -func (e *Error) Gen(format string, args ...interface{}) *Error { - err := *e - err.message = fmt.Sprintf(format, args...) - _, err.file, err.line, _ = runtime.Caller(1) - return &err -} - -// Equal checks if err is equal to e. -func (e *Error) Equal(err error) bool { - originErr := errors.Cause(err) - if originErr == nil { - return false - } - inErr, ok := originErr.(*Error) - return ok && e.class == inErr.class && e.code == inErr.code -} - -// NotEqual checks if err is not equal to e. -func (e *Error) NotEqual(err error) bool { - return !e.Equal(err) -} - -// ToSQLError convert Error to mysql.SQLError. -func (e *Error) ToSQLError() *mysql.SQLError { - code := e.getMySQLErrorCode() - return mysql.NewErrf(code, e.message) -} - -var defaultMySQLErrorCode uint16 - -func (e *Error) getMySQLErrorCode() uint16 { - codeMap, ok := ErrClassToMySQLCodes[e.class] - if !ok { - log.Warnf("Unknown error class: %v", e.class) - return defaultMySQLErrorCode - } - code, ok := codeMap[e.code] - if !ok { - log.Warnf("Unknown error class: %v code: %v", e.class, e.code) - return defaultMySQLErrorCode - } - return code -} - -var ( - // ErrCode to mysql error code map. - parserMySQLErrCodes = map[ErrCode]uint16{} - executorMySQLErrCodes = map[ErrCode]uint16{} - serverMySQLErrCodes = map[ErrCode]uint16{} - expressionMySQLErrCodes = map[ErrCode]uint16{} - - // ErrClassToMySQLCodes is the map of ErrClass to code-map. - ErrClassToMySQLCodes map[ErrClass](map[ErrCode]uint16) -) - -func init() { - ErrClassToMySQLCodes = make(map[ErrClass](map[ErrCode]uint16)) - ErrClassToMySQLCodes[ClassParser] = parserMySQLErrCodes - ErrClassToMySQLCodes[ClassExecutor] = executorMySQLErrCodes - ErrClassToMySQLCodes[ClassServer] = serverMySQLErrCodes - ErrClassToMySQLCodes[ClassExpression] = expressionMySQLErrCodes - defaultMySQLErrorCode = mysql.ErrUnknown -} - -// ErrorEqual returns a boolean indicating whether err1 is equal to err2. -func ErrorEqual(err1, err2 error) bool { - e1 := errors.Cause(err1) - e2 := errors.Cause(err2) - - if e1 == e2 { - return true - } - - if e1 == nil || e2 == nil { - return e1 == e2 - } - - te1, ok1 := e1.(*Error) - te2, ok2 := e2.(*Error) - if ok1 && ok2 { - return te1.class == te2.class && te1.code == te2.code - } - - return e1.Error() == e2.Error() -} - -// ErrorNotEqual returns a boolean indicating whether err1 isn't equal to err2. -func ErrorNotEqual(err1, err2 error) bool { - return !ErrorEqual(err1, err2) -} diff --git a/vendor/github.com/pingcap/tidb/tidb.go b/vendor/github.com/pingcap/tidb/tidb.go deleted file mode 100644 index faa1a0b5a..000000000 --- a/vendor/github.com/pingcap/tidb/tidb.go +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package tidb - -import ( - "net/http" - "time" - // For pprof - _ "net/http/pprof" - "net/url" - "os" - "strings" - "sync" - - "github.com/juju/errors" - "github.com/ngaut/log" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/domain" - "github.com/pingcap/tidb/executor" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/parser" - "github.com/pingcap/tidb/sessionctx/autocommit" - "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/store/hbase" - "github.com/pingcap/tidb/store/localstore" - "github.com/pingcap/tidb/store/localstore/boltdb" - "github.com/pingcap/tidb/store/localstore/engine" - "github.com/pingcap/tidb/store/localstore/goleveldb" - "github.com/pingcap/tidb/util/types" -) - -// Engine prefix name -const ( - EngineGoLevelDBMemory = "memory://" - EngineGoLevelDBPersistent = "goleveldb://" - EngineBoltDB = "boltdb://" - EngineHBase = "hbase://" - defaultMaxRetries = 30 - retrySleepInterval = 500 * time.Millisecond -) - -type domainMap struct { - domains map[string]*domain.Domain - mu sync.Mutex -} - -func (dm *domainMap) Get(store kv.Storage) (d *domain.Domain, err error) { - key := store.UUID() - dm.mu.Lock() - defer dm.mu.Unlock() - d = dm.domains[key] - if d != nil { - return - } - - lease := time.Duration(0) - if !localstore.IsLocalStore(store) { - lease = schemaLease - } - d, err = domain.NewDomain(store, lease) - if err != nil { - return nil, errors.Trace(err) - } - dm.domains[key] = d - return -} - -var ( - domap = &domainMap{ - domains: map[string]*domain.Domain{}, - } - stores = make(map[string]kv.Driver) - // EnablePprof indicates whether to enable HTTP Pprof or not. - EnablePprof = os.Getenv("TIDB_PPROF") != "0" - // PprofAddr is the pprof url. - PprofAddr = "localhost:8888" - // store.UUID()-> IfBootstrapped - storeBootstrapped = make(map[string]bool) - - // schemaLease is the time for re-updating remote schema. - // In online DDL, we must wait 2 * SchemaLease time to guarantee - // all servers get the neweset schema. - // Default schema lease time is 1 second, you can change it with a proper time, - // but you must know that too little may cause badly performance degradation. - // For production, you should set a big schema lease, like 300s+. - schemaLease = 1 * time.Second -) - -// SetSchemaLease changes the default schema lease time for DDL. -// This function is very dangerous, don't use it if you really know what you do. -// SetSchemaLease only affects not local storage after bootstrapped. -func SetSchemaLease(lease time.Duration) { - schemaLease = lease -} - -// What character set should the server translate a statement to after receiving it? -// For this, the server uses the character_set_connection and collation_connection system variables. -// It converts statements sent by the client from character_set_client to character_set_connection -// (except for string literals that have an introducer such as _latin1 or _utf8). -// collation_connection is important for comparisons of literal strings. -// For comparisons of strings with column values, collation_connection does not matter because columns -// have their own collation, which has a higher collation precedence. -// See: https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html -func getCtxCharsetInfo(ctx context.Context) (string, string) { - sessionVars := variable.GetSessionVars(ctx) - charset := sessionVars.Systems["character_set_connection"] - collation := sessionVars.Systems["collation_connection"] - return charset, collation -} - -// Parse parses a query string to raw ast.StmtNode. -func Parse(ctx context.Context, src string) ([]ast.StmtNode, error) { - log.Debug("compiling", src) - charset, collation := getCtxCharsetInfo(ctx) - stmts, err := parser.Parse(src, charset, collation) - if err != nil { - log.Warnf("compiling %s, error: %v", src, err) - return nil, errors.Trace(err) - } - return stmts, nil -} - -// Compile is safe for concurrent use by multiple goroutines. -func Compile(ctx context.Context, rawStmt ast.StmtNode) (ast.Statement, error) { - compiler := &executor.Compiler{} - st, err := compiler.Compile(ctx, rawStmt) - if err != nil { - return nil, errors.Trace(err) - } - return st, nil -} - -func runStmt(ctx context.Context, s ast.Statement, args ...interface{}) (ast.RecordSet, error) { - var err error - var rs ast.RecordSet - // before every execution, we must clear affectedrows. - variable.GetSessionVars(ctx).SetAffectedRows(0) - if s.IsDDL() { - err = ctx.FinishTxn(false) - if err != nil { - return nil, errors.Trace(err) - } - } - rs, err = s.Exec(ctx) - // All the history should be added here. - se := ctx.(*session) - se.history.add(0, s) - // MySQL DDL should be auto-commit - if s.IsDDL() || autocommit.ShouldAutocommit(ctx) { - if err != nil { - ctx.FinishTxn(true) - } else { - err = ctx.FinishTxn(false) - } - } - return rs, errors.Trace(err) -} - -// GetRows gets all the rows from a RecordSet. -func GetRows(rs ast.RecordSet) ([][]types.Datum, error) { - if rs == nil { - return nil, nil - } - var rows [][]types.Datum - defer rs.Close() - // Negative limit means no limit. - for { - row, err := rs.Next() - if err != nil { - return nil, errors.Trace(err) - } - if row == nil { - break - } - rows = append(rows, row.Data) - } - return rows, nil -} - -// RegisterStore registers a kv storage with unique name and its associated Driver. -func RegisterStore(name string, driver kv.Driver) error { - name = strings.ToLower(name) - - if _, ok := stores[name]; ok { - return errors.Errorf("%s is already registered", name) - } - - stores[name] = driver - return nil -} - -// RegisterLocalStore registers a local kv storage with unique name and its associated engine Driver. -func RegisterLocalStore(name string, driver engine.Driver) error { - d := localstore.Driver{Driver: driver} - return RegisterStore(name, d) -} - -// NewStore creates a kv Storage with path. -// -// The path must be a URL format 'engine://path?params' like the one for -// tidb.Open() but with the dbname cut off. -// Examples: -// goleveldb://relative/path -// boltdb:///absolute/path -// hbase://zk1,zk2,zk3/hbasetbl?tso=127.0.0.1:1234 -// -// The engine should be registered before creating storage. -func NewStore(path string) (kv.Storage, error) { - return newStoreWithRetry(path, defaultMaxRetries) -} - -func newStoreWithRetry(path string, maxRetries int) (kv.Storage, error) { - url, err := url.Parse(path) - if err != nil { - return nil, errors.Trace(err) - } - - name := strings.ToLower(url.Scheme) - d, ok := stores[name] - if !ok { - return nil, errors.Errorf("invalid uri format, storage %s is not registered", name) - } - - var s kv.Storage - for i := 1; i <= maxRetries; i++ { - s, err = d.Open(path) - if err == nil || !kv.IsRetryableError(err) { - break - } - sleepTime := time.Duration(uint64(retrySleepInterval) * uint64(i)) - log.Warnf("Waiting store to get ready, sleep %v and try again...", sleepTime) - time.Sleep(sleepTime) - } - return s, errors.Trace(err) -} - -var queryStmtTable = []string{"explain", "select", "show", "execute", "describe", "desc", "admin"} - -func trimSQL(sql string) string { - // Trim space. - sql = strings.TrimSpace(sql) - // Trim leading /*comment*/ - // There may be multiple comments - for strings.HasPrefix(sql, "/*") { - i := strings.Index(sql, "*/") - if i != -1 && i < len(sql)+1 { - sql = sql[i+2:] - sql = strings.TrimSpace(sql) - continue - } - break - } - // Trim leading '('. For `(select 1);` is also a query. - return strings.TrimLeft(sql, "( ") -} - -// IsQuery checks if a sql statement is a query statement. -func IsQuery(sql string) bool { - sqlText := strings.ToLower(trimSQL(sql)) - for _, key := range queryStmtTable { - if strings.HasPrefix(sqlText, key) { - return true - } - } - - return false -} - -func init() { - // Register default memory and goleveldb storage - RegisterLocalStore("memory", goleveldb.MemoryDriver{}) - RegisterLocalStore("goleveldb", goleveldb.Driver{}) - RegisterLocalStore("boltdb", boltdb.Driver{}) - RegisterStore("hbase", hbasekv.Driver{}) - - // start pprof handlers - if EnablePprof { - go http.ListenAndServe(PprofAddr, nil) - } -} diff --git a/vendor/github.com/pingcap/tidb/util/auth.go b/vendor/github.com/pingcap/tidb/util/auth.go deleted file mode 100644 index 7b6cf6baf..000000000 --- a/vendor/github.com/pingcap/tidb/util/auth.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package util - -import ( - "crypto/sha1" - "encoding/hex" - - "github.com/juju/errors" -) - -// CalcPassword is the algorithm convert hashed password to auth string. -// See: https://dev.mysql.com/doc/internals/en/secure-password-authentication.html -// SHA1( password ) XOR SHA1( "20-bytes random data from server" SHA1( SHA1( password ) ) ) -func CalcPassword(scramble, sha1pwd []byte) []byte { - if len(sha1pwd) == 0 { - return nil - } - // scrambleHash = SHA1(scramble + SHA1(sha1pwd)) - // inner Hash - hash := Sha1Hash(sha1pwd) - // outer Hash - crypt := sha1.New() - crypt.Write(scramble) - crypt.Write(hash) - scramble = crypt.Sum(nil) - // token = scrambleHash XOR stage1Hash - for i := range scramble { - scramble[i] ^= sha1pwd[i] - } - return scramble -} - -// Sha1Hash is an util function to calculate sha1 hash. -func Sha1Hash(bs []byte) []byte { - crypt := sha1.New() - crypt.Write(bs) - return crypt.Sum(nil) -} - -// EncodePassword converts plaintext password to hashed hex string. -func EncodePassword(pwd string) string { - if len(pwd) == 0 { - return "" - } - hash := Sha1Hash([]byte(pwd)) - return hex.EncodeToString(hash) -} - -// DecodePassword converts hex string password to byte array. -func DecodePassword(pwd string) ([]byte, error) { - x, err := hex.DecodeString(pwd) - if err != nil { - return nil, errors.Trace(err) - } - return x, nil -} diff --git a/vendor/github.com/pingcap/tidb/util/bytes/bytes.go b/vendor/github.com/pingcap/tidb/util/bytes/bytes.go deleted file mode 100644 index 6c3de37a9..000000000 --- a/vendor/github.com/pingcap/tidb/util/bytes/bytes.go +++ /dev/null @@ -1,6 +0,0 @@ -package bytes - -// CloneBytes returns a deep copy of slice b. -func CloneBytes(b []byte) []byte { - return append([]byte(nil), b...) -} diff --git a/vendor/github.com/pingcap/tidb/util/charset/charset.go b/vendor/github.com/pingcap/tidb/util/charset/charset.go deleted file mode 100644 index 719465b25..000000000 --- a/vendor/github.com/pingcap/tidb/util/charset/charset.go +++ /dev/null @@ -1,369 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package charset - -import ( - "strings" - - "github.com/juju/errors" -) - -// Charset is a charset. -// Now we only support MySQL. -type Charset struct { - Name string - DefaultCollation *Collation - Collations map[string]*Collation - Desc string - Maxlen int -} - -// Collation is a collation. -// Now we only support MySQL. -type Collation struct { - ID int - CharsetName string - Name string - IsDefault bool -} - -var charsets = make(map[string]*Charset) - -// All the supported charsets should be in the following table. -var charsetInfos = []*Charset{ - {"utf8", nil, make(map[string]*Collation), "UTF-8 Unicode", 3}, - {"latin1", nil, make(map[string]*Collation), "cp1252 West European", 1}, - {"utf8mb4", nil, make(map[string]*Collation), "UTF-8 Unicode", 4}, - {"ascii", nil, make(map[string]*Collation), "US ASCII", 1}, -} - -func init() { - for _, c := range charsetInfos { - charsets[c.Name] = c - } - for _, c := range collations { - charset, ok := charsets[c.CharsetName] - if !ok { - continue - } - charset.Collations[c.Name] = c - if c.IsDefault { - charset.DefaultCollation = c - } - } -} - -// Desc is a charset description. -type Desc struct { - Name string - Desc string - DefaultCollation string - Maxlen int -} - -// GetAllCharsets gets all charset descriptions in the local charsets. -func GetAllCharsets() []*Desc { - descs := make([]*Desc, 0, len(charsets)) - // The charsetInfos is an array, so the iterate order will be stable. - for _, ci := range charsetInfos { - c, ok := charsets[ci.Name] - if !ok { - continue - } - desc := &Desc{ - Name: c.Name, - DefaultCollation: c.DefaultCollation.Name, - Desc: c.Desc, - Maxlen: c.Maxlen, - } - descs = append(descs, desc) - } - return descs -} - -// ValidCharsetAndCollation checks the charset and the collation validity -// and retuns a boolean. -func ValidCharsetAndCollation(cs string, co string) bool { - // We will use utf8 as a default charset. - if cs == "" { - cs = "utf8" - } - - c, ok := charsets[cs] - if !ok { - return false - } - - if co == "" { - return true - } - _, ok = c.Collations[co] - if !ok { - return false - } - - return true -} - -// GetDefaultCollation returns the default collation for charset -func GetDefaultCollation(charset string) (string, error) { - c, ok := charsets[charset] - if !ok { - return "", errors.Errorf("Unkown charset %s", charset) - } - return c.DefaultCollation.Name, nil -} - -// GetCharsetInfo returns charset and collation for cs as name. -func GetCharsetInfo(cs string) (string, string, error) { - c, ok := charsets[strings.ToLower(cs)] - if !ok { - return "", "", errors.Errorf("Unknown charset %s", cs) - } - return c.Name, c.DefaultCollation.Name, nil -} - -// GetCollations returns a list for all collations. -func GetCollations() []*Collation { - return collations -} - -const ( - // CharsetBin is used for marking binary charset. - CharsetBin = "binary" - // CollationBin is the default collation for CharsetBin. - CollationBin = "binary" -) - -var collations = []*Collation{ - {1, "big5", "big5_chinese_ci", true}, - {2, "latin2", "latin2_czech_cs", false}, - {3, "dec8", "dec8_swedish_ci", true}, - {4, "cp850", "cp850_general_ci", true}, - {5, "latin1", "latin1_german1_ci", false}, - {6, "hp8", "hp8_english_ci", true}, - {7, "koi8r", "koi8r_general_ci", true}, - {8, "latin1", "latin1_swedish_ci", true}, - {9, "latin2", "latin2_general_ci", true}, - {10, "swe7", "swe7_swedish_ci", true}, - {11, "ascii", "ascii_general_ci", true}, - {12, "ujis", "ujis_japanese_ci", true}, - {13, "sjis", "sjis_japanese_ci", true}, - {14, "cp1251", "cp1251_bulgarian_ci", false}, - {15, "latin1", "latin1_danish_ci", false}, - {16, "hebrew", "hebrew_general_ci", true}, - {18, "tis620", "tis620_thai_ci", true}, - {19, "euckr", "euckr_korean_ci", true}, - {20, "latin7", "latin7_estonian_cs", false}, - {21, "latin2", "latin2_hungarian_ci", false}, - {22, "koi8u", "koi8u_general_ci", true}, - {23, "cp1251", "cp1251_ukrainian_ci", false}, - {24, "gb2312", "gb2312_chinese_ci", true}, - {25, "greek", "greek_general_ci", true}, - {26, "cp1250", "cp1250_general_ci", true}, - {27, "latin2", "latin2_croatian_ci", false}, - {28, "gbk", "gbk_chinese_ci", true}, - {29, "cp1257", "cp1257_lithuanian_ci", false}, - {30, "latin5", "latin5_turkish_ci", true}, - {31, "latin1", "latin1_german2_ci", false}, - {32, "armscii8", "armscii8_general_ci", true}, - {33, "utf8", "utf8_general_ci", true}, - {34, "cp1250", "cp1250_czech_cs", false}, - {35, "ucs2", "ucs2_general_ci", true}, - {36, "cp866", "cp866_general_ci", true}, - {37, "keybcs2", "keybcs2_general_ci", true}, - {38, "macce", "macce_general_ci", true}, - {39, "macroman", "macroman_general_ci", true}, - {40, "cp852", "cp852_general_ci", true}, - {41, "latin7", "latin7_general_ci", true}, - {42, "latin7", "latin7_general_cs", false}, - {43, "macce", "macce_bin", false}, - {44, "cp1250", "cp1250_croatian_ci", false}, - {45, "utf8mb4", "utf8mb4_general_ci", true}, - {46, "utf8mb4", "utf8mb4_bin", false}, - {47, "latin1", "latin1_bin", false}, - {48, "latin1", "latin1_general_ci", false}, - {49, "latin1", "latin1_general_cs", false}, - {50, "cp1251", "cp1251_bin", false}, - {51, "cp1251", "cp1251_general_ci", true}, - {52, "cp1251", "cp1251_general_cs", false}, - {53, "macroman", "macroman_bin", false}, - {54, "utf16", "utf16_general_ci", true}, - {55, "utf16", "utf16_bin", false}, - {56, "utf16le", "utf16le_general_ci", true}, - {57, "cp1256", "cp1256_general_ci", true}, - {58, "cp1257", "cp1257_bin", false}, - {59, "cp1257", "cp1257_general_ci", true}, - {60, "utf32", "utf32_general_ci", true}, - {61, "utf32", "utf32_bin", false}, - {62, "utf16le", "utf16le_bin", false}, - {63, "binary", "binary", true}, - {64, "armscii8", "armscii8_bin", false}, - {65, "ascii", "ascii_bin", false}, - {66, "cp1250", "cp1250_bin", false}, - {67, "cp1256", "cp1256_bin", false}, - {68, "cp866", "cp866_bin", false}, - {69, "dec8", "dec8_bin", false}, - {70, "greek", "greek_bin", false}, - {71, "hebrew", "hebrew_bin", false}, - {72, "hp8", "hp8_bin", false}, - {73, "keybcs2", "keybcs2_bin", false}, - {74, "koi8r", "koi8r_bin", false}, - {75, "koi8u", "koi8u_bin", false}, - {77, "latin2", "latin2_bin", false}, - {78, "latin5", "latin5_bin", false}, - {79, "latin7", "latin7_bin", false}, - {80, "cp850", "cp850_bin", false}, - {81, "cp852", "cp852_bin", false}, - {82, "swe7", "swe7_bin", false}, - {83, "utf8", "utf8_bin", false}, - {84, "big5", "big5_bin", false}, - {85, "euckr", "euckr_bin", false}, - {86, "gb2312", "gb2312_bin", false}, - {87, "gbk", "gbk_bin", false}, - {88, "sjis", "sjis_bin", false}, - {89, "tis620", "tis620_bin", false}, - {90, "ucs2", "ucs2_bin", false}, - {91, "ujis", "ujis_bin", false}, - {92, "geostd8", "geostd8_general_ci", true}, - {93, "geostd8", "geostd8_bin", false}, - {94, "latin1", "latin1_spanish_ci", false}, - {95, "cp932", "cp932_japanese_ci", true}, - {96, "cp932", "cp932_bin", false}, - {97, "eucjpms", "eucjpms_japanese_ci", true}, - {98, "eucjpms", "eucjpms_bin", false}, - {99, "cp1250", "cp1250_polish_ci", false}, - {101, "utf16", "utf16_unicode_ci", false}, - {102, "utf16", "utf16_icelandic_ci", false}, - {103, "utf16", "utf16_latvian_ci", false}, - {104, "utf16", "utf16_romanian_ci", false}, - {105, "utf16", "utf16_slovenian_ci", false}, - {106, "utf16", "utf16_polish_ci", false}, - {107, "utf16", "utf16_estonian_ci", false}, - {108, "utf16", "utf16_spanish_ci", false}, - {109, "utf16", "utf16_swedish_ci", false}, - {110, "utf16", "utf16_turkish_ci", false}, - {111, "utf16", "utf16_czech_ci", false}, - {112, "utf16", "utf16_danish_ci", false}, - {113, "utf16", "utf16_lithuanian_ci", false}, - {114, "utf16", "utf16_slovak_ci", false}, - {115, "utf16", "utf16_spanish2_ci", false}, - {116, "utf16", "utf16_roman_ci", false}, - {117, "utf16", "utf16_persian_ci", false}, - {118, "utf16", "utf16_esperanto_ci", false}, - {119, "utf16", "utf16_hungarian_ci", false}, - {120, "utf16", "utf16_sinhala_ci", false}, - {121, "utf16", "utf16_german2_ci", false}, - {122, "utf16", "utf16_croatian_ci", false}, - {123, "utf16", "utf16_unicode_520_ci", false}, - {124, "utf16", "utf16_vietnamese_ci", false}, - {128, "ucs2", "ucs2_unicode_ci", false}, - {129, "ucs2", "ucs2_icelandic_ci", false}, - {130, "ucs2", "ucs2_latvian_ci", false}, - {131, "ucs2", "ucs2_romanian_ci", false}, - {132, "ucs2", "ucs2_slovenian_ci", false}, - {133, "ucs2", "ucs2_polish_ci", false}, - {134, "ucs2", "ucs2_estonian_ci", false}, - {135, "ucs2", "ucs2_spanish_ci", false}, - {136, "ucs2", "ucs2_swedish_ci", false}, - {137, "ucs2", "ucs2_turkish_ci", false}, - {138, "ucs2", "ucs2_czech_ci", false}, - {139, "ucs2", "ucs2_danish_ci", false}, - {140, "ucs2", "ucs2_lithuanian_ci", false}, - {141, "ucs2", "ucs2_slovak_ci", false}, - {142, "ucs2", "ucs2_spanish2_ci", false}, - {143, "ucs2", "ucs2_roman_ci", false}, - {144, "ucs2", "ucs2_persian_ci", false}, - {145, "ucs2", "ucs2_esperanto_ci", false}, - {146, "ucs2", "ucs2_hungarian_ci", false}, - {147, "ucs2", "ucs2_sinhala_ci", false}, - {148, "ucs2", "ucs2_german2_ci", false}, - {149, "ucs2", "ucs2_croatian_ci", false}, - {150, "ucs2", "ucs2_unicode_520_ci", false}, - {151, "ucs2", "ucs2_vietnamese_ci", false}, - {159, "ucs2", "ucs2_general_mysql500_ci", false}, - {160, "utf32", "utf32_unicode_ci", false}, - {161, "utf32", "utf32_icelandic_ci", false}, - {162, "utf32", "utf32_latvian_ci", false}, - {163, "utf32", "utf32_romanian_ci", false}, - {164, "utf32", "utf32_slovenian_ci", false}, - {165, "utf32", "utf32_polish_ci", false}, - {166, "utf32", "utf32_estonian_ci", false}, - {167, "utf32", "utf32_spanish_ci", false}, - {168, "utf32", "utf32_swedish_ci", false}, - {169, "utf32", "utf32_turkish_ci", false}, - {170, "utf32", "utf32_czech_ci", false}, - {171, "utf32", "utf32_danish_ci", false}, - {172, "utf32", "utf32_lithuanian_ci", false}, - {173, "utf32", "utf32_slovak_ci", false}, - {174, "utf32", "utf32_spanish2_ci", false}, - {175, "utf32", "utf32_roman_ci", false}, - {176, "utf32", "utf32_persian_ci", false}, - {177, "utf32", "utf32_esperanto_ci", false}, - {178, "utf32", "utf32_hungarian_ci", false}, - {179, "utf32", "utf32_sinhala_ci", false}, - {180, "utf32", "utf32_german2_ci", false}, - {181, "utf32", "utf32_croatian_ci", false}, - {182, "utf32", "utf32_unicode_520_ci", false}, - {183, "utf32", "utf32_vietnamese_ci", false}, - {192, "utf8", "utf8_unicode_ci", false}, - {193, "utf8", "utf8_icelandic_ci", false}, - {194, "utf8", "utf8_latvian_ci", false}, - {195, "utf8", "utf8_romanian_ci", false}, - {196, "utf8", "utf8_slovenian_ci", false}, - {197, "utf8", "utf8_polish_ci", false}, - {198, "utf8", "utf8_estonian_ci", false}, - {199, "utf8", "utf8_spanish_ci", false}, - {200, "utf8", "utf8_swedish_ci", false}, - {201, "utf8", "utf8_turkish_ci", false}, - {202, "utf8", "utf8_czech_ci", false}, - {203, "utf8", "utf8_danish_ci", false}, - {204, "utf8", "utf8_lithuanian_ci", false}, - {205, "utf8", "utf8_slovak_ci", false}, - {206, "utf8", "utf8_spanish2_ci", false}, - {207, "utf8", "utf8_roman_ci", false}, - {208, "utf8", "utf8_persian_ci", false}, - {209, "utf8", "utf8_esperanto_ci", false}, - {210, "utf8", "utf8_hungarian_ci", false}, - {211, "utf8", "utf8_sinhala_ci", false}, - {212, "utf8", "utf8_german2_ci", false}, - {213, "utf8", "utf8_croatian_ci", false}, - {214, "utf8", "utf8_unicode_520_ci", false}, - {215, "utf8", "utf8_vietnamese_ci", false}, - {223, "utf8", "utf8_general_mysql500_ci", false}, - {224, "utf8mb4", "utf8mb4_unicode_ci", false}, - {225, "utf8mb4", "utf8mb4_icelandic_ci", false}, - {226, "utf8mb4", "utf8mb4_latvian_ci", false}, - {227, "utf8mb4", "utf8mb4_romanian_ci", false}, - {228, "utf8mb4", "utf8mb4_slovenian_ci", false}, - {229, "utf8mb4", "utf8mb4_polish_ci", false}, - {230, "utf8mb4", "utf8mb4_estonian_ci", false}, - {231, "utf8mb4", "utf8mb4_spanish_ci", false}, - {232, "utf8mb4", "utf8mb4_swedish_ci", false}, - {233, "utf8mb4", "utf8mb4_turkish_ci", false}, - {234, "utf8mb4", "utf8mb4_czech_ci", false}, - {235, "utf8mb4", "utf8mb4_danish_ci", false}, - {236, "utf8mb4", "utf8mb4_lithuanian_ci", false}, - {237, "utf8mb4", "utf8mb4_slovak_ci", false}, - {238, "utf8mb4", "utf8mb4_spanish2_ci", false}, - {239, "utf8mb4", "utf8mb4_roman_ci", false}, - {240, "utf8mb4", "utf8mb4_persian_ci", false}, - {241, "utf8mb4", "utf8mb4_esperanto_ci", false}, - {242, "utf8mb4", "utf8mb4_hungarian_ci", false}, - {243, "utf8mb4", "utf8mb4_sinhala_ci", false}, - {244, "utf8mb4", "utf8mb4_german2_ci", false}, - {245, "utf8mb4", "utf8mb4_croatian_ci", false}, - {246, "utf8mb4", "utf8mb4_unicode_520_ci", false}, - {247, "utf8mb4", "utf8mb4_vietnamese_ci", false}, -} diff --git a/vendor/github.com/pingcap/tidb/util/charset/encoding_table.go b/vendor/github.com/pingcap/tidb/util/charset/encoding_table.go deleted file mode 100644 index 93c24d20c..000000000 --- a/vendor/github.com/pingcap/tidb/util/charset/encoding_table.go +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package charset - -import ( - "strings" - - "golang.org/x/text/encoding" - "golang.org/x/text/encoding/charmap" - "golang.org/x/text/encoding/japanese" - "golang.org/x/text/encoding/korean" - "golang.org/x/text/encoding/simplifiedchinese" - "golang.org/x/text/encoding/traditionalchinese" - "golang.org/x/text/encoding/unicode" -) - -// Lookup returns the encoding with the specified label, and its canonical -// name. It returns nil and the empty string if label is not one of the -// standard encodings for HTML. Matching is case-insensitive and ignores -// leading and trailing whitespace. -func Lookup(label string) (e encoding.Encoding, name string) { - label = strings.ToLower(strings.Trim(label, "\t\n\r\f ")) - enc := encodings[label] - return enc.e, enc.name -} - -var encodings = map[string]struct { - e encoding.Encoding - name string -}{ - "unicode-1-1-utf-8": {encoding.Nop, "utf-8"}, - "utf-8": {encoding.Nop, "utf-8"}, - "utf8": {encoding.Nop, "utf-8"}, - "866": {charmap.CodePage866, "ibm866"}, - "cp866": {charmap.CodePage866, "ibm866"}, - "csibm866": {charmap.CodePage866, "ibm866"}, - "ibm866": {charmap.CodePage866, "ibm866"}, - "csisolatin2": {charmap.ISO8859_2, "iso-8859-2"}, - "iso-8859-2": {charmap.ISO8859_2, "iso-8859-2"}, - "iso-ir-101": {charmap.ISO8859_2, "iso-8859-2"}, - "iso8859-2": {charmap.ISO8859_2, "iso-8859-2"}, - "iso88592": {charmap.ISO8859_2, "iso-8859-2"}, - "iso_8859-2": {charmap.ISO8859_2, "iso-8859-2"}, - "iso_8859-2:1987": {charmap.ISO8859_2, "iso-8859-2"}, - "l2": {charmap.ISO8859_2, "iso-8859-2"}, - "latin2": {charmap.ISO8859_2, "iso-8859-2"}, - "csisolatin3": {charmap.ISO8859_3, "iso-8859-3"}, - "iso-8859-3": {charmap.ISO8859_3, "iso-8859-3"}, - "iso-ir-109": {charmap.ISO8859_3, "iso-8859-3"}, - "iso8859-3": {charmap.ISO8859_3, "iso-8859-3"}, - "iso88593": {charmap.ISO8859_3, "iso-8859-3"}, - "iso_8859-3": {charmap.ISO8859_3, "iso-8859-3"}, - "iso_8859-3:1988": {charmap.ISO8859_3, "iso-8859-3"}, - "l3": {charmap.ISO8859_3, "iso-8859-3"}, - "latin3": {charmap.ISO8859_3, "iso-8859-3"}, - "csisolatin4": {charmap.ISO8859_4, "iso-8859-4"}, - "iso-8859-4": {charmap.ISO8859_4, "iso-8859-4"}, - "iso-ir-110": {charmap.ISO8859_4, "iso-8859-4"}, - "iso8859-4": {charmap.ISO8859_4, "iso-8859-4"}, - "iso88594": {charmap.ISO8859_4, "iso-8859-4"}, - "iso_8859-4": {charmap.ISO8859_4, "iso-8859-4"}, - "iso_8859-4:1988": {charmap.ISO8859_4, "iso-8859-4"}, - "l4": {charmap.ISO8859_4, "iso-8859-4"}, - "latin4": {charmap.ISO8859_4, "iso-8859-4"}, - "csisolatincyrillic": {charmap.ISO8859_5, "iso-8859-5"}, - "cyrillic": {charmap.ISO8859_5, "iso-8859-5"}, - "iso-8859-5": {charmap.ISO8859_5, "iso-8859-5"}, - "iso-ir-144": {charmap.ISO8859_5, "iso-8859-5"}, - "iso8859-5": {charmap.ISO8859_5, "iso-8859-5"}, - "iso88595": {charmap.ISO8859_5, "iso-8859-5"}, - "iso_8859-5": {charmap.ISO8859_5, "iso-8859-5"}, - "iso_8859-5:1988": {charmap.ISO8859_5, "iso-8859-5"}, - "arabic": {charmap.ISO8859_6, "iso-8859-6"}, - "asmo-708": {charmap.ISO8859_6, "iso-8859-6"}, - "csiso88596e": {charmap.ISO8859_6, "iso-8859-6"}, - "csiso88596i": {charmap.ISO8859_6, "iso-8859-6"}, - "csisolatinarabic": {charmap.ISO8859_6, "iso-8859-6"}, - "ecma-114": {charmap.ISO8859_6, "iso-8859-6"}, - "iso-8859-6": {charmap.ISO8859_6, "iso-8859-6"}, - "iso-8859-6-e": {charmap.ISO8859_6, "iso-8859-6"}, - "iso-8859-6-i": {charmap.ISO8859_6, "iso-8859-6"}, - "iso-ir-127": {charmap.ISO8859_6, "iso-8859-6"}, - "iso8859-6": {charmap.ISO8859_6, "iso-8859-6"}, - "iso88596": {charmap.ISO8859_6, "iso-8859-6"}, - "iso_8859-6": {charmap.ISO8859_6, "iso-8859-6"}, - "iso_8859-6:1987": {charmap.ISO8859_6, "iso-8859-6"}, - "csisolatingreek": {charmap.ISO8859_7, "iso-8859-7"}, - "ecma-118": {charmap.ISO8859_7, "iso-8859-7"}, - "elot_928": {charmap.ISO8859_7, "iso-8859-7"}, - "greek": {charmap.ISO8859_7, "iso-8859-7"}, - "greek8": {charmap.ISO8859_7, "iso-8859-7"}, - "iso-8859-7": {charmap.ISO8859_7, "iso-8859-7"}, - "iso-ir-126": {charmap.ISO8859_7, "iso-8859-7"}, - "iso8859-7": {charmap.ISO8859_7, "iso-8859-7"}, - "iso88597": {charmap.ISO8859_7, "iso-8859-7"}, - "iso_8859-7": {charmap.ISO8859_7, "iso-8859-7"}, - "iso_8859-7:1987": {charmap.ISO8859_7, "iso-8859-7"}, - "sun_eu_greek": {charmap.ISO8859_7, "iso-8859-7"}, - "csiso88598e": {charmap.ISO8859_8, "iso-8859-8"}, - "csisolatinhebrew": {charmap.ISO8859_8, "iso-8859-8"}, - "hebrew": {charmap.ISO8859_8, "iso-8859-8"}, - "iso-8859-8": {charmap.ISO8859_8, "iso-8859-8"}, - "iso-8859-8-e": {charmap.ISO8859_8, "iso-8859-8"}, - "iso-ir-138": {charmap.ISO8859_8, "iso-8859-8"}, - "iso8859-8": {charmap.ISO8859_8, "iso-8859-8"}, - "iso88598": {charmap.ISO8859_8, "iso-8859-8"}, - "iso_8859-8": {charmap.ISO8859_8, "iso-8859-8"}, - "iso_8859-8:1988": {charmap.ISO8859_8, "iso-8859-8"}, - "visual": {charmap.ISO8859_8, "iso-8859-8"}, - "csiso88598i": {charmap.ISO8859_8, "iso-8859-8-i"}, - "iso-8859-8-i": {charmap.ISO8859_8, "iso-8859-8-i"}, - "logical": {charmap.ISO8859_8, "iso-8859-8-i"}, - "csisolatin6": {charmap.ISO8859_10, "iso-8859-10"}, - "iso-8859-10": {charmap.ISO8859_10, "iso-8859-10"}, - "iso-ir-157": {charmap.ISO8859_10, "iso-8859-10"}, - "iso8859-10": {charmap.ISO8859_10, "iso-8859-10"}, - "iso885910": {charmap.ISO8859_10, "iso-8859-10"}, - "l6": {charmap.ISO8859_10, "iso-8859-10"}, - "latin6": {charmap.ISO8859_10, "iso-8859-10"}, - "iso-8859-13": {charmap.ISO8859_13, "iso-8859-13"}, - "iso8859-13": {charmap.ISO8859_13, "iso-8859-13"}, - "iso885913": {charmap.ISO8859_13, "iso-8859-13"}, - "iso-8859-14": {charmap.ISO8859_14, "iso-8859-14"}, - "iso8859-14": {charmap.ISO8859_14, "iso-8859-14"}, - "iso885914": {charmap.ISO8859_14, "iso-8859-14"}, - "csisolatin9": {charmap.ISO8859_15, "iso-8859-15"}, - "iso-8859-15": {charmap.ISO8859_15, "iso-8859-15"}, - "iso8859-15": {charmap.ISO8859_15, "iso-8859-15"}, - "iso885915": {charmap.ISO8859_15, "iso-8859-15"}, - "iso_8859-15": {charmap.ISO8859_15, "iso-8859-15"}, - "l9": {charmap.ISO8859_15, "iso-8859-15"}, - "iso-8859-16": {charmap.ISO8859_16, "iso-8859-16"}, - "cskoi8r": {charmap.KOI8R, "koi8-r"}, - "koi": {charmap.KOI8R, "koi8-r"}, - "koi8": {charmap.KOI8R, "koi8-r"}, - "koi8-r": {charmap.KOI8R, "koi8-r"}, - "koi8_r": {charmap.KOI8R, "koi8-r"}, - "koi8-u": {charmap.KOI8U, "koi8-u"}, - "csmacintosh": {charmap.Macintosh, "macintosh"}, - "mac": {charmap.Macintosh, "macintosh"}, - "macintosh": {charmap.Macintosh, "macintosh"}, - "x-mac-roman": {charmap.Macintosh, "macintosh"}, - "dos-874": {charmap.Windows874, "windows-874"}, - "iso-8859-11": {charmap.Windows874, "windows-874"}, - "iso8859-11": {charmap.Windows874, "windows-874"}, - "iso885911": {charmap.Windows874, "windows-874"}, - "tis-620": {charmap.Windows874, "windows-874"}, - "windows-874": {charmap.Windows874, "windows-874"}, - "cp1250": {charmap.Windows1250, "windows-1250"}, - "windows-1250": {charmap.Windows1250, "windows-1250"}, - "x-cp1250": {charmap.Windows1250, "windows-1250"}, - "cp1251": {charmap.Windows1251, "windows-1251"}, - "windows-1251": {charmap.Windows1251, "windows-1251"}, - "x-cp1251": {charmap.Windows1251, "windows-1251"}, - "ansi_x3.4-1968": {charmap.Windows1252, "windows-1252"}, - "ascii": {charmap.Windows1252, "windows-1252"}, - "cp1252": {charmap.Windows1252, "windows-1252"}, - "cp819": {charmap.Windows1252, "windows-1252"}, - "csisolatin1": {charmap.Windows1252, "windows-1252"}, - "ibm819": {charmap.Windows1252, "windows-1252"}, - "iso-8859-1": {charmap.Windows1252, "windows-1252"}, - "iso-ir-100": {charmap.Windows1252, "windows-1252"}, - "iso8859-1": {charmap.Windows1252, "windows-1252"}, - "iso88591": {charmap.Windows1252, "windows-1252"}, - "iso_8859-1": {charmap.Windows1252, "windows-1252"}, - "iso_8859-1:1987": {charmap.Windows1252, "windows-1252"}, - "l1": {charmap.Windows1252, "windows-1252"}, - "latin1": {charmap.Windows1252, "windows-1252"}, - "us-ascii": {charmap.Windows1252, "windows-1252"}, - "windows-1252": {charmap.Windows1252, "windows-1252"}, - "x-cp1252": {charmap.Windows1252, "windows-1252"}, - "cp1253": {charmap.Windows1253, "windows-1253"}, - "windows-1253": {charmap.Windows1253, "windows-1253"}, - "x-cp1253": {charmap.Windows1253, "windows-1253"}, - "cp1254": {charmap.Windows1254, "windows-1254"}, - "csisolatin5": {charmap.Windows1254, "windows-1254"}, - "iso-8859-9": {charmap.Windows1254, "windows-1254"}, - "iso-ir-148": {charmap.Windows1254, "windows-1254"}, - "iso8859-9": {charmap.Windows1254, "windows-1254"}, - "iso88599": {charmap.Windows1254, "windows-1254"}, - "iso_8859-9": {charmap.Windows1254, "windows-1254"}, - "iso_8859-9:1989": {charmap.Windows1254, "windows-1254"}, - "l5": {charmap.Windows1254, "windows-1254"}, - "latin5": {charmap.Windows1254, "windows-1254"}, - "windows-1254": {charmap.Windows1254, "windows-1254"}, - "x-cp1254": {charmap.Windows1254, "windows-1254"}, - "cp1255": {charmap.Windows1255, "windows-1255"}, - "windows-1255": {charmap.Windows1255, "windows-1255"}, - "x-cp1255": {charmap.Windows1255, "windows-1255"}, - "cp1256": {charmap.Windows1256, "windows-1256"}, - "windows-1256": {charmap.Windows1256, "windows-1256"}, - "x-cp1256": {charmap.Windows1256, "windows-1256"}, - "cp1257": {charmap.Windows1257, "windows-1257"}, - "windows-1257": {charmap.Windows1257, "windows-1257"}, - "x-cp1257": {charmap.Windows1257, "windows-1257"}, - "cp1258": {charmap.Windows1258, "windows-1258"}, - "windows-1258": {charmap.Windows1258, "windows-1258"}, - "x-cp1258": {charmap.Windows1258, "windows-1258"}, - "x-mac-cyrillic": {charmap.MacintoshCyrillic, "x-mac-cyrillic"}, - "x-mac-ukrainian": {charmap.MacintoshCyrillic, "x-mac-cyrillic"}, - "chinese": {simplifiedchinese.GBK, "gbk"}, - "csgb2312": {simplifiedchinese.GBK, "gbk"}, - "csiso58gb231280": {simplifiedchinese.GBK, "gbk"}, - "gb2312": {simplifiedchinese.GBK, "gbk"}, - "gb_2312": {simplifiedchinese.GBK, "gbk"}, - "gb_2312-80": {simplifiedchinese.GBK, "gbk"}, - "gbk": {simplifiedchinese.GBK, "gbk"}, - "iso-ir-58": {simplifiedchinese.GBK, "gbk"}, - "x-gbk": {simplifiedchinese.GBK, "gbk"}, - "gb18030": {simplifiedchinese.GB18030, "gb18030"}, - "hz-gb-2312": {simplifiedchinese.HZGB2312, "hz-gb-2312"}, - "big5": {traditionalchinese.Big5, "big5"}, - "big5-hkscs": {traditionalchinese.Big5, "big5"}, - "cn-big5": {traditionalchinese.Big5, "big5"}, - "csbig5": {traditionalchinese.Big5, "big5"}, - "x-x-big5": {traditionalchinese.Big5, "big5"}, - "cseucpkdfmtjapanese": {japanese.EUCJP, "euc-jp"}, - "euc-jp": {japanese.EUCJP, "euc-jp"}, - "x-euc-jp": {japanese.EUCJP, "euc-jp"}, - "csiso2022jp": {japanese.ISO2022JP, "iso-2022-jp"}, - "iso-2022-jp": {japanese.ISO2022JP, "iso-2022-jp"}, - "csshiftjis": {japanese.ShiftJIS, "shift_jis"}, - "ms_kanji": {japanese.ShiftJIS, "shift_jis"}, - "shift-jis": {japanese.ShiftJIS, "shift_jis"}, - "shift_jis": {japanese.ShiftJIS, "shift_jis"}, - "sjis": {japanese.ShiftJIS, "shift_jis"}, - "windows-31j": {japanese.ShiftJIS, "shift_jis"}, - "x-sjis": {japanese.ShiftJIS, "shift_jis"}, - "cseuckr": {korean.EUCKR, "euc-kr"}, - "csksc56011987": {korean.EUCKR, "euc-kr"}, - "euc-kr": {korean.EUCKR, "euc-kr"}, - "iso-ir-149": {korean.EUCKR, "euc-kr"}, - "korean": {korean.EUCKR, "euc-kr"}, - "ks_c_5601-1987": {korean.EUCKR, "euc-kr"}, - "ks_c_5601-1989": {korean.EUCKR, "euc-kr"}, - "ksc5601": {korean.EUCKR, "euc-kr"}, - "ksc_5601": {korean.EUCKR, "euc-kr"}, - "windows-949": {korean.EUCKR, "euc-kr"}, - "csiso2022kr": {encoding.Replacement, "replacement"}, - "iso-2022-kr": {encoding.Replacement, "replacement"}, - "iso-2022-cn": {encoding.Replacement, "replacement"}, - "iso-2022-cn-ext": {encoding.Replacement, "replacement"}, - "utf-16be": {unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), "utf-16be"}, - "utf-16": {unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), "utf-16le"}, - "utf-16le": {unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), "utf-16le"}, - "x-user-defined": {charmap.XUserDefined, "x-user-defined"}, -} diff --git a/vendor/github.com/pingcap/tidb/util/codec/bytes.go b/vendor/github.com/pingcap/tidb/util/codec/bytes.go deleted file mode 100644 index 068614e8e..000000000 --- a/vendor/github.com/pingcap/tidb/util/codec/bytes.go +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package codec - -import ( - "bytes" - "encoding/binary" - "runtime" - "unsafe" - - "github.com/juju/errors" -) - -const ( - encGroupSize = 8 - encMarker = byte(0xFF) - encPad = byte(0x0) -) - -var ( - pads = make([]byte, encGroupSize) - encPads = []byte{encPad} -) - -// EncodeBytes guarantees the encoded value is in ascending order for comparison, -// encoding with the following rule: -// [group1][marker1]...[groupN][markerN] -// group is 8 bytes slice which is padding with 0. -// marker is `0xFF - padding 0 count` -// For example: -// [] -> [0, 0, 0, 0, 0, 0, 0, 0, 247] -// [1, 2, 3] -> [1, 2, 3, 0, 0, 0, 0, 0, 250] -// [1, 2, 3, 0] -> [1, 2, 3, 0, 0, 0, 0, 0, 251] -// [1, 2, 3, 4, 5, 6, 7, 8] -> [1, 2, 3, 4, 5, 6, 7, 8, 255, 0, 0, 0, 0, 0, 0, 0, 0, 247] -// Refer: https://github.com/facebook/mysql-5.6/wiki/MyRocks-record-format#memcomparable-format -func EncodeBytes(b []byte, data []byte) []byte { - // Allocate more space to avoid unnecessary slice growing. - // Assume that the byte slice size is about `(len(data) / encGroupSize + 1) * (encGroupSize + 1)` bytes, - // that is `(len(data) / 8 + 1) * 9` in our implement. - dLen := len(data) - reallocSize := (dLen/encGroupSize + 1) * (encGroupSize + 1) - result := reallocBytes(b, reallocSize) - for idx := 0; idx <= dLen; idx += encGroupSize { - remain := dLen - idx - padCount := 0 - if remain >= encGroupSize { - result = append(result, data[idx:idx+encGroupSize]...) - } else { - padCount = encGroupSize - remain - result = append(result, data[idx:]...) - result = append(result, pads[:padCount]...) - } - - marker := encMarker - byte(padCount) - result = append(result, marker) - } - - return result -} - -func decodeBytes(b []byte, reverse bool) ([]byte, []byte, error) { - data := make([]byte, 0, len(b)) - for { - if len(b) < encGroupSize+1 { - return nil, nil, errors.New("insufficient bytes to decode value") - } - - groupBytes := b[:encGroupSize+1] - if reverse { - reverseBytes(groupBytes) - } - - group := groupBytes[:encGroupSize] - marker := groupBytes[encGroupSize] - - // Check validity of marker. - padCount := encMarker - marker - realGroupSize := encGroupSize - padCount - if padCount > encGroupSize { - return nil, nil, errors.Errorf("invalid marker byte, group bytes %q", groupBytes) - } - - data = append(data, group[:realGroupSize]...) - b = b[encGroupSize+1:] - - if marker != encMarker { - // Check validity of padding bytes. - if bytes.Count(group[realGroupSize:], encPads) != int(padCount) { - return nil, nil, errors.Errorf("invalid padding byte, group bytes %q", groupBytes) - } - - break - } - } - - return b, data, nil -} - -// DecodeBytes decodes bytes which is encoded by EncodeBytes before, -// returns the leftover bytes and decoded value if no error. -func DecodeBytes(b []byte) ([]byte, []byte, error) { - return decodeBytes(b, false) -} - -// EncodeBytesDesc first encodes bytes using EncodeBytes, then bitwise reverses -// encoded value to guarantee the encoded value is in descending order for comparison. -func EncodeBytesDesc(b []byte, data []byte) []byte { - n := len(b) - b = EncodeBytes(b, data) - reverseBytes(b[n:]) - return b -} - -// DecodeBytesDesc decodes bytes which is encoded by EncodeBytesDesc before, -// returns the leftover bytes and decoded value if no error. -func DecodeBytesDesc(b []byte) ([]byte, []byte, error) { - return decodeBytes(b, true) -} - -// EncodeCompactBytes joins bytes with its length into a byte slice. It is more -// efficient in both space and time compare to EncodeBytes. Note that the encoded -// result is not memcomparable. -func EncodeCompactBytes(b []byte, data []byte) []byte { - b = reallocBytes(b, binary.MaxVarintLen64+len(data)) - b = EncodeVarint(b, int64(len(data))) - return append(b, data...) -} - -// DecodeCompactBytes decodes bytes which is encoded by EncodeCompactBytes before. -func DecodeCompactBytes(b []byte) ([]byte, []byte, error) { - b, n, err := DecodeVarint(b) - if err != nil { - return nil, nil, errors.Trace(err) - } - if int64(len(b)) < n { - return nil, nil, errors.Errorf("insufficient bytes to decode value, expected length: %v", n) - } - return b[n:], b[:n], nil -} - -// See https://golang.org/src/crypto/cipher/xor.go -const wordSize = int(unsafe.Sizeof(uintptr(0))) -const supportsUnaligned = runtime.GOARCH == "386" || runtime.GOARCH == "amd64" - -func fastReverseBytes(b []byte) { - n := len(b) - w := n / wordSize - if w > 0 { - bw := *(*[]uintptr)(unsafe.Pointer(&b)) - for i := 0; i < w; i++ { - bw[i] = ^bw[i] - } - } - - for i := w * wordSize; i < n; i++ { - b[i] = ^b[i] - } -} - -func safeReverseBytes(b []byte) { - for i := range b { - b[i] = ^b[i] - } -} - -func reverseBytes(b []byte) { - if supportsUnaligned { - fastReverseBytes(b) - return - } - - safeReverseBytes(b) -} - -// like realloc. -func reallocBytes(b []byte, n int) []byte { - newSize := len(b) + n - if cap(b) < newSize { - bs := make([]byte, len(b), newSize) - copy(bs, b) - return bs - } - - // slice b has capability to store n bytes - return b -} diff --git a/vendor/github.com/pingcap/tidb/util/codec/codec.go b/vendor/github.com/pingcap/tidb/util/codec/codec.go deleted file mode 100644 index bf100fc18..000000000 --- a/vendor/github.com/pingcap/tidb/util/codec/codec.go +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package codec - -import ( - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/types" -) - -const ( - nilFlag byte = iota - bytesFlag - compactBytesFlag - intFlag - uintFlag - floatFlag - decimalFlag - durationFlag -) - -func encode(b []byte, vals []types.Datum, comparable bool) ([]byte, error) { - for _, val := range vals { - switch val.Kind() { - case types.KindInt64: - b = append(b, intFlag) - b = EncodeInt(b, val.GetInt64()) - case types.KindUint64: - b = append(b, uintFlag) - b = EncodeUint(b, val.GetUint64()) - case types.KindFloat32, types.KindFloat64: - b = append(b, floatFlag) - b = EncodeFloat(b, val.GetFloat64()) - case types.KindString, types.KindBytes: - b = encodeBytes(b, val.GetBytes(), comparable) - case types.KindMysqlTime: - b = encodeBytes(b, []byte(val.GetMysqlTime().String()), comparable) - case types.KindMysqlDuration: - // duration may have negative value, so we cannot use String to encode directly. - b = append(b, durationFlag) - b = EncodeInt(b, int64(val.GetMysqlDuration().Duration)) - case types.KindMysqlDecimal: - b = append(b, decimalFlag) - b = EncodeDecimal(b, val.GetMysqlDecimal()) - case types.KindMysqlHex: - b = append(b, intFlag) - b = EncodeInt(b, int64(val.GetMysqlHex().ToNumber())) - case types.KindMysqlBit: - b = append(b, uintFlag) - b = EncodeUint(b, uint64(val.GetMysqlBit().ToNumber())) - case types.KindMysqlEnum: - b = append(b, uintFlag) - b = EncodeUint(b, uint64(val.GetMysqlEnum().ToNumber())) - case types.KindMysqlSet: - b = append(b, uintFlag) - b = EncodeUint(b, uint64(val.GetMysqlSet().ToNumber())) - case types.KindNull: - b = append(b, nilFlag) - default: - return nil, errors.Errorf("unsupport encode type %d", val.Kind()) - } - } - - return b, nil -} - -func encodeBytes(b []byte, v []byte, comparable bool) []byte { - if comparable { - b = append(b, bytesFlag) - b = EncodeBytes(b, v) - } else { - b = append(b, compactBytesFlag) - b = EncodeCompactBytes(b, v) - } - return b -} - -// EncodeKey appends the encoded values to byte slice b, returns the appended -// slice. It guarantees the encoded value is in ascending order for comparison. -func EncodeKey(b []byte, v ...types.Datum) ([]byte, error) { - return encode(b, v, true) -} - -// EncodeValue appends the encoded values to byte slice b, returning the appended -// slice. It does not guarantee the order for comparison. -func EncodeValue(b []byte, v ...types.Datum) ([]byte, error) { - return encode(b, v, false) -} - -// Decode decodes values from a byte slice generated with EncodeKey or EncodeValue -// before. -func Decode(b []byte) ([]types.Datum, error) { - if len(b) < 1 { - return nil, errors.New("invalid encoded key") - } - - var ( - flag byte - err error - values = make([]types.Datum, 0, 1) - ) - - for len(b) > 0 { - flag = b[0] - b = b[1:] - var d types.Datum - switch flag { - case intFlag: - var v int64 - b, v, err = DecodeInt(b) - d.SetInt64(v) - case uintFlag: - var v uint64 - b, v, err = DecodeUint(b) - d.SetUint64(v) - case floatFlag: - var v float64 - b, v, err = DecodeFloat(b) - d.SetFloat64(v) - case bytesFlag: - var v []byte - b, v, err = DecodeBytes(b) - d.SetBytes(v) - case compactBytesFlag: - var v []byte - b, v, err = DecodeCompactBytes(b) - d.SetBytes(v) - case decimalFlag: - var v mysql.Decimal - b, v, err = DecodeDecimal(b) - d.SetValue(v) - case durationFlag: - var r int64 - b, r, err = DecodeInt(b) - if err == nil { - // use max fsp, let outer to do round manually. - v := mysql.Duration{Duration: time.Duration(r), Fsp: mysql.MaxFsp} - d.SetValue(v) - } - case nilFlag: - default: - return nil, errors.Errorf("invalid encoded key flag %v", flag) - } - if err != nil { - return nil, errors.Trace(err) - } - - values = append(values, d) - } - - return values, nil -} diff --git a/vendor/github.com/pingcap/tidb/util/codec/decimal.go b/vendor/github.com/pingcap/tidb/util/codec/decimal.go deleted file mode 100644 index fb0e2fd1f..000000000 --- a/vendor/github.com/pingcap/tidb/util/codec/decimal.go +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package codec - -import ( - "bytes" - "math/big" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" -) - -const ( - negativeSign int64 = 8 - zeroSign int64 = 16 - positiveSign int64 = 24 -) - -func codecSign(value int64) int64 { - if value < 0 { - return negativeSign - } - - return positiveSign -} - -func encodeExp(expValue int64, expSign int64, valSign int64) int64 { - if expSign == negativeSign { - expValue = -expValue - } - - if expSign != valSign { - expValue = ^expValue - } - - return expValue -} - -func decodeExp(expValue int64, expSign int64, valSign int64) int64 { - if expSign != valSign { - expValue = ^expValue - } - - if expSign == negativeSign { - expValue = -expValue - } - - return expValue -} - -func codecValue(value []byte, valSign int64) { - if valSign == negativeSign { - reverseBytes(value) - } -} - -// EncodeDecimal encodes a decimal d into a byte slice which can be sorted lexicographically later. -// EncodeDecimal guarantees that the encoded value is in ascending order for comparison. -// Decimal encoding: -// Byte -> value sign -// Byte -> exp sign -// EncodeInt -> exp value -// EncodeBytes -> abs value bytes -func EncodeDecimal(b []byte, d mysql.Decimal) []byte { - if d.Equals(mysql.ZeroDecimal) { - return append(b, byte(zeroSign)) - } - - v := d.BigIntValue() - valSign := codecSign(int64(v.Sign())) - - absVal := new(big.Int) - absVal.Abs(v) - - value := []byte(absVal.String()) - - // Trim right side "0", like "12.34000" -> "12.34" or "0.1234000" -> "0.1234". - if d.Exponent() != 0 { - value = bytes.TrimRight(value, "0") - } - - // Get exp and value, format is "value":"exp". - // like "12.34" -> "0.1234":"2". - // like "-0.01234" -> "-0.1234":"-1". - exp := int64(0) - div := big.NewInt(10) - for ; ; exp++ { - if absVal.Sign() == 0 { - break - } - absVal = absVal.Div(absVal, div) - } - - expVal := exp + int64(d.Exponent()) - expSign := codecSign(expVal) - - // For negtive exp, do bit reverse for exp. - // For negtive decimal, do bit reverse for exp and value. - expVal = encodeExp(expVal, expSign, valSign) - codecValue(value, valSign) - - b = append(b, byte(valSign)) - b = append(b, byte(expSign)) - b = EncodeInt(b, expVal) - b = EncodeBytes(b, value) - return b -} - -// DecodeDecimal decodes bytes to decimal. -// DecodeFloat decodes a float from a byte slice -// Decimal decoding: -// Byte -> value sign -// Byte -> exp sign -// DecodeInt -> exp value -// DecodeBytes -> abs value bytes -func DecodeDecimal(b []byte) ([]byte, mysql.Decimal, error) { - var ( - r = b - d mysql.Decimal - err error - ) - - // Decode value sign. - valSign := int64(r[0]) - r = r[1:] - if valSign == zeroSign { - d, err = mysql.ParseDecimal("0") - return r, d, errors.Trace(err) - } - - // Decode exp sign. - expSign := int64(r[0]) - r = r[1:] - - // Decode exp value. - expVal := int64(0) - r, expVal, err = DecodeInt(r) - if err != nil { - return r, d, errors.Trace(err) - } - expVal = decodeExp(expVal, expSign, valSign) - - // Decode abs value bytes. - value := []byte{} - r, value, err = DecodeBytes(r) - if err != nil { - return r, d, errors.Trace(err) - } - codecValue(value, valSign) - - // Generate decimal string value. - var decimalStr []byte - if valSign == negativeSign { - decimalStr = append(decimalStr, '-') - } - - if expVal <= 0 { - // Like decimal "0.1234" or "0.01234". - decimalStr = append(decimalStr, '0') - decimalStr = append(decimalStr, '.') - decimalStr = append(decimalStr, bytes.Repeat([]byte{'0'}, -int(expVal))...) - decimalStr = append(decimalStr, value...) - } else { - // Like decimal "12.34". - decimalStr = append(decimalStr, value[:expVal]...) - decimalStr = append(decimalStr, '.') - decimalStr = append(decimalStr, value[expVal:]...) - } - - d, err = mysql.ParseDecimal(string(decimalStr)) - return r, d, errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/util/codec/float.go b/vendor/github.com/pingcap/tidb/util/codec/float.go deleted file mode 100644 index c2107f166..000000000 --- a/vendor/github.com/pingcap/tidb/util/codec/float.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package codec - -import ( - "math" - - "github.com/juju/errors" -) - -func encodeFloatToCmpUint64(f float64) uint64 { - u := math.Float64bits(f) - if f >= 0 { - u |= signMask - } else { - u = ^u - } - return u -} - -func decodeCmpUintToFloat(u uint64) float64 { - if u&signMask > 0 { - u &= ^signMask - } else { - u = ^u - } - return math.Float64frombits(u) -} - -// EncodeFloat encodes a float v into a byte slice which can be sorted lexicographically later. -// EncodeFloat guarantees that the encoded value is in ascending order for comparison. -func EncodeFloat(b []byte, v float64) []byte { - u := encodeFloatToCmpUint64(v) - return EncodeUint(b, u) -} - -// DecodeFloat decodes a float from a byte slice generated with EncodeFloat before. -func DecodeFloat(b []byte) ([]byte, float64, error) { - b, u, err := DecodeUint(b) - return b, decodeCmpUintToFloat(u), errors.Trace(err) -} - -// EncodeFloatDesc encodes a float v into a byte slice which can be sorted lexicographically later. -// EncodeFloatDesc guarantees that the encoded value is in descending order for comparison. -func EncodeFloatDesc(b []byte, v float64) []byte { - u := encodeFloatToCmpUint64(v) - return EncodeUintDesc(b, u) -} - -// DecodeFloatDesc decodes a float from a byte slice generated with EncodeFloatDesc before. -func DecodeFloatDesc(b []byte) ([]byte, float64, error) { - b, u, err := DecodeUintDesc(b) - return b, decodeCmpUintToFloat(u), errors.Trace(err) -} diff --git a/vendor/github.com/pingcap/tidb/util/codec/number.go b/vendor/github.com/pingcap/tidb/util/codec/number.go deleted file mode 100644 index cad729c31..000000000 --- a/vendor/github.com/pingcap/tidb/util/codec/number.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package codec - -import ( - "encoding/binary" - - "github.com/juju/errors" -) - -const signMask uint64 = 0x8000000000000000 - -func encodeIntToCmpUint(v int64) uint64 { - u := uint64(v) - if u&signMask > 0 { - u &= ^signMask - } else { - u |= signMask - } - - return u -} - -func decodeCmpUintToInt(u uint64) int64 { - if u&signMask > 0 { - u &= ^signMask - } else { - u |= signMask - } - - return int64(u) -} - -// EncodeInt appends the encoded value to slice b and returns the appended slice. -// EncodeInt guarantees that the encoded value is in ascending order for comparison. -func EncodeInt(b []byte, v int64) []byte { - var data [8]byte - u := encodeIntToCmpUint(v) - binary.BigEndian.PutUint64(data[:], u) - return append(b, data[:]...) -} - -// EncodeIntDesc appends the encoded value to slice b and returns the appended slice. -// EncodeIntDesc guarantees that the encoded value is in descending order for comparison. -func EncodeIntDesc(b []byte, v int64) []byte { - var data [8]byte - u := encodeIntToCmpUint(v) - binary.BigEndian.PutUint64(data[:], ^u) - return append(b, data[:]...) -} - -// DecodeInt decodes value encoded by EncodeInt before. -// It returns the leftover un-decoded slice, decoded value if no error. -func DecodeInt(b []byte) ([]byte, int64, error) { - if len(b) < 8 { - return nil, 0, errors.New("insufficient bytes to decode value") - } - - u := binary.BigEndian.Uint64(b[:8]) - v := decodeCmpUintToInt(u) - b = b[8:] - return b, v, nil -} - -// DecodeIntDesc decodes value encoded by EncodeInt before. -// It returns the leftover un-decoded slice, decoded value if no error. -func DecodeIntDesc(b []byte) ([]byte, int64, error) { - if len(b) < 8 { - return nil, 0, errors.New("insufficient bytes to decode value") - } - - u := binary.BigEndian.Uint64(b[:8]) - v := decodeCmpUintToInt(^u) - b = b[8:] - return b, v, nil -} - -// EncodeUint appends the encoded value to slice b and returns the appended slice. -// EncodeUint guarantees that the encoded value is in ascending order for comparison. -func EncodeUint(b []byte, v uint64) []byte { - var data [8]byte - binary.BigEndian.PutUint64(data[:], v) - return append(b, data[:]...) -} - -// EncodeUintDesc appends the encoded value to slice b and returns the appended slice. -// EncodeUintDesc guarantees that the encoded value is in descending order for comparison. -func EncodeUintDesc(b []byte, v uint64) []byte { - var data [8]byte - binary.BigEndian.PutUint64(data[:], ^v) - return append(b, data[:]...) -} - -// DecodeUint decodes value encoded by EncodeUint before. -// It returns the leftover un-decoded slice, decoded value if no error. -func DecodeUint(b []byte) ([]byte, uint64, error) { - if len(b) < 8 { - return nil, 0, errors.New("insufficient bytes to decode value") - } - - v := binary.BigEndian.Uint64(b[:8]) - b = b[8:] - return b, v, nil -} - -// DecodeUintDesc decodes value encoded by EncodeInt before. -// It returns the leftover un-decoded slice, decoded value if no error. -func DecodeUintDesc(b []byte) ([]byte, uint64, error) { - if len(b) < 8 { - return nil, 0, errors.New("insufficient bytes to decode value") - } - - data := b[:8] - v := binary.BigEndian.Uint64(data) - b = b[8:] - return b, ^v, nil -} - -// EncodeVarint appends the encoded value to slice b and returns the appended slice. -// Note that the encoded result is not memcomparable. -func EncodeVarint(b []byte, v int64) []byte { - var data [binary.MaxVarintLen64]byte - n := binary.PutVarint(data[:], v) - return append(b, data[:n]...) -} - -// DecodeVarint decodes value encoded by EncodeVarint before. -// It returns the leftover un-decoded slice, decoded value if no error. -func DecodeVarint(b []byte) ([]byte, int64, error) { - v, n := binary.Varint(b) - if n > 0 { - return b[n:], v, nil - } - if n < 0 { - return nil, 0, errors.New("value larger than 64 bits") - } - return nil, 0, errors.New("insufficient bytes to decode value") -} - -// EncodeUvarint appends the encoded value to slice b and returns the appended slice. -// Note that the encoded result is not memcomparable. -func EncodeUvarint(b []byte, v uint64) []byte { - var data [binary.MaxVarintLen64]byte - n := binary.PutUvarint(data[:], v) - return append(b, data[:n]...) -} - -// DecodeUvarint decodes value encoded by EncodeUvarint before. -// It returns the leftover un-decoded slice, decoded value if no error. -func DecodeUvarint(b []byte) ([]byte, uint64, error) { - v, n := binary.Uvarint(b) - if n > 0 { - return b[n:], v, nil - } - if n < 0 { - return nil, 0, errors.New("value larger than 64 bits") - } - return nil, 0, errors.New("insufficient bytes to decode value") -} diff --git a/vendor/github.com/pingcap/tidb/util/distinct/distinct.go b/vendor/github.com/pingcap/tidb/util/distinct/distinct.go deleted file mode 100644 index 84885b753..000000000 --- a/vendor/github.com/pingcap/tidb/util/distinct/distinct.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package distinct - -import ( - "github.com/juju/errors" - "github.com/pingcap/tidb/util/codec" - "github.com/pingcap/tidb/util/types" -) - -// CreateDistinctChecker creates a new distinct checker. -func CreateDistinctChecker() *Checker { - return &Checker{ - existingKeys: make(map[string]bool), - } -} - -// Checker stores existing keys and checks if given data is distinct. -type Checker struct { - existingKeys map[string]bool -} - -// Check checks if values is distinct. -func (d *Checker) Check(values []interface{}) (bool, error) { - bs, err := codec.EncodeValue([]byte{}, types.MakeDatums(values...)...) - if err != nil { - return false, errors.Trace(err) - } - key := string(bs) - _, ok := d.existingKeys[key] - if ok { - return false, nil - } - d.existingKeys[key] = true - return true, nil -} diff --git a/vendor/github.com/pingcap/tidb/util/hack/hack.go b/vendor/github.com/pingcap/tidb/util/hack/hack.go deleted file mode 100644 index d792c9e5b..000000000 --- a/vendor/github.com/pingcap/tidb/util/hack/hack.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package hack - -import ( - "reflect" - "unsafe" -) - -// String converts slice to string without copy. -// Use at your own risk. -func String(b []byte) (s string) { - if len(b) == 0 { - return "" - } - pbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - pstring := (*reflect.StringHeader)(unsafe.Pointer(&s)) - pstring.Data = pbytes.Data - pstring.Len = pbytes.Len - return -} - -// Slice converts string to slice without copy. -// Use at your own risk. -func Slice(s string) (b []byte) { - pbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b)) - pstring := (*reflect.StringHeader)(unsafe.Pointer(&s)) - pbytes.Data = pstring.Data - pbytes.Len = pstring.Len - pbytes.Cap = pstring.Len - return -} diff --git a/vendor/github.com/pingcap/tidb/util/prefix_helper.go b/vendor/github.com/pingcap/tidb/util/prefix_helper.go deleted file mode 100644 index da91c8736..000000000 --- a/vendor/github.com/pingcap/tidb/util/prefix_helper.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2014 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package util - -import ( - "bytes" - - "github.com/juju/errors" - "github.com/pingcap/tidb/kv" -) - -// ScanMetaWithPrefix scans metadata with the prefix. -func ScanMetaWithPrefix(retriever kv.Retriever, prefix kv.Key, filter func(kv.Key, []byte) bool) error { - iter, err := retriever.Seek(prefix) - if err != nil { - return errors.Trace(err) - } - defer iter.Close() - - for { - if err != nil { - return errors.Trace(err) - } - - if iter.Valid() && iter.Key().HasPrefix(prefix) { - if !filter(iter.Key(), iter.Value()) { - break - } - err = iter.Next() - if err != nil { - return errors.Trace(err) - } - } else { - break - } - } - - return nil -} - -// DelKeyWithPrefix deletes keys with prefix. -func DelKeyWithPrefix(rm kv.RetrieverMutator, prefix kv.Key) error { - var keys []kv.Key - iter, err := rm.Seek(prefix) - if err != nil { - return errors.Trace(err) - } - - defer iter.Close() - for { - if err != nil { - return errors.Trace(err) - } - - if iter.Valid() && iter.Key().HasPrefix(prefix) { - keys = append(keys, iter.Key().Clone()) - err = iter.Next() - if err != nil { - return errors.Trace(err) - } - } else { - break - } - } - - for _, key := range keys { - err := rm.Delete(key) - if err != nil { - return errors.Trace(err) - } - } - - return nil -} - -// RowKeyPrefixFilter returns a function which checks whether currentKey has decoded rowKeyPrefix as prefix. -func RowKeyPrefixFilter(rowKeyPrefix kv.Key) kv.FnKeyCmp { - return func(currentKey kv.Key) bool { - // Next until key without prefix of this record. - return !bytes.HasPrefix(currentKey, rowKeyPrefix) - } -} diff --git a/vendor/github.com/pingcap/tidb/util/segmentmap/segmentmap.go b/vendor/github.com/pingcap/tidb/util/segmentmap/segmentmap.go deleted file mode 100644 index 030372f27..000000000 --- a/vendor/github.com/pingcap/tidb/util/segmentmap/segmentmap.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package segmentmap - -import ( - "hash/crc32" - - "github.com/juju/errors" -) - -// SegmentMap is used for handle a big map slice by slice. -// It's not thread safe. -type SegmentMap struct { - size int64 - maps []map[string]interface{} - - crcTable *crc32.Table -} - -// NewSegmentMap create a new SegmentMap. -func NewSegmentMap(size int64) (*SegmentMap, error) { - if size <= 0 { - return nil, errors.Errorf("Invalid size: %d", size) - } - - sm := &SegmentMap{ - maps: make([]map[string]interface{}, size), - size: size, - } - for i := int64(0); i < size; i++ { - sm.maps[i] = make(map[string]interface{}) - } - - sm.crcTable = crc32.MakeTable(crc32.Castagnoli) - return sm, nil -} - -// Get is the same as map[k]. -func (sm *SegmentMap) Get(key []byte) (interface{}, bool) { - idx := int64(crc32.Checksum(key, sm.crcTable)) % sm.size - val, ok := sm.maps[idx][string(key)] - return val, ok -} - -// GetSegment gets the map specific by index. -func (sm *SegmentMap) GetSegment(index int64) (map[string]interface{}, error) { - if index >= sm.size || index < 0 { - return nil, errors.Errorf("index out of bound: %d", index) - } - - return sm.maps[index], nil -} - -// Set if key not exists, returns whether already exists. -func (sm *SegmentMap) Set(key []byte, value interface{}, force bool) bool { - idx := int64(crc32.Checksum(key, sm.crcTable)) % sm.size - k := string(key) - _, exist := sm.maps[idx][k] - if exist && !force { - return exist - } - - sm.maps[idx][k] = value - return exist -} - -// SegmentCount returns how many inner segments. -func (sm *SegmentMap) SegmentCount() int64 { - return sm.size -} diff --git a/vendor/github.com/pingcap/tidb/util/sqlexec/restricted_sql_executor.go b/vendor/github.com/pingcap/tidb/util/sqlexec/restricted_sql_executor.go deleted file mode 100644 index 93d47a963..000000000 --- a/vendor/github.com/pingcap/tidb/util/sqlexec/restricted_sql_executor.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package sqlexec - -import ( - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/context" -) - -// RestrictedSQLExecutor is an interface provides executing restricted sql statement. -// Why we need this interface? -// When we execute some management statements, we need to operate system tables. -// For example when executing create user statement, we need to check if the user already -// exists in the mysql.User table and insert a new row if not exists. In this case, we need -// a convenience way to manipulate system tables. The most simple way is executing sql statement. -// In order to execute sql statement in stmts package, we add this interface to solve dependence problem. -// And in the same time, we do not want this interface becomes a general way to run sql statement. -// We hope this could be used with some restrictions such as only allowing system tables as target, -// do not allowing recursion call. -// For more infomation please refer to the comments in session.ExecRestrictedSQL(). -// This is implemented in session.go. -type RestrictedSQLExecutor interface { - // ExecRestrictedSQL run sql statement in ctx with some restriction. - ExecRestrictedSQL(ctx context.Context, sql string) (ast.RecordSet, error) -} diff --git a/vendor/github.com/pingcap/tidb/util/stringutil/string_util.go b/vendor/github.com/pingcap/tidb/util/stringutil/string_util.go deleted file mode 100644 index f4005e7e1..000000000 --- a/vendor/github.com/pingcap/tidb/util/stringutil/string_util.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package stringutil - -import ( - "bytes" - "strings" -) - -// See: https://dev.mysql.com/doc/refman/5.7/en/string-literals.html#character-escape-sequences -const validEscapeChars = `0'"bntrz\\%_` - -// RemoveUselessBackslash removes backslashs which could be ignored in the string literal. -// See: https://dev.mysql.com/doc/refman/5.7/en/string-literals.html -// " Each of these sequences begins with a backslash (“\”), known as the escape character. -// MySQL recognizes the escape sequences shown in Table 9.1, “Special Character Escape Sequences”. -// For all other escape sequences, backslash is ignored. That is, the escaped character is -// interpreted as if it was not escaped. For example, “\x” is just “x”. These sequences are case sensitive. -// For example, “\b” is interpreted as a backspace, but “\B” is interpreted as “B”." -func RemoveUselessBackslash(s string) string { - var ( - buf bytes.Buffer - i = 0 - ) - for i < len(s)-1 { - if s[i] != '\\' { - buf.WriteByte(s[i]) - i++ - continue - } - next := s[i+1] - if strings.IndexByte(validEscapeChars, next) != -1 { - buf.WriteByte(s[i]) - } - buf.WriteByte(next) - i += 2 - } - if i == len(s)-1 { - buf.WriteByte(s[i]) - } - return buf.String() -} diff --git a/vendor/github.com/pingcap/tidb/util/types/compare.go b/vendor/github.com/pingcap/tidb/util/types/compare.go deleted file mode 100644 index 611fa72d3..000000000 --- a/vendor/github.com/pingcap/tidb/util/types/compare.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2014 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -// CompareInt64 returns an integer comparing the int64 x to y. -func CompareInt64(x, y int64) int { - if x < y { - return -1 - } else if x == y { - return 0 - } - - return 1 -} - -// CompareUint64 returns an integer comparing the uint64 x to y. -func CompareUint64(x, y uint64) int { - if x < y { - return -1 - } else if x == y { - return 0 - } - - return 1 -} - -// CompareFloat64 returns an integer comparing the float64 x to y. -func CompareFloat64(x, y float64) int { - if x < y { - return -1 - } else if x == y { - return 0 - } - - return 1 -} - -// CompareString returns an integer comparing the string x to y. -func CompareString(x, y string) int { - if x < y { - return -1 - } else if x == y { - return 0 - } - - return 1 -} - -// Compare returns an integer comparing the interface a with b. -// a > b -> 1 -// a = b -> 0 -// a < b -> -1 -func Compare(a, b interface{}) (int, error) { - aDatum := NewDatum(a) - bDatum := NewDatum(b) - return aDatum.CompareDatum(bDatum) -} diff --git a/vendor/github.com/pingcap/tidb/util/types/convert.go b/vendor/github.com/pingcap/tidb/util/types/convert.go deleted file mode 100644 index 9ea9a7e06..000000000 --- a/vendor/github.com/pingcap/tidb/util/types/convert.go +++ /dev/null @@ -1,437 +0,0 @@ -// Copyright 2014 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "math" - "strconv" - "strings" - "unicode" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" -) - -// InvConv returns a failed convertion error. -func invConv(val interface{}, tp byte) (interface{}, error) { - return nil, errors.Errorf("cannot convert %v (type %T) to type %s", val, val, TypeStr(tp)) -} - -func truncateStr(str string, flen int) string { - if flen != UnspecifiedLength && len(str) > flen { - str = str[:flen] - } - return str -} - -var unsignedUpperBound = map[byte]uint64{ - mysql.TypeTiny: math.MaxUint8, - mysql.TypeShort: math.MaxUint16, - mysql.TypeInt24: mysql.MaxUint24, - mysql.TypeLong: math.MaxUint32, - mysql.TypeLonglong: math.MaxUint64, - mysql.TypeBit: math.MaxUint64, - mysql.TypeEnum: math.MaxUint64, - mysql.TypeSet: math.MaxUint64, -} - -var signedUpperBound = map[byte]int64{ - mysql.TypeTiny: math.MaxInt8, - mysql.TypeShort: math.MaxInt16, - mysql.TypeInt24: mysql.MaxInt24, - mysql.TypeLong: math.MaxInt32, - mysql.TypeLonglong: math.MaxInt64, -} - -var signedLowerBound = map[byte]int64{ - mysql.TypeTiny: math.MinInt8, - mysql.TypeShort: math.MinInt16, - mysql.TypeInt24: mysql.MinInt24, - mysql.TypeLong: math.MinInt32, - mysql.TypeLonglong: math.MinInt64, -} - -func convertFloatToInt(val float64, lowerBound int64, upperBound int64, tp byte) (int64, error) { - val = RoundFloat(val) - if val < float64(lowerBound) { - return lowerBound, overflow(val, tp) - } - - if val > float64(upperBound) { - return upperBound, overflow(val, tp) - } - - return int64(val), nil -} - -func convertIntToInt(val int64, lowerBound int64, upperBound int64, tp byte) (int64, error) { - if val < lowerBound { - return lowerBound, overflow(val, tp) - } - - if val > upperBound { - return upperBound, overflow(val, tp) - } - - return val, nil -} - -func convertUintToInt(val uint64, upperBound int64, tp byte) (int64, error) { - if val > uint64(upperBound) { - return upperBound, overflow(val, tp) - } - - return int64(val), nil -} - -func convertToInt(val interface{}, target *FieldType) (int64, error) { - tp := target.Tp - lowerBound := signedLowerBound[tp] - upperBound := signedUpperBound[tp] - - switch v := val.(type) { - case bool: - if v { - return 1, nil - } - return 0, nil - case uint64: - return convertUintToInt(v, upperBound, tp) - case int: - return convertIntToInt(int64(v), lowerBound, upperBound, tp) - case int64: - return convertIntToInt(int64(v), lowerBound, upperBound, tp) - case float32: - return convertFloatToInt(float64(v), lowerBound, upperBound, tp) - case float64: - return convertFloatToInt(float64(v), lowerBound, upperBound, tp) - case string: - fval, err := StrToFloat(v) - if err != nil { - return 0, errors.Trace(err) - } - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case []byte: - fval, err := StrToFloat(string(v)) - if err != nil { - return 0, errors.Trace(err) - } - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case mysql.Time: - // 2011-11-10 11:11:11.999999 -> 20111110111112 - ival := v.ToNumber().Round(0).IntPart() - return convertIntToInt(ival, lowerBound, upperBound, tp) - case mysql.Duration: - // 11:11:11.999999 -> 111112 - ival := v.ToNumber().Round(0).IntPart() - return convertIntToInt(ival, lowerBound, upperBound, tp) - case mysql.Decimal: - fval, _ := v.Float64() - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case mysql.Hex: - return convertFloatToInt(v.ToNumber(), lowerBound, upperBound, tp) - case mysql.Bit: - return convertFloatToInt(v.ToNumber(), lowerBound, upperBound, tp) - case mysql.Enum: - return convertFloatToInt(v.ToNumber(), lowerBound, upperBound, tp) - case mysql.Set: - return convertFloatToInt(v.ToNumber(), lowerBound, upperBound, tp) - } - return 0, typeError(val, target) -} - -func convertIntToUint(val int64, upperBound uint64, tp byte) (uint64, error) { - if val < 0 { - return 0, overflow(val, tp) - } - - if uint64(val) > upperBound { - return upperBound, overflow(val, tp) - } - - return uint64(val), nil -} - -func convertUintToUint(val uint64, upperBound uint64, tp byte) (uint64, error) { - if val > upperBound { - return upperBound, overflow(val, tp) - } - - return val, nil -} - -func convertFloatToUint(val float64, upperBound uint64, tp byte) (uint64, error) { - val = RoundFloat(val) - if val < 0 { - return uint64(int64(val)), overflow(val, tp) - } - - if val > float64(upperBound) { - return upperBound, overflow(val, tp) - } - - return uint64(val), nil -} - -// typeError returns error for invalid value type. -func typeError(v interface{}, target *FieldType) error { - return errors.Errorf("cannot use %v (type %T) in assignment to, or comparison with, column type %s)", - v, v, target.String()) -} - -func isCastType(tp byte) bool { - switch tp { - case mysql.TypeString, mysql.TypeDuration, mysql.TypeDatetime, - mysql.TypeDate, mysql.TypeLonglong, mysql.TypeNewDecimal: - return true - } - return false -} - -// Cast casts val to certain types and does not return error. -func Cast(val interface{}, target *FieldType) (interface{}, error) { - if !isCastType(target.Tp) { - return nil, errors.Errorf("unknown cast type - %v", target) - } - - return Convert(val, target) -} - -// Convert converts the val with type tp. -func Convert(val interface{}, target *FieldType) (v interface{}, err error) { - d := NewDatum(val) - ret, err := d.ConvertTo(target) - if err != nil { - return ret.GetValue(), errors.Trace(err) - } - return ret.GetValue(), nil -} - -// StrToInt converts a string to an integer in best effort. -// TODO: handle overflow and add unittest. -func StrToInt(str string) (int64, error) { - str = strings.TrimSpace(str) - if len(str) == 0 { - return 0, nil - } - negative := false - i := 0 - if str[i] == '-' { - negative = true - i++ - } else if str[i] == '+' { - i++ - } - r := int64(0) - for ; i < len(str); i++ { - if !unicode.IsDigit(rune(str[i])) { - break - } - r = r*10 + int64(str[i]-'0') - } - if negative { - r = -r - } - // TODO: if i < len(str), we should return an error. - return r, nil -} - -// StrToFloat converts a string to a float64 in best effort. -func StrToFloat(str string) (float64, error) { - str = strings.TrimSpace(str) - if len(str) == 0 { - return 0, nil - } - - // MySQL uses a very loose conversation, e.g, 123.abc -> 123 - // We should do a trade off whether supporting this feature or using a strict mode. - // Now we use a strict mode. - return strconv.ParseFloat(str, 64) -} - -// ToInt64 converts an interface to an int64. -func ToInt64(value interface{}) (int64, error) { - return convertToInt(value, NewFieldType(mysql.TypeLonglong)) -} - -// ToFloat64 converts an interface to a float64. -func ToFloat64(value interface{}) (float64, error) { - switch v := value.(type) { - case bool: - if v { - return 1, nil - } - return 0, nil - case int: - return float64(v), nil - case int64: - return float64(v), nil - case uint64: - return float64(v), nil - case float32: - return float64(v), nil - case float64: - return float64(v), nil - case string: - return StrToFloat(v) - case []byte: - return StrToFloat(string(v)) - case mysql.Time: - f, _ := v.ToNumber().Float64() - return f, nil - case mysql.Duration: - f, _ := v.ToNumber().Float64() - return f, nil - case mysql.Decimal: - vv, _ := v.Float64() - return vv, nil - case mysql.Hex: - return v.ToNumber(), nil - case mysql.Bit: - return v.ToNumber(), nil - case mysql.Enum: - return v.ToNumber(), nil - case mysql.Set: - return v.ToNumber(), nil - default: - return 0, errors.Errorf("cannot convert %v(type %T) to float64", value, value) - } -} - -// ToDecimal converts an interface to a Decimal. -func ToDecimal(value interface{}) (mysql.Decimal, error) { - switch v := value.(type) { - case bool: - if v { - return mysql.ConvertToDecimal(1) - } - return mysql.ConvertToDecimal(0) - case []byte: - return mysql.ConvertToDecimal(string(v)) - case mysql.Time: - return v.ToNumber(), nil - case mysql.Duration: - return v.ToNumber(), nil - default: - return mysql.ConvertToDecimal(value) - } -} - -// ToString converts an interface to a string. -func ToString(value interface{}) (string, error) { - switch v := value.(type) { - case bool: - if v { - return "1", nil - } - return "0", nil - case int: - return strconv.FormatInt(int64(v), 10), nil - case int64: - return strconv.FormatInt(int64(v), 10), nil - case uint64: - return strconv.FormatUint(uint64(v), 10), nil - case float32: - return strconv.FormatFloat(float64(v), 'f', -1, 32), nil - case float64: - return strconv.FormatFloat(float64(v), 'f', -1, 64), nil - case string: - return v, nil - case []byte: - return string(v), nil - case mysql.Time: - return v.String(), nil - case mysql.Duration: - return v.String(), nil - case mysql.Decimal: - return v.String(), nil - case mysql.Hex: - return v.ToString(), nil - case mysql.Bit: - return v.ToString(), nil - case mysql.Enum: - return v.String(), nil - case mysql.Set: - return v.String(), nil - default: - return "", errors.Errorf("cannot convert %v(type %T) to string", value, value) - } -} - -// ToBool converts an interface to a bool. -// We will use 1 for true, and 0 for false. -func ToBool(value interface{}) (int64, error) { - isZero := false - switch v := value.(type) { - case bool: - isZero = (v == false) - case int: - isZero = (v == 0) - case int64: - isZero = (v == 0) - case uint64: - isZero = (v == 0) - case float32: - isZero = (v == 0) - case float64: - isZero = (v == 0) - case string: - if len(v) == 0 { - isZero = true - } else { - n, err := StrToInt(v) - if err != nil { - return 0, err - } - isZero = (n == 0) - } - case []byte: - if len(v) == 0 { - isZero = true - } else { - n, err := StrToInt(string(v)) - if err != nil { - return 0, err - } - isZero = (n == 0) - } - case mysql.Time: - isZero = v.IsZero() - case mysql.Duration: - isZero = (v.Duration == 0) - case mysql.Decimal: - vv, _ := v.Float64() - isZero = (vv == 0) - case mysql.Hex: - isZero = (v.ToNumber() == 0) - case mysql.Bit: - isZero = (v.ToNumber() == 0) - case mysql.Enum: - isZero = (v.ToNumber() == 0) - case mysql.Set: - isZero = (v.ToNumber() == 0) - default: - return 0, errors.Errorf("cannot convert %v(type %T) to bool", value, value) - } - - if isZero { - return 0, nil - } - - return 1, nil -} diff --git a/vendor/github.com/pingcap/tidb/util/types/datum.go b/vendor/github.com/pingcap/tidb/util/types/datum.go deleted file mode 100644 index ddb8a4325..000000000 --- a/vendor/github.com/pingcap/tidb/util/types/datum.go +++ /dev/null @@ -1,1249 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "math" - "strconv" - "time" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/hack" -) - -// Kind constants. -const ( - KindNull int = 0 - KindInt64 int = iota + 1 - KindUint64 - KindFloat32 - KindFloat64 - KindString - KindBytes - KindMysqlBit - KindMysqlDecimal - KindMysqlDuration - KindMysqlEnum - KindMysqlHex - KindMysqlSet - KindMysqlTime - KindRow - KindInterface - KindMinNotNull - KindMaxValue -) - -// Datum is a data box holds different kind of data. -// It has better performance and is easier to use than `interface{}`. -type Datum struct { - k int // datum kind. - i int64 // i can hold int64 uint64 float64 values. - b []byte // b can hold string or []byte values. - x interface{} // f hold all other types. -} - -// Kind gets the kind of the datum. -func (d *Datum) Kind() int { - return d.k -} - -// GetInt64 gets int64 value. -func (d *Datum) GetInt64() int64 { - return d.i -} - -// SetInt64 sets int64 value. -func (d *Datum) SetInt64(i int64) { - d.k = KindInt64 - d.i = i -} - -// GetUint64 gets uint64 value. -func (d *Datum) GetUint64() uint64 { - return uint64(d.i) -} - -// SetUint64 sets uint64 value. -func (d *Datum) SetUint64(i uint64) { - d.k = KindUint64 - d.i = int64(i) -} - -// GetFloat64 gets float64 value. -func (d *Datum) GetFloat64() float64 { - return math.Float64frombits(uint64(d.i)) -} - -// SetFloat64 sets float64 value. -func (d *Datum) SetFloat64(f float64) { - d.k = KindFloat64 - d.i = int64(math.Float64bits(f)) -} - -// GetFloat32 gets float32 value. -func (d *Datum) GetFloat32() float32 { - return float32(math.Float64frombits(uint64(d.i))) -} - -// SetFloat32 sets float32 value. -func (d *Datum) SetFloat32(f float32) { - d.k = KindFloat32 - d.i = int64(math.Float64bits(float64(f))) -} - -// GetString gets string value. -func (d *Datum) GetString() string { - return hack.String(d.b) -} - -// SetString sets string value. -func (d *Datum) SetString(s string) { - d.k = KindString - sink(s) - d.b = hack.Slice(s) -} - -// sink prevents s from being allocated on the stack. -var sink = func(s string) { -} - -// GetBytes gets bytes value. -func (d *Datum) GetBytes() []byte { - return d.b -} - -// SetBytes sets bytes value to datum. -func (d *Datum) SetBytes(b []byte) { - d.k = KindBytes - d.b = b -} - -// SetBytesAsString sets bytes value to datum as string type. -func (d *Datum) SetBytesAsString(b []byte) { - d.k = KindString - d.b = b -} - -// GetInterface gets interface value. -func (d *Datum) GetInterface() interface{} { - return d.x -} - -// SetInterface sets interface to datum. -func (d *Datum) SetInterface(x interface{}) { - d.k = KindInterface - d.x = x -} - -// GetRow gets row value. -func (d *Datum) GetRow() []Datum { - return d.x.([]Datum) -} - -// SetNull sets datum to nil. -func (d *Datum) SetNull() { - d.k = KindNull - d.x = nil -} - -// GetMysqlBit gets mysql.Bit value -func (d *Datum) GetMysqlBit() mysql.Bit { - return d.x.(mysql.Bit) -} - -// SetMysqlBit sets mysql.Bit value -func (d *Datum) SetMysqlBit(b mysql.Bit) { - d.k = KindMysqlBit - d.x = b -} - -// GetMysqlDecimal gets mysql.Decimal value -func (d *Datum) GetMysqlDecimal() mysql.Decimal { - return d.x.(mysql.Decimal) -} - -// SetMysqlDecimal sets mysql.Decimal value -func (d *Datum) SetMysqlDecimal(b mysql.Decimal) { - d.k = KindMysqlDecimal - d.x = b -} - -// GetMysqlDuration gets mysql.Duration value -func (d *Datum) GetMysqlDuration() mysql.Duration { - return d.x.(mysql.Duration) -} - -// SetMysqlDuration sets mysql.Duration value -func (d *Datum) SetMysqlDuration(b mysql.Duration) { - d.k = KindMysqlDuration - d.x = b -} - -// GetMysqlEnum gets mysql.Enum value -func (d *Datum) GetMysqlEnum() mysql.Enum { - return d.x.(mysql.Enum) -} - -// SetMysqlEnum sets mysql.Enum value -func (d *Datum) SetMysqlEnum(b mysql.Enum) { - d.k = KindMysqlEnum - d.x = b -} - -// GetMysqlHex gets mysql.Hex value -func (d *Datum) GetMysqlHex() mysql.Hex { - return d.x.(mysql.Hex) -} - -// SetMysqlHex sets mysql.Hex value -func (d *Datum) SetMysqlHex(b mysql.Hex) { - d.k = KindMysqlHex - d.x = b -} - -// GetMysqlSet gets mysql.Set value -func (d *Datum) GetMysqlSet() mysql.Set { - return d.x.(mysql.Set) -} - -// SetMysqlSet sets mysql.Set value -func (d *Datum) SetMysqlSet(b mysql.Set) { - d.k = KindMysqlSet - d.x = b -} - -// GetMysqlTime gets mysql.Time value -func (d *Datum) GetMysqlTime() mysql.Time { - return d.x.(mysql.Time) -} - -// SetMysqlTime sets mysql.Time value -func (d *Datum) SetMysqlTime(b mysql.Time) { - d.k = KindMysqlTime - d.x = b -} - -// GetValue gets the value of the datum of any kind. -func (d *Datum) GetValue() interface{} { - switch d.k { - case KindInt64: - return d.GetInt64() - case KindUint64: - return d.GetUint64() - case KindFloat32: - return d.GetFloat32() - case KindFloat64: - return d.GetFloat64() - case KindString: - return d.GetString() - case KindBytes: - return d.GetBytes() - default: - return d.x - } -} - -// SetValue sets any kind of value. -func (d *Datum) SetValue(val interface{}) { - switch x := val.(type) { - case nil: - d.SetNull() - case bool: - if x { - d.SetInt64(1) - } else { - d.SetInt64(0) - } - case int: - d.SetInt64(int64(x)) - case int64: - d.SetInt64(x) - case uint64: - d.SetUint64(x) - case float32: - d.SetFloat32(x) - case float64: - d.SetFloat64(x) - case string: - d.SetString(x) - case []byte: - d.SetBytes(x) - case mysql.Bit: - d.x = x - d.k = KindMysqlBit - case mysql.Decimal: - d.x = x - d.k = KindMysqlDecimal - case mysql.Duration: - d.x = x - d.k = KindMysqlDuration - case mysql.Enum: - d.x = x - d.k = KindMysqlEnum - case mysql.Hex: - d.x = x - d.k = KindMysqlHex - case mysql.Set: - d.x = x - d.k = KindMysqlSet - case mysql.Time: - d.x = x - d.k = KindMysqlTime - case []Datum: - d.x = x - d.k = KindRow - default: - d.SetInterface(x) - } -} - -// CompareDatum compares datum to another datum. -// TODO: return error properly. -func (d *Datum) CompareDatum(ad Datum) (int, error) { - switch ad.k { - case KindNull: - if d.k == KindNull { - return 0, nil - } - return 1, nil - case KindMinNotNull: - if d.k == KindNull { - return -1, nil - } else if d.k == KindMinNotNull { - return 0, nil - } - return 1, nil - case KindMaxValue: - if d.k == KindMaxValue { - return 0, nil - } - return -1, nil - case KindInt64: - return d.compareInt64(ad.GetInt64()) - case KindUint64: - return d.compareUint64(ad.GetUint64()) - case KindFloat32, KindFloat64: - return d.compareFloat64(ad.GetFloat64()) - case KindString: - return d.compareString(ad.GetString()) - case KindBytes: - return d.compareBytes(ad.GetBytes()) - case KindMysqlBit: - return d.compareMysqlBit(ad.GetMysqlBit()) - case KindMysqlDecimal: - return d.compareMysqlDecimal(ad.GetMysqlDecimal()) - case KindMysqlDuration: - return d.compareMysqlDuration(ad.GetMysqlDuration()) - case KindMysqlEnum: - return d.compareMysqlEnum(ad.GetMysqlEnum()) - case KindMysqlHex: - return d.compareMysqlHex(ad.GetMysqlHex()) - case KindMysqlSet: - return d.compareMysqlSet(ad.GetMysqlSet()) - case KindMysqlTime: - return d.compareMysqlTime(ad.GetMysqlTime()) - case KindRow: - return d.compareRow(ad.GetRow()) - default: - return 0, nil - } -} - -func (d *Datum) compareInt64(i int64) (int, error) { - switch d.k { - case KindMaxValue: - return 1, nil - case KindInt64: - return CompareInt64(d.i, i), nil - case KindUint64: - if i < 0 || d.GetUint64() > math.MaxInt64 { - return 1, nil - } - return CompareInt64(d.i, i), nil - default: - return d.compareFloat64(float64(i)) - } -} - -func (d *Datum) compareUint64(u uint64) (int, error) { - switch d.k { - case KindMaxValue: - return 1, nil - case KindInt64: - if d.i < 0 || u > math.MaxInt64 { - return -1, nil - } - return CompareInt64(d.i, int64(u)), nil - case KindUint64: - return CompareUint64(d.GetUint64(), u), nil - default: - return d.compareFloat64(float64(u)) - } -} - -func (d *Datum) compareFloat64(f float64) (int, error) { - switch d.k { - case KindNull, KindMinNotNull: - return -1, nil - case KindMaxValue: - return 1, nil - case KindInt64: - return CompareFloat64(float64(d.i), f), nil - case KindUint64: - return CompareFloat64(float64(d.GetUint64()), f), nil - case KindFloat32, KindFloat64: - return CompareFloat64(d.GetFloat64(), f), nil - case KindString, KindBytes: - fVal, err := StrToFloat(d.GetString()) - return CompareFloat64(fVal, f), err - case KindMysqlBit: - fVal := d.GetMysqlBit().ToNumber() - return CompareFloat64(fVal, f), nil - case KindMysqlDecimal: - fVal, _ := d.GetMysqlDecimal().Float64() - return CompareFloat64(fVal, f), nil - case KindMysqlDuration: - fVal := d.GetMysqlDuration().Seconds() - return CompareFloat64(fVal, f), nil - case KindMysqlEnum: - fVal := d.GetMysqlEnum().ToNumber() - return CompareFloat64(fVal, f), nil - case KindMysqlHex: - fVal := d.GetMysqlHex().ToNumber() - return CompareFloat64(fVal, f), nil - case KindMysqlSet: - fVal := d.GetMysqlSet().ToNumber() - return CompareFloat64(fVal, f), nil - case KindMysqlTime: - fVal, _ := d.GetMysqlTime().ToNumber().Float64() - return CompareFloat64(fVal, f), nil - default: - return -1, nil - } -} - -func (d *Datum) compareString(s string) (int, error) { - switch d.k { - case KindNull, KindMinNotNull: - return -1, nil - case KindMaxValue: - return 1, nil - case KindString, KindBytes: - return CompareString(d.GetString(), s), nil - case KindMysqlDecimal: - dec, err := mysql.ParseDecimal(s) - return d.GetMysqlDecimal().Cmp(dec), err - case KindMysqlTime: - dt, err := mysql.ParseDatetime(s) - return d.GetMysqlTime().Compare(dt), err - case KindMysqlDuration: - dur, err := mysql.ParseDuration(s, mysql.MaxFsp) - return d.GetMysqlDuration().Compare(dur), err - case KindMysqlBit: - return CompareString(d.GetMysqlBit().ToString(), s), nil - case KindMysqlHex: - return CompareString(d.GetMysqlHex().ToString(), s), nil - case KindMysqlSet: - return CompareString(d.GetMysqlSet().String(), s), nil - case KindMysqlEnum: - return CompareString(d.GetMysqlEnum().String(), s), nil - default: - fVal, err := StrToFloat(s) - if err != nil { - return 0, err - } - return d.compareFloat64(fVal) - } -} - -func (d *Datum) compareBytes(b []byte) (int, error) { - return d.compareString(hack.String(b)) -} - -func (d *Datum) compareMysqlBit(bit mysql.Bit) (int, error) { - switch d.k { - case KindString, KindBytes: - return CompareString(d.GetString(), bit.ToString()), nil - default: - return d.compareFloat64(bit.ToNumber()) - } -} - -func (d *Datum) compareMysqlDecimal(dec mysql.Decimal) (int, error) { - switch d.k { - case KindMysqlDecimal: - return d.GetMysqlDecimal().Cmp(dec), nil - case KindString, KindBytes: - dDec, err := mysql.ParseDecimal(d.GetString()) - return dDec.Cmp(dec), err - default: - fVal, _ := dec.Float64() - return d.compareFloat64(fVal) - } -} - -func (d *Datum) compareMysqlDuration(dur mysql.Duration) (int, error) { - switch d.k { - case KindMysqlDuration: - return d.GetMysqlDuration().Compare(dur), nil - case KindString, KindBytes: - dDur, err := mysql.ParseDuration(d.GetString(), mysql.MaxFsp) - return dDur.Compare(dur), err - default: - return d.compareFloat64(dur.Seconds()) - } -} - -func (d *Datum) compareMysqlEnum(enum mysql.Enum) (int, error) { - switch d.k { - case KindString, KindBytes: - return CompareString(d.GetString(), enum.String()), nil - default: - return d.compareFloat64(enum.ToNumber()) - } -} - -func (d *Datum) compareMysqlHex(e mysql.Hex) (int, error) { - switch d.k { - case KindString, KindBytes: - return CompareString(d.GetString(), e.ToString()), nil - default: - return d.compareFloat64(e.ToNumber()) - } -} - -func (d *Datum) compareMysqlSet(set mysql.Set) (int, error) { - switch d.k { - case KindString, KindBytes: - return CompareString(d.GetString(), set.String()), nil - default: - return d.compareFloat64(set.ToNumber()) - } -} - -func (d *Datum) compareMysqlTime(time mysql.Time) (int, error) { - switch d.k { - case KindString, KindBytes: - dt, err := mysql.ParseDatetime(d.GetString()) - return dt.Compare(time), err - case KindMysqlTime: - return d.GetMysqlTime().Compare(time), nil - default: - fVal, _ := time.ToNumber().Float64() - return d.compareFloat64(fVal) - } -} - -func (d *Datum) compareRow(row []Datum) (int, error) { - var dRow []Datum - if d.k == KindRow { - dRow = d.GetRow() - } else { - dRow = []Datum{*d} - } - for i := 0; i < len(row) && i < len(dRow); i++ { - cmp, err := dRow[i].CompareDatum(row[i]) - if err != nil { - return 0, err - } - if cmp != 0 { - return cmp, nil - } - } - return CompareInt64(int64(len(dRow)), int64(len(row))), nil -} - -// ConvertTo converts datum to the target field type. -func (d *Datum) ConvertTo(target *FieldType) (Datum, error) { - if d.k == KindNull { - return Datum{}, nil - } - switch target.Tp { // TODO: implement mysql types convert when "CAST() AS" syntax are supported. - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - unsigned := mysql.HasUnsignedFlag(target.Flag) - if unsigned { - return d.convertToUint(target) - } - return d.convertToInt(target) - case mysql.TypeFloat, mysql.TypeDouble: - return d.convertToFloat(target) - case mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, - mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString: - return d.convertToString(target) - case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDate: - return d.convertToMysqlTime(target) - case mysql.TypeDuration: - return d.convertToMysqlDuration(target) - case mysql.TypeBit: - return d.convertToMysqlBit(target) - case mysql.TypeDecimal, mysql.TypeNewDecimal: - return d.convertToMysqlDecimal(target) - case mysql.TypeYear: - return d.convertToMysqlYear(target) - case mysql.TypeEnum: - return d.convertToMysqlEnum(target) - case mysql.TypeSet: - return d.convertToMysqlSet(target) - case mysql.TypeNull: - return Datum{}, nil - default: - panic("should never happen") - } -} - -func (d *Datum) convertToFloat(target *FieldType) (Datum, error) { - var ret Datum - switch d.k { - case KindNull: - return ret, nil - case KindInt64: - ret.SetFloat64(float64(d.GetInt64())) - case KindUint64: - ret.SetFloat64(float64(d.GetUint64())) - case KindFloat32, KindFloat64: - ret.SetFloat64(d.GetFloat64()) - case KindString, KindBytes: - f, err := StrToFloat(d.GetString()) - if err != nil { - return ret, errors.Trace(err) - } - ret.SetFloat64(f) - case KindMysqlTime: - f, _ := d.GetMysqlTime().ToNumber().Float64() - ret.SetFloat64(f) - case KindMysqlDuration: - f, _ := d.GetMysqlDuration().ToNumber().Float64() - ret.SetFloat64(f) - case KindMysqlDecimal: - f, _ := d.GetMysqlDecimal().Float64() - ret.SetFloat64(f) - case KindMysqlHex: - ret.SetFloat64(d.GetMysqlHex().ToNumber()) - case KindMysqlBit: - ret.SetFloat64(d.GetMysqlBit().ToNumber()) - case KindMysqlSet: - ret.SetFloat64(d.GetMysqlSet().ToNumber()) - case KindMysqlEnum: - ret.SetFloat64(d.GetMysqlEnum().ToNumber()) - default: - return invalidConv(d, target.Tp) - } - // For float and following double type, we will only truncate it for float(M, D) format. - // If no D is set, we will handle it like origin float whether M is set or not. - if target.Flen != UnspecifiedLength && target.Decimal != UnspecifiedLength { - x, err := TruncateFloat(ret.GetFloat64(), target.Flen, target.Decimal) - if err != nil { - return ret, errors.Trace(err) - } - if target.Tp == mysql.TypeFloat { - ret.SetFloat32(float32(x)) - } else { - ret.SetFloat64(x) - } - } - return ret, nil -} - -func (d *Datum) convertToString(target *FieldType) (Datum, error) { - var ret Datum - var s string - switch d.k { - case KindInt64: - s = strconv.FormatInt(d.GetInt64(), 10) - case KindUint64: - s = strconv.FormatUint(d.GetUint64(), 10) - case KindFloat32: - s = strconv.FormatFloat(d.GetFloat64(), 'f', -1, 32) - case KindFloat64: - s = strconv.FormatFloat(d.GetFloat64(), 'f', -1, 64) - case KindString, KindBytes: - s = d.GetString() - case KindMysqlTime: - s = d.GetMysqlTime().String() - case KindMysqlDuration: - s = d.GetMysqlDuration().String() - case KindMysqlDecimal: - s = d.GetMysqlDecimal().String() - case KindMysqlHex: - s = d.GetMysqlHex().ToString() - case KindMysqlBit: - s = d.GetMysqlBit().ToString() - case KindMysqlEnum: - s = d.GetMysqlEnum().String() - case KindMysqlSet: - s = d.GetMysqlSet().String() - default: - return invalidConv(d, target.Tp) - } - // TODO: consider target.Charset/Collate - s = truncateStr(s, target.Flen) - ret.SetString(s) - if target.Charset == charset.CharsetBin { - ret.k = KindBytes - } - return ret, nil -} - -func (d *Datum) convertToInt(target *FieldType) (Datum, error) { - tp := target.Tp - lowerBound := signedLowerBound[tp] - upperBound := signedUpperBound[tp] - var ( - val int64 - err error - ret Datum - ) - switch d.k { - case KindInt64: - val, err = convertIntToInt(d.GetInt64(), lowerBound, upperBound, tp) - case KindUint64: - val, err = convertUintToInt(d.GetUint64(), upperBound, tp) - case KindFloat32, KindFloat64: - val, err = convertFloatToInt(d.GetFloat64(), lowerBound, upperBound, tp) - case KindString, KindBytes: - fval, err1 := StrToFloat(d.GetString()) - if err1 != nil { - return ret, errors.Trace(err1) - } - val, err = convertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlTime: - val = d.GetMysqlTime().ToNumber().Round(0).IntPart() - val, err = convertIntToInt(val, lowerBound, upperBound, tp) - case KindMysqlDuration: - val = d.GetMysqlDuration().ToNumber().Round(0).IntPart() - val, err = convertIntToInt(val, lowerBound, upperBound, tp) - case KindMysqlDecimal: - fval, _ := d.GetMysqlDecimal().Float64() - val, err = convertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlHex: - val, err = convertFloatToInt(d.GetMysqlHex().ToNumber(), lowerBound, upperBound, tp) - case KindMysqlBit: - val, err = convertFloatToInt(d.GetMysqlBit().ToNumber(), lowerBound, upperBound, tp) - case KindMysqlEnum: - val, err = convertFloatToInt(d.GetMysqlEnum().ToNumber(), lowerBound, upperBound, tp) - case KindMysqlSet: - val, err = convertFloatToInt(d.GetMysqlSet().ToNumber(), lowerBound, upperBound, tp) - default: - return invalidConv(d, target.Tp) - } - ret.SetInt64(val) - if err != nil { - return ret, errors.Trace(err) - } - return ret, nil -} - -func (d *Datum) convertToUint(target *FieldType) (Datum, error) { - tp := target.Tp - upperBound := unsignedUpperBound[tp] - var ( - val uint64 - err error - ret Datum - ) - switch d.k { - case KindInt64: - val, err = convertIntToUint(d.GetInt64(), upperBound, tp) - case KindUint64: - val, err = convertUintToUint(d.GetUint64(), upperBound, tp) - case KindFloat32, KindFloat64: - val, err = convertFloatToUint(d.GetFloat64(), upperBound, tp) - case KindString, KindBytes: - fval, err1 := StrToFloat(d.GetString()) - if err1 != nil { - val, _ = convertFloatToUint(fval, upperBound, tp) - ret.SetUint64(val) - return ret, errors.Trace(err1) - } - val, err = convertFloatToUint(fval, upperBound, tp) - case KindMysqlTime: - ival := d.GetMysqlTime().ToNumber().Round(0).IntPart() - val, err = convertIntToUint(ival, upperBound, tp) - case KindMysqlDuration: - ival := d.GetMysqlDuration().ToNumber().Round(0).IntPart() - val, err = convertIntToUint(ival, upperBound, tp) - case KindMysqlDecimal: - fval, _ := d.GetMysqlDecimal().Float64() - val, err = convertFloatToUint(fval, upperBound, tp) - case KindMysqlHex: - val, err = convertFloatToUint(d.GetMysqlHex().ToNumber(), upperBound, tp) - case KindMysqlBit: - val, err = convertFloatToUint(d.GetMysqlBit().ToNumber(), upperBound, tp) - case KindMysqlEnum: - val, err = convertFloatToUint(d.GetMysqlEnum().ToNumber(), upperBound, tp) - case KindMysqlSet: - val, err = convertFloatToUint(d.GetMysqlSet().ToNumber(), upperBound, tp) - default: - return invalidConv(d, target.Tp) - } - ret.SetUint64(val) - if err != nil { - return ret, errors.Trace(err) - } - return ret, nil -} - -func (d *Datum) convertToMysqlTime(target *FieldType) (Datum, error) { - tp := target.Tp - fsp := mysql.DefaultFsp - if target.Decimal != UnspecifiedLength { - fsp = target.Decimal - } - var ret Datum - switch d.k { - case KindMysqlTime: - t, err := d.GetMysqlTime().Convert(tp) - if err != nil { - ret.SetValue(t) - return ret, errors.Trace(err) - } - t, err = t.RoundFrac(fsp) - ret.SetValue(t) - if err != nil { - return ret, errors.Trace(err) - } - case KindMysqlDuration: - t, err := d.GetMysqlDuration().ConvertToTime(tp) - if err != nil { - ret.SetValue(t) - return ret, errors.Trace(err) - } - t, err = t.RoundFrac(fsp) - ret.SetValue(t) - if err != nil { - return ret, errors.Trace(err) - } - case KindString, KindBytes: - t, err := mysql.ParseTime(d.GetString(), tp, fsp) - ret.SetValue(t) - if err != nil { - return ret, errors.Trace(err) - } - case KindInt64: - t, err := mysql.ParseTimeFromNum(d.GetInt64(), tp, fsp) - ret.SetValue(t) - if err != nil { - return ret, errors.Trace(err) - } - default: - return invalidConv(d, tp) - } - return ret, nil -} - -func (d *Datum) convertToMysqlDuration(target *FieldType) (Datum, error) { - tp := target.Tp - fsp := mysql.DefaultFsp - if target.Decimal != UnspecifiedLength { - fsp = target.Decimal - } - var ret Datum - switch d.k { - case KindMysqlTime: - dur, err := d.GetMysqlTime().ConvertToDuration() - if err != nil { - ret.SetValue(dur) - return ret, errors.Trace(err) - } - dur, err = dur.RoundFrac(fsp) - ret.SetValue(dur) - if err != nil { - return ret, errors.Trace(err) - } - case KindMysqlDuration: - dur, err := d.GetMysqlDuration().RoundFrac(fsp) - ret.SetValue(dur) - if err != nil { - return ret, errors.Trace(err) - } - case KindString, KindBytes: - t, err := mysql.ParseDuration(d.GetString(), fsp) - ret.SetValue(t) - if err != nil { - return ret, errors.Trace(err) - } - default: - return invalidConv(d, tp) - } - return ret, nil -} - -func (d *Datum) convertToMysqlDecimal(target *FieldType) (Datum, error) { - var ret Datum - var dec mysql.Decimal - switch d.k { - case KindInt64: - dec = mysql.NewDecimalFromInt(d.GetInt64(), 0) - case KindUint64: - dec = mysql.NewDecimalFromUint(d.GetUint64(), 0) - case KindFloat32, KindFloat64: - dec = mysql.NewDecimalFromFloat(d.GetFloat64()) - case KindString, KindBytes: - var err error - dec, err = mysql.ParseDecimal(d.GetString()) - if err != nil { - return ret, errors.Trace(err) - } - case KindMysqlDecimal: - dec = d.GetMysqlDecimal() - case KindMysqlTime: - dec = d.GetMysqlTime().ToNumber() - case KindMysqlDuration: - dec = d.GetMysqlDuration().ToNumber() - case KindMysqlBit: - dec = mysql.NewDecimalFromFloat(d.GetMysqlBit().ToNumber()) - case KindMysqlEnum: - dec = mysql.NewDecimalFromFloat(d.GetMysqlEnum().ToNumber()) - case KindMysqlHex: - dec = mysql.NewDecimalFromFloat(d.GetMysqlHex().ToNumber()) - case KindMysqlSet: - dec = mysql.NewDecimalFromFloat(d.GetMysqlSet().ToNumber()) - default: - return invalidConv(d, target.Tp) - } - if target.Decimal != UnspecifiedLength { - dec = dec.Round(int32(target.Decimal)) - } - ret.SetValue(dec) - return ret, nil -} - -func (d *Datum) convertToMysqlYear(target *FieldType) (Datum, error) { - var ( - ret Datum - y int64 - err error - ) - switch d.k { - case KindString, KindBytes: - y, err = StrToInt(d.GetString()) - case KindMysqlTime: - y = int64(d.GetMysqlTime().Year()) - case KindMysqlDuration: - y = int64(time.Now().Year()) - default: - ret, err = d.convertToInt(NewFieldType(mysql.TypeLonglong)) - if err != nil { - return invalidConv(d, target.Tp) - } - y = ret.GetInt64() - } - y, err = mysql.AdjustYear(y) - if err != nil { - return invalidConv(d, target.Tp) - } - ret.SetInt64(y) - return ret, nil -} - -func (d *Datum) convertToMysqlBit(target *FieldType) (Datum, error) { - x, err := d.convertToUint(target) - if err != nil { - return x, errors.Trace(err) - } - // check bit boundary, if bit has n width, the boundary is - // in [0, (1 << n) - 1] - width := target.Flen - if width == 0 || width == mysql.UnspecifiedBitWidth { - width = mysql.MinBitWidth - } - maxValue := uint64(1)< maxValue { - x.SetUint64(maxValue) - return x, overflow(val, target.Tp) - } - var ret Datum - ret.SetValue(mysql.Bit{Value: val, Width: width}) - return ret, nil -} - -func (d *Datum) convertToMysqlEnum(target *FieldType) (Datum, error) { - var ( - ret Datum - e mysql.Enum - err error - ) - switch d.k { - case KindString, KindBytes: - e, err = mysql.ParseEnumName(target.Elems, d.GetString()) - default: - var uintDatum Datum - uintDatum, err = d.convertToUint(target) - if err != nil { - return ret, errors.Trace(err) - } - e, err = mysql.ParseEnumValue(target.Elems, uintDatum.GetUint64()) - } - if err != nil { - return invalidConv(d, target.Tp) - } - ret.SetValue(e) - return ret, nil -} - -func (d *Datum) convertToMysqlSet(target *FieldType) (Datum, error) { - var ( - ret Datum - s mysql.Set - err error - ) - switch d.k { - case KindString, KindBytes: - s, err = mysql.ParseSetName(target.Elems, d.GetString()) - default: - var uintDatum Datum - uintDatum, err = d.convertToUint(target) - if err != nil { - return ret, errors.Trace(err) - } - s, err = mysql.ParseSetValue(target.Elems, uintDatum.GetUint64()) - } - - if err != nil { - return invalidConv(d, target.Tp) - } - ret.SetValue(s) - return ret, nil -} - -// ToBool converts to a bool. -// We will use 1 for true, and 0 for false. -func (d *Datum) ToBool() (int64, error) { - isZero := false - switch d.Kind() { - case KindInt64: - isZero = (d.GetInt64() == 0) - case KindUint64: - isZero = (d.GetUint64() == 0) - case KindFloat32: - isZero = (d.GetFloat32() == 0) - case KindFloat64: - isZero = (d.GetFloat64() == 0) - case KindString: - s := d.GetString() - if len(s) == 0 { - isZero = true - } - n, err := StrToInt(s) - if err != nil { - return 0, err - } - isZero = (n == 0) - case KindBytes: - bs := d.GetBytes() - if len(bs) == 0 { - isZero = true - } else { - n, err := StrToInt(string(bs)) - if err != nil { - return 0, err - } - isZero = (n == 0) - } - case KindMysqlTime: - isZero = d.GetMysqlTime().IsZero() - case KindMysqlDuration: - isZero = (d.GetMysqlDuration().Duration == 0) - case KindMysqlDecimal: - v, _ := d.GetMysqlDecimal().Float64() - isZero = (v == 0) - case KindMysqlHex: - isZero = (d.GetMysqlHex().ToNumber() == 0) - case KindMysqlBit: - isZero = (d.GetMysqlBit().ToNumber() == 0) - case KindMysqlEnum: - isZero = (d.GetMysqlEnum().ToNumber() == 0) - case KindMysqlSet: - isZero = (d.GetMysqlSet().ToNumber() == 0) - default: - return 0, errors.Errorf("cannot convert %v(type %T) to bool", d.GetValue(), d.GetValue()) - } - if isZero { - return 0, nil - } - return 1, nil -} - -// ToInt64 converts to a int64. -func (d *Datum) ToInt64() (int64, error) { - tp := mysql.TypeLonglong - lowerBound := signedLowerBound[tp] - upperBound := signedUpperBound[tp] - switch d.Kind() { - case KindInt64: - return convertIntToInt(d.GetInt64(), lowerBound, upperBound, tp) - case KindUint64: - return convertUintToInt(d.GetUint64(), upperBound, tp) - case KindFloat32: - return convertFloatToInt(float64(d.GetFloat32()), lowerBound, upperBound, tp) - case KindFloat64: - return convertFloatToInt(d.GetFloat64(), lowerBound, upperBound, tp) - case KindString: - s := d.GetString() - fval, err := StrToFloat(s) - if err != nil { - return 0, errors.Trace(err) - } - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case KindBytes: - s := string(d.GetBytes()) - fval, err := StrToFloat(s) - if err != nil { - return 0, errors.Trace(err) - } - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlTime: - // 2011-11-10 11:11:11.999999 -> 20111110111112 - ival := d.GetMysqlTime().ToNumber().Round(0).IntPart() - return convertIntToInt(ival, lowerBound, upperBound, tp) - case KindMysqlDuration: - // 11:11:11.999999 -> 111112 - ival := d.GetMysqlDuration().ToNumber().Round(0).IntPart() - return convertIntToInt(ival, lowerBound, upperBound, tp) - case KindMysqlDecimal: - fval, _ := d.GetMysqlDecimal().Float64() - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlHex: - fval := d.GetMysqlHex().ToNumber() - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlBit: - fval := d.GetMysqlBit().ToNumber() - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlEnum: - fval := d.GetMysqlEnum().ToNumber() - return convertFloatToInt(fval, lowerBound, upperBound, tp) - case KindMysqlSet: - fval := d.GetMysqlSet().ToNumber() - return convertFloatToInt(fval, lowerBound, upperBound, tp) - default: - return 0, errors.Errorf("cannot convert %v(type %T) to int64", d.GetValue(), d.GetValue()) - } -} - -// ToFloat64 converts to a float64 -func (d *Datum) ToFloat64() (float64, error) { - switch d.Kind() { - case KindInt64: - return float64(d.GetInt64()), nil - case KindUint64: - return float64(d.GetUint64()), nil - case KindFloat32: - return float64(d.GetFloat32()), nil - case KindFloat64: - return d.GetFloat64(), nil - case KindString: - return StrToFloat(d.GetString()) - case KindBytes: - return StrToFloat(string(d.GetBytes())) - case KindMysqlTime: - f, _ := d.GetMysqlTime().ToNumber().Float64() - return f, nil - case KindMysqlDuration: - f, _ := d.GetMysqlDuration().ToNumber().Float64() - return f, nil - case KindMysqlDecimal: - f, _ := d.GetMysqlDecimal().Float64() - return f, nil - case KindMysqlHex: - return d.GetMysqlHex().ToNumber(), nil - case KindMysqlBit: - return d.GetMysqlBit().ToNumber(), nil - case KindMysqlEnum: - return d.GetMysqlEnum().ToNumber(), nil - case KindMysqlSet: - return d.GetMysqlSet().ToNumber(), nil - default: - return 0, errors.Errorf("cannot convert %v(type %T) to float64", d.GetValue(), d.GetValue()) - } -} - -// ToString gets the string representation of the datum. -func (d *Datum) ToString() (string, error) { - switch d.Kind() { - case KindInt64: - return strconv.FormatInt(d.GetInt64(), 10), nil - case KindUint64: - return strconv.FormatUint(d.GetUint64(), 10), nil - case KindFloat32: - return strconv.FormatFloat(float64(d.GetFloat32()), 'f', -1, 32), nil - case KindFloat64: - return strconv.FormatFloat(float64(d.GetFloat64()), 'f', -1, 64), nil - case KindString: - return d.GetString(), nil - case KindBytes: - return d.GetString(), nil - case KindMysqlTime: - return d.GetMysqlTime().String(), nil - case KindMysqlDuration: - return d.GetMysqlDuration().String(), nil - case KindMysqlDecimal: - return d.GetMysqlDecimal().String(), nil - case KindMysqlHex: - return d.GetMysqlHex().ToString(), nil - case KindMysqlBit: - return d.GetMysqlBit().ToString(), nil - case KindMysqlEnum: - return d.GetMysqlEnum().String(), nil - case KindMysqlSet: - return d.GetMysqlSet().String(), nil - default: - return "", errors.Errorf("cannot convert %v(type %T) to string", d.GetValue(), d.GetValue()) - } -} - -func invalidConv(d *Datum, tp byte) (Datum, error) { - return Datum{}, errors.Errorf("cannot convert %v to type %s", d, TypeStr(tp)) -} - -// NewDatum creates a new Datum from an interface{}. -func NewDatum(in interface{}) (d Datum) { - switch x := in.(type) { - case []interface{}: - d.SetValue(MakeDatums(x...)) - default: - d.SetValue(in) - } - return d -} - -// MakeDatums creates datum slice from interfaces. -func MakeDatums(args ...interface{}) []Datum { - datums := make([]Datum, len(args)) - for i, v := range args { - datums[i] = NewDatum(v) - } - return datums -} - -// DatumsToInterfaces converts a datum slice to interface slice. -func DatumsToInterfaces(datums []Datum) []interface{} { - ins := make([]interface{}, len(datums)) - for i, v := range datums { - ins[i] = v.GetValue() - } - return ins -} - -// MinNotNullDatum returns a datum represents minimum not null value. -func MinNotNullDatum() Datum { - return Datum{k: KindMinNotNull} -} - -// MaxValueDatum returns a datum represents max value. -func MaxValueDatum() Datum { - return Datum{k: KindMaxValue} -} diff --git a/vendor/github.com/pingcap/tidb/util/types/etc.go b/vendor/github.com/pingcap/tidb/util/types/etc.go deleted file mode 100644 index c4b777228..000000000 --- a/vendor/github.com/pingcap/tidb/util/types/etc.go +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright 2014 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "fmt" - "io" - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/charset" -) - -// IsTypeBlob returns a boolean indicating whether the tp is a blob type. -func IsTypeBlob(tp byte) bool { - switch tp { - case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob: - return true - default: - return false - } -} - -// IsTypeChar returns a boolean indicating -// whether the tp is the char type like a string type or a varchar type. -func IsTypeChar(tp byte) bool { - switch tp { - case mysql.TypeString, mysql.TypeVarchar: - return true - default: - return false - } -} - -var type2Str = map[byte]string{ - mysql.TypeBit: "bit", - mysql.TypeBlob: "text", - mysql.TypeDate: "date", - mysql.TypeDatetime: "datetime", - mysql.TypeDecimal: "decimal", - mysql.TypeNewDecimal: "decimal", - mysql.TypeDouble: "double", - mysql.TypeEnum: "enum", - mysql.TypeFloat: "float", - mysql.TypeGeometry: "geometry", - mysql.TypeInt24: "mediumint", - mysql.TypeLong: "int", - mysql.TypeLonglong: "bigint", - mysql.TypeLongBlob: "longtext", - mysql.TypeMediumBlob: "mediumtext", - mysql.TypeNull: "null", - mysql.TypeSet: "set", - mysql.TypeShort: "smallint", - mysql.TypeString: "char", - mysql.TypeDuration: "time", - mysql.TypeTimestamp: "timestamp", - mysql.TypeTiny: "tinyint", - mysql.TypeTinyBlob: "tinytext", - mysql.TypeVarchar: "varchar", - mysql.TypeVarString: "var_string", - mysql.TypeYear: "year", -} - -// TypeStr converts tp to a string. -func TypeStr(tp byte) (r string) { - return type2Str[tp] -} - -// TypeToStr converts a field to a string. -// It is used for converting Text to Blob, -// or converting Char to Binary. -// Args: -// tp: type enum -// cs: charset -func TypeToStr(tp byte, cs string) (r string) { - ts := type2Str[tp] - if cs != charset.CharsetBin { - return ts - } - if IsTypeBlob(tp) { - ts = strings.Replace(ts, "text", "blob", 1) - } else if IsTypeChar(tp) { - ts = strings.Replace(ts, "char", "binary", 1) - } - return ts -} - -// EOFAsNil filtrates errors, -// If err is equal to io.EOF returns nil. -func EOFAsNil(err error) error { - if terror.ErrorEqual(err, io.EOF) { - return nil - } - return errors.Trace(err) -} - -// InvOp2 returns an invalid operation error. -func InvOp2(x, y interface{}, o opcode.Op) (interface{}, error) { - return nil, errors.Errorf("Invalid operation: %v %v %v (mismatched types %T and %T)", x, o, y, x, y) -} - -// UndOp returns an undefined error. -func UndOp(x interface{}, o opcode.Op) (interface{}, error) { - return nil, errors.Errorf("Invalid operation: %v%v (operator %v not defined on %T)", o, x, o, x) -} - -// Overflow returns an overflowed error. -func overflow(v interface{}, tp byte) error { - return errors.Errorf("constant %v overflows %s", v, TypeStr(tp)) -} - -// TODO: collate should return errors from Compare. -func collate(x, y []interface{}) (r int) { - nx, ny := len(x), len(y) - - switch { - case nx == 0 && ny != 0: - return -1 - case nx == 0 && ny == 0: - return 0 - case nx != 0 && ny == 0: - return 1 - } - - r = 1 - if nx > ny { - x, y, r = y, x, -r - } - - for i, xi := range x { - // TODO: we may remove collate later, so here just panic error. - c, err := Compare(xi, y[i]) - if err != nil { - panic(fmt.Sprintf("should never happend %v", err)) - } - - if c != 0 { - return c * r - } - } - - if nx == ny { - return 0 - } - - return -r -} - -// Collators maps a boolean value to a collated function. -var Collators = map[bool]func(a, b []interface{}) int{false: collateDesc, true: collate} - -func collateDesc(a, b []interface{}) int { - return -collate(a, b) -} - -// IsOrderedType returns a boolean -// whether the type of y can be used by order by. -func IsOrderedType(v interface{}) (r bool) { - switch v.(type) { - case int, int8, int16, int32, int64, - uint, uint8, uint16, uint32, uint64, - float32, float64, string, []byte, - mysql.Decimal, mysql.Time, mysql.Duration, - mysql.Hex, mysql.Bit, mysql.Enum, mysql.Set: - return true - } - return false -} - -// Clone copies an interface to another interface. -// It does a deep copy. -func Clone(from interface{}) (interface{}, error) { - if from == nil { - return nil, nil - } - switch x := from.(type) { - case uint8, uint16, uint32, uint64, float32, float64, - int16, int8, bool, string, int, int64, int32, - mysql.Time, mysql.Duration, mysql.Decimal, - mysql.Hex, mysql.Bit, mysql.Enum, mysql.Set: - return x, nil - case []byte: - target := make([]byte, len(from.([]byte))) - copy(target, from.([]byte)) - return target, nil - case []interface{}: - var r []interface{} - for _, v := range from.([]interface{}) { - vv, err := Clone(v) - if err != nil { - return nil, err - } - r = append(r, vv) - } - return r, nil - default: - return nil, errors.Errorf("Clone invalid type %T", from) - } -} - -func convergeType(a interface{}, hasDecimal, hasFloat *bool) (x interface{}) { - x = a - switch v := a.(type) { - case bool: - // treat bool as 1 and 0 - if v { - x = int64(1) - } else { - x = int64(0) - } - case int: - x = int64(v) - case int8: - x = int64(v) - case int16: - x = int64(v) - case int32: - x = int64(v) - case int64: - x = int64(v) - case uint: - x = uint64(v) - case uint8: - x = uint64(v) - case uint16: - x = uint64(v) - case uint32: - x = uint64(v) - case uint64: - x = uint64(v) - case float32: - x = float64(v) - *hasFloat = true - case float64: - x = float64(v) - *hasFloat = true - case mysql.Decimal: - x = v - *hasDecimal = true - } - return -} - -// Coerce changes type. -// If a or b is Decimal, changes the both to Decimal. -// Else if a or b is Float, changes the both to Float. -func Coerce(a, b interface{}) (x, y interface{}) { - var hasDecimal bool - var hasFloat bool - x = convergeType(a, &hasDecimal, &hasFloat) - y = convergeType(b, &hasDecimal, &hasFloat) - if hasDecimal { - d, err := mysql.ConvertToDecimal(x) - if err == nil { - x = d - } - d, err = mysql.ConvertToDecimal(y) - if err == nil { - y = d - } - } else if hasFloat { - switch v := x.(type) { - case int64: - x = float64(v) - case uint64: - x = float64(v) - case mysql.Hex: - x = v.ToNumber() - case mysql.Bit: - x = v.ToNumber() - case mysql.Enum: - x = v.ToNumber() - case mysql.Set: - x = v.ToNumber() - } - switch v := y.(type) { - case int64: - y = float64(v) - case uint64: - y = float64(v) - case mysql.Hex: - y = v.ToNumber() - case mysql.Bit: - y = v.ToNumber() - case mysql.Enum: - y = v.ToNumber() - case mysql.Set: - y = v.ToNumber() - } - } - return -} diff --git a/vendor/github.com/pingcap/tidb/util/types/field_type.go b/vendor/github.com/pingcap/tidb/util/types/field_type.go deleted file mode 100644 index 38da5f628..000000000 --- a/vendor/github.com/pingcap/tidb/util/types/field_type.go +++ /dev/null @@ -1,1045 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "fmt" - "strings" - - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/charset" -) - -// UnspecifiedLength is unspecified length. -const ( - UnspecifiedLength int = -1 -) - -// FieldType records field type information. -type FieldType struct { - Tp byte - Flag uint - Flen int - Decimal int - Charset string - Collate string - // Elems is the element list for enum and set type. - Elems []string -} - -// NewFieldType returns a FieldType, -// with a type and other information about field type. -func NewFieldType(tp byte) *FieldType { - return &FieldType{ - Tp: tp, - Flen: UnspecifiedLength, - Decimal: UnspecifiedLength, - } -} - -// CompactStr only considers Tp/CharsetBin/Flen/Deimal. -// This is used for showing column type in infoschema. -func (ft *FieldType) CompactStr() string { - ts := TypeToStr(ft.Tp, ft.Charset) - suffix := "" - switch ft.Tp { - case mysql.TypeEnum, mysql.TypeSet: - // Format is ENUM ('e1', 'e2') or SET ('e1', 'e2') - es := make([]string, 0, len(ft.Elems)) - for _, e := range ft.Elems { - e = strings.Replace(e, "'", "''", -1) - es = append(es, e) - } - suffix = fmt.Sprintf("('%s')", strings.Join(es, "','")) - case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDate: - if ft.Decimal != UnspecifiedLength && ft.Decimal != 0 { - suffix = fmt.Sprintf("(%d)", ft.Decimal) - } - default: - if ft.Flen != UnspecifiedLength { - if ft.Decimal == UnspecifiedLength { - if ft.Tp != mysql.TypeFloat && ft.Tp != mysql.TypeDouble { - suffix = fmt.Sprintf("(%d)", ft.Flen) - } - } else { - suffix = fmt.Sprintf("(%d,%d)", ft.Flen, ft.Decimal) - } - } else if ft.Decimal != UnspecifiedLength { - suffix = fmt.Sprintf("(%d)", ft.Decimal) - } - } - return ts + suffix -} - -// String joins the information of FieldType and -// returns a string. -func (ft *FieldType) String() string { - strs := []string{ft.CompactStr()} - if mysql.HasUnsignedFlag(ft.Flag) { - strs = append(strs, "UNSIGNED") - } - if mysql.HasZerofillFlag(ft.Flag) { - strs = append(strs, "ZEROFILL") - } - if mysql.HasBinaryFlag(ft.Flag) { - strs = append(strs, "BINARY") - } - - if IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp) { - if ft.Charset != "" && ft.Charset != charset.CharsetBin { - strs = append(strs, fmt.Sprintf("CHARACTER SET %s", ft.Charset)) - } - if ft.Collate != "" && ft.Collate != charset.CharsetBin { - strs = append(strs, fmt.Sprintf("COLLATE %s", ft.Collate)) - } - } - - return strings.Join(strs, " ") -} - -// DefaultTypeForValue returns the default FieldType for the value. -func DefaultTypeForValue(value interface{}) *FieldType { - var tp *FieldType - switch x := value.(type) { - case nil: - tp = NewFieldType(mysql.TypeNull) - case bool, int64, int: - tp = NewFieldType(mysql.TypeLonglong) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case uint64: - tp = NewFieldType(mysql.TypeLonglong) - tp.Flag |= mysql.UnsignedFlag - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case string: - tp = NewFieldType(mysql.TypeVarString) - tp.Charset = mysql.DefaultCharset - tp.Collate = mysql.DefaultCollationName - case float64: - tp = NewFieldType(mysql.TypeNewDecimal) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case []byte: - tp = NewFieldType(mysql.TypeBlob) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case mysql.Bit: - tp = NewFieldType(mysql.TypeBit) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case mysql.Hex: - tp = NewFieldType(mysql.TypeVarchar) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case mysql.Time: - tp = NewFieldType(x.Type) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case mysql.Duration: - tp = NewFieldType(mysql.TypeDuration) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case mysql.Decimal: - tp = NewFieldType(mysql.TypeNewDecimal) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case mysql.Enum: - tp = NewFieldType(mysql.TypeEnum) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - case mysql.Set: - tp = NewFieldType(mysql.TypeSet) - tp.Charset = charset.CharsetBin - tp.Collate = charset.CharsetBin - default: - tp = NewFieldType(mysql.TypeDecimal) - } - return tp -} - -// DefaultCharsetForType returns the default charset/collation for mysql type. -func DefaultCharsetForType(tp byte) (string, string) { - switch tp { - case mysql.TypeVarString, mysql.TypeString, mysql.TypeVarchar: - // Default charset for string types is utf8. - return mysql.DefaultCharset, mysql.DefaultCollationName - } - return charset.CharsetBin, charset.CollationBin -} - -// MergeFieldType merges two MySQL type to a new type. -// This is used in hybrid field type expression. -// For example "select case c when 1 then 2 when 2 then 'tidb' from t;" -// The resule field type of the case expression is the merged type of the two when clause. -// See: https://github.com/mysql/mysql-server/blob/5.7/sql/field.cc#L1042 -func MergeFieldType(a byte, b byte) byte { - ia := getFieldTypeIndex(a) - ib := getFieldTypeIndex(b) - return fieldTypeMergeRules[ia][ib] -} - -func getFieldTypeIndex(tp byte) int { - itp := int(tp) - if itp < fieldTypeTearFrom { - return itp - } - return fieldTypeTearFrom + itp - fieldTypeTearTo - 1 -} - -const ( - fieldTypeTearFrom = int(mysql.TypeBit) + 1 - fieldTypeTearTo = int(mysql.TypeNewDecimal) - 1 - fieldTypeNum = fieldTypeTearFrom + (255 - fieldTypeTearTo) -) - -var fieldTypeMergeRules = [fieldTypeNum][fieldTypeNum]byte{ - /* mysql.TypeDecimal -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeShort mysql.TypeLong - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeDecimal, mysql.TypeDecimal, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeTiny -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeTiny, - //mysql.TypeShort mysql.TypeLong - mysql.TypeShort, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeTiny, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeInt24, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeTiny, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeShort -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeShort, - //mysql.TypeShort mysql.TypeLong - mysql.TypeShort, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeShort, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeInt24, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeShort, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeLong -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeLong, - //mysql.TypeShort mysql.TypeLong - mysql.TypeLong, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeLong, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeLong, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeLong, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeFloat -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeDouble, mysql.TypeFloat, - //mysql.TypeShort mysql.TypeLong - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeFloat, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeFloat, mysql.TypeFloat, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeFloat, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeDouble, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeDouble -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeShort mysql.TypeLong - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeDouble, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeDouble, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeDouble, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeNull -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeTiny, - //mysql.TypeShort mysql.TypeLong - mysql.TypeShort, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNull, mysql.TypeTimestamp, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeLonglong, - //mysql.TypeDate mysql.TypeTime - mysql.TypeNewDate, mysql.TypeDuration, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeYear, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeBit, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeEnum, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeSet, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeGeometry, - }, - /* mysql.TypeTimestamp -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeTimestamp, mysql.TypeTimestamp, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeDatetime, mysql.TypeDatetime, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeLonglong -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeLonglong, - //mysql.TypeShort mysql.TypeLong - mysql.TypeLonglong, mysql.TypeLonglong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeLonglong, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeLong, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeLonglong, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeInt24 -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeInt24, - //mysql.TypeShort mysql.TypeLong - mysql.TypeInt24, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeInt24, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeInt24, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeInt24, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeDate -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNewDate, mysql.TypeDatetime, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeNewDate, mysql.TypeDatetime, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeTime -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeDuration, mysql.TypeDatetime, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeDatetime, mysql.TypeDuration, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeDatetime -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeDatetime, mysql.TypeDatetime, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeDatetime, mysql.TypeDatetime, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeYear -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeDecimal, mysql.TypeTiny, - //mysql.TypeShort mysql.TypeLong - mysql.TypeShort, mysql.TypeLong, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeFloat, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeYear, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLonglong, mysql.TypeInt24, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeYear, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeNewDate -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNewDate, mysql.TypeDatetime, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeNewDate, mysql.TypeDatetime, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeDatetime, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeNewDate, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeVarchar -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeVarchar, mysql.TypeVarchar, - }, - /* mysql.TypeBit -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeBit, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeBit, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeNewDecimal -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeShort mysql.TypeLong - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeDouble, mysql.TypeDouble, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeNewDecimal, mysql.TypeNewDecimal, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeNewDecimal, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeNewDecimal, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeEnum -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeEnum, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeSet -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeSet, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeVarchar, - }, - /* mysql.TypeTinyBlob -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeShort mysql.TypeLong - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeDate mysql.TypeTime - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeBit <16>-<245> - mysql.TypeTinyBlob, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeTinyBlob, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeTinyBlob, mysql.TypeTinyBlob, - }, - /* mysql.TypeMediumBlob -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeShort mysql.TypeLong - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeDate mysql.TypeTime - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeBit <16>-<245> - mysql.TypeMediumBlob, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeMediumBlob, mysql.TypeMediumBlob, - }, - /* mysql.TypeLongBlob -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeShort mysql.TypeLong - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeDate mysql.TypeTime - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeBit <16>-<245> - mysql.TypeLongBlob, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeLongBlob, mysql.TypeLongBlob, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeLongBlob, mysql.TypeLongBlob, - }, - /* mysql.TypeBlob -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeShort mysql.TypeLong - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeDate mysql.TypeTime - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeBit <16>-<245> - mysql.TypeBlob, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeBlob, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeBlob, mysql.TypeBlob, - }, - /* mysql.TypeVarString -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeVarchar, mysql.TypeVarchar, - }, - /* mysql.TypeString -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeString, mysql.TypeString, - //mysql.TypeShort mysql.TypeLong - mysql.TypeString, mysql.TypeString, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeString, mysql.TypeString, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeString, mysql.TypeString, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeString, mysql.TypeString, - //mysql.TypeDate mysql.TypeTime - mysql.TypeString, mysql.TypeString, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeString, mysql.TypeString, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeString, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeString, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeString, mysql.TypeString, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeString, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeString, - }, - /* mysql.TypeGeometry -> */ - { - //mysql.TypeDecimal mysql.TypeTiny - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeShort mysql.TypeLong - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeFloat mysql.TypeDouble - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNull mysql.TypeTimestamp - mysql.TypeGeometry, mysql.TypeVarchar, - //mysql.TypeLonglong mysql.TypeInt24 - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDate mysql.TypeTime - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeDatetime mysql.TypeYear - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeNewDate mysql.TypeVarchar - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeBit <16>-<245> - mysql.TypeVarchar, - //mysql.TypeNewDecimal mysql.TypeEnum - mysql.TypeVarchar, mysql.TypeVarchar, - //mysql.TypeSet mysql.TypeTinyBlob - mysql.TypeVarchar, mysql.TypeTinyBlob, - //mysql.TypeMediumBlob mysql.TypeLongBlob - mysql.TypeMediumBlob, mysql.TypeLongBlob, - //mysql.TypeBlob mysql.TypeVarString - mysql.TypeBlob, mysql.TypeVarchar, - //mysql.TypeString mysql.TypeGeometry - mysql.TypeString, mysql.TypeGeometry, - }, -} diff --git a/vendor/github.com/pingcap/tidb/util/types/helper.go b/vendor/github.com/pingcap/tidb/util/types/helper.go deleted file mode 100644 index 182cffcb7..000000000 --- a/vendor/github.com/pingcap/tidb/util/types/helper.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "math" - - "github.com/juju/errors" - "github.com/pingcap/tidb/mysql" -) - -// RoundFloat rounds float val to the nearest integer value with float64 format, like GNU rint function. -// RoundFloat uses default rounding mode, see http://www.gnu.org/software/libc/manual/html_node/Rounding.html -// so we will choose the even number if the result is midway between two representable value. -// e.g, 1.5 -> 2, 2.5 -> 2. -func RoundFloat(f float64) float64 { - if math.Remainder(f, 1.0) < 0 { - return math.Ceil(f) - } - return math.Floor(f) -} - -func getMaxFloat(flen int, decimal int) float64 { - intPartLen := flen - decimal - f := math.Pow10(intPartLen) - f -= math.Pow10(-decimal) - return f -} - -func truncateFloat(f float64, decimal int) float64 { - pow := math.Pow10(decimal) - t := (f - math.Floor(f)) * pow - - round := RoundFloat(t) - - f = math.Floor(f) + round/pow - return f -} - -// TruncateFloat tries to truncate f. -// If the result exceeds the max/min float that flen/decimal allowed, returns the max/min float allowed. -func TruncateFloat(f float64, flen int, decimal int) (float64, error) { - if math.IsNaN(f) { - // nan returns 0 - return 0, nil - } - - maxF := getMaxFloat(flen, decimal) - - if !math.IsInf(f, 0) { - f = truncateFloat(f, decimal) - } - - if f > maxF { - f = maxF - } else if f < -maxF { - f = -maxF - } - - return f, nil -} - -// CalculateSum adds v to sum. -func CalculateSum(sum interface{}, v interface{}) (interface{}, error) { - // for avg and sum calculation - // avg and sum use decimal for integer and decimal type, use float for others - // see https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html - var ( - data interface{} - err error - ) - - switch y := v.(type) { - case int, uint, int8, uint8, int16, uint16, int32, uint32, int64, uint64: - data, err = mysql.ConvertToDecimal(v) - case mysql.Decimal: - data = y - case nil: - data = nil - default: - data, err = ToFloat64(v) - } - - if err != nil { - return nil, errors.Trace(err) - } - if data == nil { - return sum, nil - } - switch x := sum.(type) { - case nil: - return data, nil - case float64: - return x + data.(float64), nil - case mysql.Decimal: - return x.Add(data.(mysql.Decimal)), nil - default: - return nil, errors.Errorf("invalid value %v(%T) for aggregate", x, x) - } -} diff --git a/vendor/github.com/pingcap/tidb/util/types/overflow.go b/vendor/github.com/pingcap/tidb/util/types/overflow.go deleted file mode 100644 index 9a56e7166..000000000 --- a/vendor/github.com/pingcap/tidb/util/types/overflow.go +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package types - -import ( - "math" - - "github.com/juju/errors" -) - -// ErrArithOverflow is the error for arthimetic operation overflow. -var ErrArithOverflow = errors.New("operation overflow") - -// AddUint64 adds uint64 a and b if no overflow, else returns error. -func AddUint64(a uint64, b uint64) (uint64, error) { - if math.MaxUint64-a < b { - return 0, errors.Trace(ErrArithOverflow) - } - return a + b, nil -} - -// AddInt64 adds int64 a and b if no overflow, otherwise returns error. -func AddInt64(a int64, b int64) (int64, error) { - if (a > 0 && b > 0 && math.MaxInt64-a < b) || - (a < 0 && b < 0 && math.MinInt64-a > b) { - return 0, errors.Trace(ErrArithOverflow) - } - - return a + b, nil -} - -// AddInteger adds uint64 a and int64 b and returns uint64 if no overflow error. -func AddInteger(a uint64, b int64) (uint64, error) { - if b >= 0 { - return AddUint64(a, uint64(b)) - } - - if uint64(-b) > a { - return 0, errors.Trace(ErrArithOverflow) - } - return a - uint64(-b), nil -} - -// SubUint64 substracts uint64 a with b and returns uint64 if no overflow error. -func SubUint64(a uint64, b uint64) (uint64, error) { - if a < b { - return 0, errors.Trace(ErrArithOverflow) - } - return a - b, nil -} - -// SubInt64 substracts int64 a with b and returns int64 if no overflow error. -func SubInt64(a int64, b int64) (int64, error) { - if (a > 0 && b < 0 && math.MaxInt64-a < -b) || - (a < 0 && b > 0 && math.MinInt64-a > -b) || - (a == 0 && b == math.MinInt64) { - return 0, errors.Trace(ErrArithOverflow) - } - return a - b, nil -} - -// SubUintWithInt substracts uint64 a with int64 b and returns uint64 if no overflow error. -func SubUintWithInt(a uint64, b int64) (uint64, error) { - if b < 0 { - return AddUint64(a, uint64(-b)) - } - return SubUint64(a, uint64(b)) -} - -// SubIntWithUint substracts int64 a with uint64 b and returns uint64 if no overflow error. -func SubIntWithUint(a int64, b uint64) (uint64, error) { - if a < 0 || uint64(a) < b { - return 0, errors.Trace(ErrArithOverflow) - } - return uint64(a) - b, nil -} - -// MulUint64 multiplies uint64 a and b and returns uint64 if no overflow error. -func MulUint64(a uint64, b uint64) (uint64, error) { - if b > 0 && a > math.MaxUint64/b { - return 0, errors.Trace(ErrArithOverflow) - } - return a * b, nil -} - -// MulInt64 multiplies int64 a and b and returns int64 if no overflow error. -func MulInt64(a int64, b int64) (int64, error) { - if a == 0 || b == 0 { - return 0, nil - } - - var ( - res uint64 - err error - negative = false - ) - - if a > 0 && b > 0 { - res, err = MulUint64(uint64(a), uint64(b)) - } else if a < 0 && b < 0 { - res, err = MulUint64(uint64(-a), uint64(-b)) - } else if a < 0 && b > 0 { - negative = true - res, err = MulUint64(uint64(-a), uint64(b)) - } else { - negative = true - res, err = MulUint64(uint64(a), uint64(-b)) - } - - if err != nil { - return 0, errors.Trace(err) - } - - if negative { - // negative result - if res > math.MaxInt64+1 { - return 0, errors.Trace(ErrArithOverflow) - } - - return -int64(res), nil - } - - // positive result - if res > math.MaxInt64 { - return 0, errors.Trace(ErrArithOverflow) - } - - return int64(res), nil -} - -// MulInteger multiplies uint64 a and int64 b, and returns uint64 if no overflow error. -func MulInteger(a uint64, b int64) (uint64, error) { - if a == 0 || b == 0 { - return 0, nil - } - - if b < 0 { - return 0, errors.Trace(ErrArithOverflow) - } - - return MulUint64(a, uint64(b)) -} - -// DivInt64 divides int64 a with b, returns int64 if no overflow error. -// It just checks overflow, if b is zero, a "divide by zero" panic throws. -func DivInt64(a int64, b int64) (int64, error) { - if a == math.MinInt64 && b == -1 { - return 0, errors.Trace(ErrArithOverflow) - } - - return a / b, nil -} - -// DivUintWithInt divides uint64 a with int64 b, returns uint64 if no overflow error. -// It just checks overflow, if b is zero, a "divide by zero" panic throws. -func DivUintWithInt(a uint64, b int64) (uint64, error) { - if b < 0 { - if a != 0 && uint64(-b) <= a { - return 0, errors.Trace(ErrArithOverflow) - } - - return 0, nil - } - - return a / uint64(b), nil -} - -// DivIntWithUint divides int64 a with uint64 b, returns uint64 if no overflow error. -// It just checks overflow, if b is zero, a "divide by zero" panic throws. -func DivIntWithUint(a int64, b uint64) (uint64, error) { - if a < 0 { - if uint64(-a) >= b { - return 0, errors.Trace(ErrArithOverflow) - } - - return 0, nil - } - - return uint64(a) / b, nil -} diff --git a/vendor/github.com/syndtr/goleveldb/LICENSE b/vendor/github.com/syndtr/goleveldb/LICENSE deleted file mode 100644 index 4a772d1ab..000000000 --- a/vendor/github.com/syndtr/goleveldb/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2012 Suryandaru Triandana -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/batch.go b/vendor/github.com/syndtr/goleveldb/leveldb/batch.go deleted file mode 100644 index 652fa4124..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/batch.go +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "encoding/binary" - "fmt" - - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/memdb" - "github.com/syndtr/goleveldb/leveldb/storage" -) - -// ErrBatchCorrupted records reason of batch corruption. -type ErrBatchCorrupted struct { - Reason string -} - -func (e *ErrBatchCorrupted) Error() string { - return fmt.Sprintf("leveldb: batch corrupted: %s", e.Reason) -} - -func newErrBatchCorrupted(reason string) error { - return errors.NewErrCorrupted(storage.FileDesc{}, &ErrBatchCorrupted{reason}) -} - -const ( - batchHdrLen = 8 + 4 - batchGrowRec = 3000 -) - -// BatchReplay wraps basic batch operations. -type BatchReplay interface { - Put(key, value []byte) - Delete(key []byte) -} - -// Batch is a write batch. -type Batch struct { - data []byte - rLen, bLen int - seq uint64 - sync bool -} - -func (b *Batch) grow(n int) { - off := len(b.data) - if off == 0 { - off = batchHdrLen - if b.data != nil { - b.data = b.data[:off] - } - } - if cap(b.data)-off < n { - if b.data == nil { - b.data = make([]byte, off, off+n) - } else { - odata := b.data - div := 1 - if b.rLen > batchGrowRec { - div = b.rLen / batchGrowRec - } - b.data = make([]byte, off, off+n+(off-batchHdrLen)/div) - copy(b.data, odata) - } - } -} - -func (b *Batch) appendRec(kt keyType, key, value []byte) { - n := 1 + binary.MaxVarintLen32 + len(key) - if kt == keyTypeVal { - n += binary.MaxVarintLen32 + len(value) - } - b.grow(n) - off := len(b.data) - data := b.data[:off+n] - data[off] = byte(kt) - off++ - off += binary.PutUvarint(data[off:], uint64(len(key))) - copy(data[off:], key) - off += len(key) - if kt == keyTypeVal { - off += binary.PutUvarint(data[off:], uint64(len(value))) - copy(data[off:], value) - off += len(value) - } - b.data = data[:off] - b.rLen++ - // Include 8-byte ikey header - b.bLen += len(key) + len(value) + 8 -} - -// Put appends 'put operation' of the given key/value pair to the batch. -// It is safe to modify the contents of the argument after Put returns. -func (b *Batch) Put(key, value []byte) { - b.appendRec(keyTypeVal, key, value) -} - -// Delete appends 'delete operation' of the given key to the batch. -// It is safe to modify the contents of the argument after Delete returns. -func (b *Batch) Delete(key []byte) { - b.appendRec(keyTypeDel, key, nil) -} - -// Dump dumps batch contents. The returned slice can be loaded into the -// batch using Load method. -// The returned slice is not its own copy, so the contents should not be -// modified. -func (b *Batch) Dump() []byte { - return b.encode() -} - -// Load loads given slice into the batch. Previous contents of the batch -// will be discarded. -// The given slice will not be copied and will be used as batch buffer, so -// it is not safe to modify the contents of the slice. -func (b *Batch) Load(data []byte) error { - return b.decode(0, data) -} - -// Replay replays batch contents. -func (b *Batch) Replay(r BatchReplay) error { - return b.decodeRec(func(i int, kt keyType, key, value []byte) error { - switch kt { - case keyTypeVal: - r.Put(key, value) - case keyTypeDel: - r.Delete(key) - } - return nil - }) -} - -// Len returns number of records in the batch. -func (b *Batch) Len() int { - return b.rLen -} - -// Reset resets the batch. -func (b *Batch) Reset() { - b.data = b.data[:0] - b.seq = 0 - b.rLen = 0 - b.bLen = 0 - b.sync = false -} - -func (b *Batch) init(sync bool) { - b.sync = sync -} - -func (b *Batch) append(p *Batch) { - if p.rLen > 0 { - b.grow(len(p.data) - batchHdrLen) - b.data = append(b.data, p.data[batchHdrLen:]...) - b.rLen += p.rLen - } - if p.sync { - b.sync = true - } -} - -// size returns sums of key/value pair length plus 8-bytes ikey. -func (b *Batch) size() int { - return b.bLen -} - -func (b *Batch) encode() []byte { - b.grow(0) - binary.LittleEndian.PutUint64(b.data, b.seq) - binary.LittleEndian.PutUint32(b.data[8:], uint32(b.rLen)) - - return b.data -} - -func (b *Batch) decode(prevSeq uint64, data []byte) error { - if len(data) < batchHdrLen { - return newErrBatchCorrupted("too short") - } - - b.seq = binary.LittleEndian.Uint64(data) - if b.seq < prevSeq { - return newErrBatchCorrupted("invalid sequence number") - } - b.rLen = int(binary.LittleEndian.Uint32(data[8:])) - if b.rLen < 0 { - return newErrBatchCorrupted("invalid records length") - } - // No need to be precise at this point, it won't be used anyway - b.bLen = len(data) - batchHdrLen - b.data = data - - return nil -} - -func (b *Batch) decodeRec(f func(i int, kt keyType, key, value []byte) error) error { - off := batchHdrLen - for i := 0; i < b.rLen; i++ { - if off >= len(b.data) { - return newErrBatchCorrupted("invalid records length") - } - - kt := keyType(b.data[off]) - if kt > keyTypeVal { - panic(kt) - return newErrBatchCorrupted("bad record: invalid type") - } - off++ - - x, n := binary.Uvarint(b.data[off:]) - off += n - if n <= 0 || off+int(x) > len(b.data) { - return newErrBatchCorrupted("bad record: invalid key length") - } - key := b.data[off : off+int(x)] - off += int(x) - var value []byte - if kt == keyTypeVal { - x, n := binary.Uvarint(b.data[off:]) - off += n - if n <= 0 || off+int(x) > len(b.data) { - return newErrBatchCorrupted("bad record: invalid value length") - } - value = b.data[off : off+int(x)] - off += int(x) - } - - if err := f(i, kt, key, value); err != nil { - return err - } - } - - return nil -} - -func (b *Batch) memReplay(to *memdb.DB) error { - var ikScratch []byte - return b.decodeRec(func(i int, kt keyType, key, value []byte) error { - ikScratch = makeInternalKey(ikScratch, key, b.seq+uint64(i), kt) - return to.Put(ikScratch, value) - }) -} - -func (b *Batch) memDecodeAndReplay(prevSeq uint64, data []byte, to *memdb.DB) error { - if err := b.decode(prevSeq, data); err != nil { - return err - } - return b.memReplay(to) -} - -func (b *Batch) revertMemReplay(to *memdb.DB) error { - var ikScratch []byte - return b.decodeRec(func(i int, kt keyType, key, value []byte) error { - ikScratch := makeInternalKey(ikScratch, key, b.seq+uint64(i), kt) - return to.Delete(ikScratch) - }) -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/cache/cache.go b/vendor/github.com/syndtr/goleveldb/leveldb/cache/cache.go deleted file mode 100644 index a287d0e5e..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/cache/cache.go +++ /dev/null @@ -1,684 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package cache provides interface and implementation of a cache algorithms. -package cache - -import ( - "sync" - "sync/atomic" - "unsafe" - - "github.com/syndtr/goleveldb/leveldb/util" -) - -// Cacher provides interface to implements a caching functionality. -// An implementation must be goroutine-safe. -type Cacher interface { - // Capacity returns cache capacity. - Capacity() int - - // SetCapacity sets cache capacity. - SetCapacity(capacity int) - - // Promote promotes the 'cache node'. - Promote(n *Node) - - // Ban evicts the 'cache node' and prevent subsequent 'promote'. - Ban(n *Node) - - // Evict evicts the 'cache node'. - Evict(n *Node) - - // EvictNS evicts 'cache node' with the given namespace. - EvictNS(ns uint64) - - // EvictAll evicts all 'cache node'. - EvictAll() - - // Close closes the 'cache tree' - Close() error -} - -// Value is a 'cacheable object'. It may implements util.Releaser, if -// so the the Release method will be called once object is released. -type Value interface{} - -// NamespaceGetter provides convenient wrapper for namespace. -type NamespaceGetter struct { - Cache *Cache - NS uint64 -} - -// Get simply calls Cache.Get() method. -func (g *NamespaceGetter) Get(key uint64, setFunc func() (size int, value Value)) *Handle { - return g.Cache.Get(g.NS, key, setFunc) -} - -// The hash tables implementation is based on: -// "Dynamic-Sized Nonblocking Hash Tables", by Yujie Liu, -// Kunlong Zhang, and Michael Spear. -// ACM Symposium on Principles of Distributed Computing, Jul 2014. - -const ( - mInitialSize = 1 << 4 - mOverflowThreshold = 1 << 5 - mOverflowGrowThreshold = 1 << 7 -) - -type mBucket struct { - mu sync.Mutex - node []*Node - frozen bool -} - -func (b *mBucket) freeze() []*Node { - b.mu.Lock() - defer b.mu.Unlock() - if !b.frozen { - b.frozen = true - } - return b.node -} - -func (b *mBucket) get(r *Cache, h *mNode, hash uint32, ns, key uint64, noset bool) (done, added bool, n *Node) { - b.mu.Lock() - - if b.frozen { - b.mu.Unlock() - return - } - - // Scan the node. - for _, n := range b.node { - if n.hash == hash && n.ns == ns && n.key == key { - atomic.AddInt32(&n.ref, 1) - b.mu.Unlock() - return true, false, n - } - } - - // Get only. - if noset { - b.mu.Unlock() - return true, false, nil - } - - // Create node. - n = &Node{ - r: r, - hash: hash, - ns: ns, - key: key, - ref: 1, - } - // Add node to bucket. - b.node = append(b.node, n) - bLen := len(b.node) - b.mu.Unlock() - - // Update counter. - grow := atomic.AddInt32(&r.nodes, 1) >= h.growThreshold - if bLen > mOverflowThreshold { - grow = grow || atomic.AddInt32(&h.overflow, 1) >= mOverflowGrowThreshold - } - - // Grow. - if grow && atomic.CompareAndSwapInt32(&h.resizeInProgess, 0, 1) { - nhLen := len(h.buckets) << 1 - nh := &mNode{ - buckets: make([]unsafe.Pointer, nhLen), - mask: uint32(nhLen) - 1, - pred: unsafe.Pointer(h), - growThreshold: int32(nhLen * mOverflowThreshold), - shrinkThreshold: int32(nhLen >> 1), - } - ok := atomic.CompareAndSwapPointer(&r.mHead, unsafe.Pointer(h), unsafe.Pointer(nh)) - if !ok { - panic("BUG: failed swapping head") - } - go nh.initBuckets() - } - - return true, true, n -} - -func (b *mBucket) delete(r *Cache, h *mNode, hash uint32, ns, key uint64) (done, deleted bool) { - b.mu.Lock() - - if b.frozen { - b.mu.Unlock() - return - } - - // Scan the node. - var ( - n *Node - bLen int - ) - for i := range b.node { - n = b.node[i] - if n.ns == ns && n.key == key { - if atomic.LoadInt32(&n.ref) == 0 { - deleted = true - - // Call releaser. - if n.value != nil { - if r, ok := n.value.(util.Releaser); ok { - r.Release() - } - n.value = nil - } - - // Remove node from bucket. - b.node = append(b.node[:i], b.node[i+1:]...) - bLen = len(b.node) - } - break - } - } - b.mu.Unlock() - - if deleted { - // Call OnDel. - for _, f := range n.onDel { - f() - } - - // Update counter. - atomic.AddInt32(&r.size, int32(n.size)*-1) - shrink := atomic.AddInt32(&r.nodes, -1) < h.shrinkThreshold - if bLen >= mOverflowThreshold { - atomic.AddInt32(&h.overflow, -1) - } - - // Shrink. - if shrink && len(h.buckets) > mInitialSize && atomic.CompareAndSwapInt32(&h.resizeInProgess, 0, 1) { - nhLen := len(h.buckets) >> 1 - nh := &mNode{ - buckets: make([]unsafe.Pointer, nhLen), - mask: uint32(nhLen) - 1, - pred: unsafe.Pointer(h), - growThreshold: int32(nhLen * mOverflowThreshold), - shrinkThreshold: int32(nhLen >> 1), - } - ok := atomic.CompareAndSwapPointer(&r.mHead, unsafe.Pointer(h), unsafe.Pointer(nh)) - if !ok { - panic("BUG: failed swapping head") - } - go nh.initBuckets() - } - } - - return true, deleted -} - -type mNode struct { - buckets []unsafe.Pointer // []*mBucket - mask uint32 - pred unsafe.Pointer // *mNode - resizeInProgess int32 - - overflow int32 - growThreshold int32 - shrinkThreshold int32 -} - -func (n *mNode) initBucket(i uint32) *mBucket { - if b := (*mBucket)(atomic.LoadPointer(&n.buckets[i])); b != nil { - return b - } - - p := (*mNode)(atomic.LoadPointer(&n.pred)) - if p != nil { - var node []*Node - if n.mask > p.mask { - // Grow. - pb := (*mBucket)(atomic.LoadPointer(&p.buckets[i&p.mask])) - if pb == nil { - pb = p.initBucket(i & p.mask) - } - m := pb.freeze() - // Split nodes. - for _, x := range m { - if x.hash&n.mask == i { - node = append(node, x) - } - } - } else { - // Shrink. - pb0 := (*mBucket)(atomic.LoadPointer(&p.buckets[i])) - if pb0 == nil { - pb0 = p.initBucket(i) - } - pb1 := (*mBucket)(atomic.LoadPointer(&p.buckets[i+uint32(len(n.buckets))])) - if pb1 == nil { - pb1 = p.initBucket(i + uint32(len(n.buckets))) - } - m0 := pb0.freeze() - m1 := pb1.freeze() - // Merge nodes. - node = make([]*Node, 0, len(m0)+len(m1)) - node = append(node, m0...) - node = append(node, m1...) - } - b := &mBucket{node: node} - if atomic.CompareAndSwapPointer(&n.buckets[i], nil, unsafe.Pointer(b)) { - if len(node) > mOverflowThreshold { - atomic.AddInt32(&n.overflow, int32(len(node)-mOverflowThreshold)) - } - return b - } - } - - return (*mBucket)(atomic.LoadPointer(&n.buckets[i])) -} - -func (n *mNode) initBuckets() { - for i := range n.buckets { - n.initBucket(uint32(i)) - } - atomic.StorePointer(&n.pred, nil) -} - -// Cache is a 'cache map'. -type Cache struct { - mu sync.RWMutex - mHead unsafe.Pointer // *mNode - nodes int32 - size int32 - cacher Cacher - closed bool -} - -// NewCache creates a new 'cache map'. The cacher is optional and -// may be nil. -func NewCache(cacher Cacher) *Cache { - h := &mNode{ - buckets: make([]unsafe.Pointer, mInitialSize), - mask: mInitialSize - 1, - growThreshold: int32(mInitialSize * mOverflowThreshold), - shrinkThreshold: 0, - } - for i := range h.buckets { - h.buckets[i] = unsafe.Pointer(&mBucket{}) - } - r := &Cache{ - mHead: unsafe.Pointer(h), - cacher: cacher, - } - return r -} - -func (r *Cache) getBucket(hash uint32) (*mNode, *mBucket) { - h := (*mNode)(atomic.LoadPointer(&r.mHead)) - i := hash & h.mask - b := (*mBucket)(atomic.LoadPointer(&h.buckets[i])) - if b == nil { - b = h.initBucket(i) - } - return h, b -} - -func (r *Cache) delete(n *Node) bool { - for { - h, b := r.getBucket(n.hash) - done, deleted := b.delete(r, h, n.hash, n.ns, n.key) - if done { - return deleted - } - } - return false -} - -// Nodes returns number of 'cache node' in the map. -func (r *Cache) Nodes() int { - return int(atomic.LoadInt32(&r.nodes)) -} - -// Size returns sums of 'cache node' size in the map. -func (r *Cache) Size() int { - return int(atomic.LoadInt32(&r.size)) -} - -// Capacity returns cache capacity. -func (r *Cache) Capacity() int { - if r.cacher == nil { - return 0 - } - return r.cacher.Capacity() -} - -// SetCapacity sets cache capacity. -func (r *Cache) SetCapacity(capacity int) { - if r.cacher != nil { - r.cacher.SetCapacity(capacity) - } -} - -// Get gets 'cache node' with the given namespace and key. -// If cache node is not found and setFunc is not nil, Get will atomically creates -// the 'cache node' by calling setFunc. Otherwise Get will returns nil. -// -// The returned 'cache handle' should be released after use by calling Release -// method. -func (r *Cache) Get(ns, key uint64, setFunc func() (size int, value Value)) *Handle { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return nil - } - - hash := murmur32(ns, key, 0xf00) - for { - h, b := r.getBucket(hash) - done, _, n := b.get(r, h, hash, ns, key, setFunc == nil) - if done { - if n != nil { - n.mu.Lock() - if n.value == nil { - if setFunc == nil { - n.mu.Unlock() - n.unref() - return nil - } - - n.size, n.value = setFunc() - if n.value == nil { - n.size = 0 - n.mu.Unlock() - n.unref() - return nil - } - atomic.AddInt32(&r.size, int32(n.size)) - } - n.mu.Unlock() - if r.cacher != nil { - r.cacher.Promote(n) - } - return &Handle{unsafe.Pointer(n)} - } - - break - } - } - return nil -} - -// Delete removes and ban 'cache node' with the given namespace and key. -// A banned 'cache node' will never inserted into the 'cache tree'. Ban -// only attributed to the particular 'cache node', so when a 'cache node' -// is recreated it will not be banned. -// -// If onDel is not nil, then it will be executed if such 'cache node' -// doesn't exist or once the 'cache node' is released. -// -// Delete return true is such 'cache node' exist. -func (r *Cache) Delete(ns, key uint64, onDel func()) bool { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return false - } - - hash := murmur32(ns, key, 0xf00) - for { - h, b := r.getBucket(hash) - done, _, n := b.get(r, h, hash, ns, key, true) - if done { - if n != nil { - if onDel != nil { - n.mu.Lock() - n.onDel = append(n.onDel, onDel) - n.mu.Unlock() - } - if r.cacher != nil { - r.cacher.Ban(n) - } - n.unref() - return true - } - - break - } - } - - if onDel != nil { - onDel() - } - - return false -} - -// Evict evicts 'cache node' with the given namespace and key. This will -// simply call Cacher.Evict. -// -// Evict return true is such 'cache node' exist. -func (r *Cache) Evict(ns, key uint64) bool { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return false - } - - hash := murmur32(ns, key, 0xf00) - for { - h, b := r.getBucket(hash) - done, _, n := b.get(r, h, hash, ns, key, true) - if done { - if n != nil { - if r.cacher != nil { - r.cacher.Evict(n) - } - n.unref() - return true - } - - break - } - } - - return false -} - -// EvictNS evicts 'cache node' with the given namespace. This will -// simply call Cacher.EvictNS. -func (r *Cache) EvictNS(ns uint64) { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return - } - - if r.cacher != nil { - r.cacher.EvictNS(ns) - } -} - -// EvictAll evicts all 'cache node'. This will simply call Cacher.EvictAll. -func (r *Cache) EvictAll() { - r.mu.RLock() - defer r.mu.RUnlock() - if r.closed { - return - } - - if r.cacher != nil { - r.cacher.EvictAll() - } -} - -// Close closes the 'cache map' and releases all 'cache node'. -func (r *Cache) Close() error { - r.mu.Lock() - if !r.closed { - r.closed = true - - if r.cacher != nil { - if err := r.cacher.Close(); err != nil { - return err - } - } - - h := (*mNode)(r.mHead) - h.initBuckets() - - for i := range h.buckets { - b := (*mBucket)(h.buckets[i]) - for _, n := range b.node { - // Call releaser. - if n.value != nil { - if r, ok := n.value.(util.Releaser); ok { - r.Release() - } - n.value = nil - } - - // Call OnDel. - for _, f := range n.onDel { - f() - } - } - } - } - r.mu.Unlock() - return nil -} - -// Node is a 'cache node'. -type Node struct { - r *Cache - - hash uint32 - ns, key uint64 - - mu sync.Mutex - size int - value Value - - ref int32 - onDel []func() - - CacheData unsafe.Pointer -} - -// NS returns this 'cache node' namespace. -func (n *Node) NS() uint64 { - return n.ns -} - -// Key returns this 'cache node' key. -func (n *Node) Key() uint64 { - return n.key -} - -// Size returns this 'cache node' size. -func (n *Node) Size() int { - return n.size -} - -// Value returns this 'cache node' value. -func (n *Node) Value() Value { - return n.value -} - -// Ref returns this 'cache node' ref counter. -func (n *Node) Ref() int32 { - return atomic.LoadInt32(&n.ref) -} - -// GetHandle returns an handle for this 'cache node'. -func (n *Node) GetHandle() *Handle { - if atomic.AddInt32(&n.ref, 1) <= 1 { - panic("BUG: Node.GetHandle on zero ref") - } - return &Handle{unsafe.Pointer(n)} -} - -func (n *Node) unref() { - if atomic.AddInt32(&n.ref, -1) == 0 { - n.r.delete(n) - } -} - -func (n *Node) unrefLocked() { - if atomic.AddInt32(&n.ref, -1) == 0 { - n.r.mu.RLock() - if !n.r.closed { - n.r.delete(n) - } - n.r.mu.RUnlock() - } -} - -// Handle is a 'cache handle' of a 'cache node'. -type Handle struct { - n unsafe.Pointer // *Node -} - -// Value returns the value of the 'cache node'. -func (h *Handle) Value() Value { - n := (*Node)(atomic.LoadPointer(&h.n)) - if n != nil { - return n.value - } - return nil -} - -// Release releases this 'cache handle'. -// It is safe to call release multiple times. -func (h *Handle) Release() { - nPtr := atomic.LoadPointer(&h.n) - if nPtr != nil && atomic.CompareAndSwapPointer(&h.n, nPtr, nil) { - n := (*Node)(nPtr) - n.unrefLocked() - } -} - -func murmur32(ns, key uint64, seed uint32) uint32 { - const ( - m = uint32(0x5bd1e995) - r = 24 - ) - - k1 := uint32(ns >> 32) - k2 := uint32(ns) - k3 := uint32(key >> 32) - k4 := uint32(key) - - k1 *= m - k1 ^= k1 >> r - k1 *= m - - k2 *= m - k2 ^= k2 >> r - k2 *= m - - k3 *= m - k3 ^= k3 >> r - k3 *= m - - k4 *= m - k4 ^= k4 >> r - k4 *= m - - h := seed - - h *= m - h ^= k1 - h *= m - h ^= k2 - h *= m - h ^= k3 - h *= m - h ^= k4 - - h ^= h >> 13 - h *= m - h ^= h >> 15 - - return h -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/cache/lru.go b/vendor/github.com/syndtr/goleveldb/leveldb/cache/lru.go deleted file mode 100644 index d9a84cde1..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/cache/lru.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package cache - -import ( - "sync" - "unsafe" -) - -type lruNode struct { - n *Node - h *Handle - ban bool - - next, prev *lruNode -} - -func (n *lruNode) insert(at *lruNode) { - x := at.next - at.next = n - n.prev = at - n.next = x - x.prev = n -} - -func (n *lruNode) remove() { - if n.prev != nil { - n.prev.next = n.next - n.next.prev = n.prev - n.prev = nil - n.next = nil - } else { - panic("BUG: removing removed node") - } -} - -type lru struct { - mu sync.Mutex - capacity int - used int - recent lruNode -} - -func (r *lru) reset() { - r.recent.next = &r.recent - r.recent.prev = &r.recent - r.used = 0 -} - -func (r *lru) Capacity() int { - r.mu.Lock() - defer r.mu.Unlock() - return r.capacity -} - -func (r *lru) SetCapacity(capacity int) { - var evicted []*lruNode - - r.mu.Lock() - r.capacity = capacity - for r.used > r.capacity { - rn := r.recent.prev - if rn == nil { - panic("BUG: invalid LRU used or capacity counter") - } - rn.remove() - rn.n.CacheData = nil - r.used -= rn.n.Size() - evicted = append(evicted, rn) - } - r.mu.Unlock() - - for _, rn := range evicted { - rn.h.Release() - } -} - -func (r *lru) Promote(n *Node) { - var evicted []*lruNode - - r.mu.Lock() - if n.CacheData == nil { - if n.Size() <= r.capacity { - rn := &lruNode{n: n, h: n.GetHandle()} - rn.insert(&r.recent) - n.CacheData = unsafe.Pointer(rn) - r.used += n.Size() - - for r.used > r.capacity { - rn := r.recent.prev - if rn == nil { - panic("BUG: invalid LRU used or capacity counter") - } - rn.remove() - rn.n.CacheData = nil - r.used -= rn.n.Size() - evicted = append(evicted, rn) - } - } - } else { - rn := (*lruNode)(n.CacheData) - if !rn.ban { - rn.remove() - rn.insert(&r.recent) - } - } - r.mu.Unlock() - - for _, rn := range evicted { - rn.h.Release() - } -} - -func (r *lru) Ban(n *Node) { - r.mu.Lock() - if n.CacheData == nil { - n.CacheData = unsafe.Pointer(&lruNode{n: n, ban: true}) - } else { - rn := (*lruNode)(n.CacheData) - if !rn.ban { - rn.remove() - rn.ban = true - r.used -= rn.n.Size() - r.mu.Unlock() - - rn.h.Release() - rn.h = nil - return - } - } - r.mu.Unlock() -} - -func (r *lru) Evict(n *Node) { - r.mu.Lock() - rn := (*lruNode)(n.CacheData) - if rn == nil || rn.ban { - r.mu.Unlock() - return - } - n.CacheData = nil - r.mu.Unlock() - - rn.h.Release() -} - -func (r *lru) EvictNS(ns uint64) { - var evicted []*lruNode - - r.mu.Lock() - for e := r.recent.prev; e != &r.recent; { - rn := e - e = e.prev - if rn.n.NS() == ns { - rn.remove() - rn.n.CacheData = nil - r.used -= rn.n.Size() - evicted = append(evicted, rn) - } - } - r.mu.Unlock() - - for _, rn := range evicted { - rn.h.Release() - } -} - -func (r *lru) EvictAll() { - r.mu.Lock() - back := r.recent.prev - for rn := back; rn != &r.recent; rn = rn.prev { - rn.n.CacheData = nil - } - r.reset() - r.mu.Unlock() - - for rn := back; rn != &r.recent; rn = rn.prev { - rn.h.Release() - } -} - -func (r *lru) Close() error { - return nil -} - -// NewLRU create a new LRU-cache. -func NewLRU(capacity int) Cacher { - r := &lru{capacity: capacity} - r.reset() - return r -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/comparer.go b/vendor/github.com/syndtr/goleveldb/leveldb/comparer.go deleted file mode 100644 index 248bf7c21..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/comparer.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import "github.com/syndtr/goleveldb/leveldb/comparer" - -type iComparer struct { - ucmp comparer.Comparer -} - -func (icmp *iComparer) uName() string { - return icmp.ucmp.Name() -} - -func (icmp *iComparer) uCompare(a, b []byte) int { - return icmp.ucmp.Compare(a, b) -} - -func (icmp *iComparer) uSeparator(dst, a, b []byte) []byte { - return icmp.ucmp.Separator(dst, a, b) -} - -func (icmp *iComparer) uSuccessor(dst, b []byte) []byte { - return icmp.ucmp.Successor(dst, b) -} - -func (icmp *iComparer) Name() string { - return icmp.uName() -} - -func (icmp *iComparer) Compare(a, b []byte) int { - x := icmp.ucmp.Compare(internalKey(a).ukey(), internalKey(b).ukey()) - if x == 0 { - if m, n := internalKey(a).num(), internalKey(b).num(); m > n { - x = -1 - } else if m < n { - x = 1 - } - } - return x -} - -func (icmp *iComparer) Separator(dst, a, b []byte) []byte { - ua, ub := internalKey(a).ukey(), internalKey(b).ukey() - dst = icmp.ucmp.Separator(dst, ua, ub) - if dst == nil { - return nil - } - if len(dst) < len(ua) && icmp.uCompare(ua, dst) < 0 { - dst = append(dst, keyMaxNumBytes...) - } else { - // Did not close possibilities that n maybe longer than len(ub). - dst = append(dst, a[len(a)-8:]...) - } - return dst -} - -func (icmp *iComparer) Successor(dst, b []byte) []byte { - ub := internalKey(b).ukey() - dst = icmp.ucmp.Successor(dst, ub) - if dst == nil { - return nil - } - if len(dst) < len(ub) && icmp.uCompare(ub, dst) < 0 { - dst = append(dst, keyMaxNumBytes...) - } else { - // Did not close possibilities that n maybe longer than len(ub). - dst = append(dst, b[len(b)-8:]...) - } - return dst -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/comparer/bytes_comparer.go b/vendor/github.com/syndtr/goleveldb/leveldb/comparer/bytes_comparer.go deleted file mode 100644 index 14dddf88d..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/comparer/bytes_comparer.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package comparer - -import "bytes" - -type bytesComparer struct{} - -func (bytesComparer) Compare(a, b []byte) int { - return bytes.Compare(a, b) -} - -func (bytesComparer) Name() string { - return "leveldb.BytewiseComparator" -} - -func (bytesComparer) Separator(dst, a, b []byte) []byte { - i, n := 0, len(a) - if n > len(b) { - n = len(b) - } - for ; i < n && a[i] == b[i]; i++ { - } - if i >= n { - // Do not shorten if one string is a prefix of the other - } else if c := a[i]; c < 0xff && c+1 < b[i] { - dst = append(dst, a[:i+1]...) - dst[i]++ - return dst - } - return nil -} - -func (bytesComparer) Successor(dst, b []byte) []byte { - for i, c := range b { - if c != 0xff { - dst = append(dst, b[:i+1]...) - dst[i]++ - return dst - } - } - return nil -} - -// DefaultComparer are default implementation of the Comparer interface. -// It uses the natural ordering, consistent with bytes.Compare. -var DefaultComparer = bytesComparer{} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/comparer/comparer.go b/vendor/github.com/syndtr/goleveldb/leveldb/comparer/comparer.go deleted file mode 100644 index 14a28f16f..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/comparer/comparer.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package comparer provides interface and implementation for ordering -// sets of data. -package comparer - -// BasicComparer is the interface that wraps the basic Compare method. -type BasicComparer interface { - // Compare returns -1, 0, or +1 depending on whether a is 'less than', - // 'equal to' or 'greater than' b. The two arguments can only be 'equal' - // if their contents are exactly equal. Furthermore, the empty slice - // must be 'less than' any non-empty slice. - Compare(a, b []byte) int -} - -// Comparer defines a total ordering over the space of []byte keys: a 'less -// than' relationship. -type Comparer interface { - BasicComparer - - // Name returns name of the comparer. - // - // The Level-DB on-disk format stores the comparer name, and opening a - // database with a different comparer from the one it was created with - // will result in an error. - // - // An implementation to a new name whenever the comparer implementation - // changes in a way that will cause the relative ordering of any two keys - // to change. - // - // Names starting with "leveldb." are reserved and should not be used - // by any users of this package. - Name() string - - // Bellow are advanced functions used used to reduce the space requirements - // for internal data structures such as index blocks. - - // Separator appends a sequence of bytes x to dst such that a <= x && x < b, - // where 'less than' is consistent with Compare. An implementation should - // return nil if x equal to a. - // - // Either contents of a or b should not by any means modified. Doing so - // may cause corruption on the internal state. - Separator(dst, a, b []byte) []byte - - // Successor appends a sequence of bytes x to dst such that x >= b, where - // 'less than' is consistent with Compare. An implementation should return - // nil if x equal to b. - // - // Contents of b should not by any means modified. Doing so may cause - // corruption on the internal state. - Successor(dst, b []byte) []byte -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db.go b/vendor/github.com/syndtr/goleveldb/leveldb/db.go deleted file mode 100644 index eb6abd0fb..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db.go +++ /dev/null @@ -1,1091 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "container/list" - "fmt" - "io" - "os" - "runtime" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/journal" - "github.com/syndtr/goleveldb/leveldb/memdb" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/table" - "github.com/syndtr/goleveldb/leveldb/util" -) - -// DB is a LevelDB database. -type DB struct { - // Need 64-bit alignment. - seq uint64 - - // Session. - s *session - - // MemDB. - memMu sync.RWMutex - memPool chan *memdb.DB - mem, frozenMem *memDB - journal *journal.Writer - journalWriter storage.Writer - journalFd storage.FileDesc - frozenJournalFd storage.FileDesc - frozenSeq uint64 - - // Snapshot. - snapsMu sync.Mutex - snapsList *list.List - - // Stats. - aliveSnaps, aliveIters int32 - - // Write. - writeC chan *Batch - writeMergedC chan bool - writeLockC chan struct{} - writeAckC chan error - writeDelay time.Duration - writeDelayN int - journalC chan *Batch - journalAckC chan error - tr *Transaction - - // Compaction. - compCommitLk sync.Mutex - tcompCmdC chan cCmd - tcompPauseC chan chan<- struct{} - mcompCmdC chan cCmd - compErrC chan error - compPerErrC chan error - compErrSetC chan error - compWriteLocking bool - compStats cStats - memdbMaxLevel int // For testing. - - // Close. - closeW sync.WaitGroup - closeC chan struct{} - closed uint32 - closer io.Closer -} - -func openDB(s *session) (*DB, error) { - s.log("db@open opening") - start := time.Now() - db := &DB{ - s: s, - // Initial sequence - seq: s.stSeqNum, - // MemDB - memPool: make(chan *memdb.DB, 1), - // Snapshot - snapsList: list.New(), - // Write - writeC: make(chan *Batch), - writeMergedC: make(chan bool), - writeLockC: make(chan struct{}, 1), - writeAckC: make(chan error), - journalC: make(chan *Batch), - journalAckC: make(chan error), - // Compaction - tcompCmdC: make(chan cCmd), - tcompPauseC: make(chan chan<- struct{}), - mcompCmdC: make(chan cCmd), - compErrC: make(chan error), - compPerErrC: make(chan error), - compErrSetC: make(chan error), - // Close - closeC: make(chan struct{}), - } - - // Read-only mode. - readOnly := s.o.GetReadOnly() - - if readOnly { - // Recover journals (read-only mode). - if err := db.recoverJournalRO(); err != nil { - return nil, err - } - } else { - // Recover journals. - if err := db.recoverJournal(); err != nil { - return nil, err - } - - // Remove any obsolete files. - if err := db.checkAndCleanFiles(); err != nil { - // Close journal. - if db.journal != nil { - db.journal.Close() - db.journalWriter.Close() - } - return nil, err - } - - } - - // Doesn't need to be included in the wait group. - go db.compactionError() - go db.mpoolDrain() - - if readOnly { - db.SetReadOnly() - } else { - db.closeW.Add(3) - go db.tCompaction() - go db.mCompaction() - go db.jWriter() - } - - s.logf("db@open done T·%v", time.Since(start)) - - runtime.SetFinalizer(db, (*DB).Close) - return db, nil -} - -// Open opens or creates a DB for the given storage. -// The DB will be created if not exist, unless ErrorIfMissing is true. -// Also, if ErrorIfExist is true and the DB exist Open will returns -// os.ErrExist error. -// -// Open will return an error with type of ErrCorrupted if corruption -// detected in the DB. Corrupted DB can be recovered with Recover -// function. -// -// The returned DB instance is goroutine-safe. -// The DB must be closed after use, by calling Close method. -func Open(stor storage.Storage, o *opt.Options) (db *DB, err error) { - s, err := newSession(stor, o) - if err != nil { - return - } - defer func() { - if err != nil { - s.close() - s.release() - } - }() - - err = s.recover() - if err != nil { - if !os.IsNotExist(err) || s.o.GetErrorIfMissing() { - return - } - err = s.create() - if err != nil { - return - } - } else if s.o.GetErrorIfExist() { - err = os.ErrExist - return - } - - return openDB(s) -} - -// OpenFile opens or creates a DB for the given path. -// The DB will be created if not exist, unless ErrorIfMissing is true. -// Also, if ErrorIfExist is true and the DB exist OpenFile will returns -// os.ErrExist error. -// -// OpenFile uses standard file-system backed storage implementation as -// desribed in the leveldb/storage package. -// -// OpenFile will return an error with type of ErrCorrupted if corruption -// detected in the DB. Corrupted DB can be recovered with Recover -// function. -// -// The returned DB instance is goroutine-safe. -// The DB must be closed after use, by calling Close method. -func OpenFile(path string, o *opt.Options) (db *DB, err error) { - stor, err := storage.OpenFile(path, o.GetReadOnly()) - if err != nil { - return - } - db, err = Open(stor, o) - if err != nil { - stor.Close() - } else { - db.closer = stor - } - return -} - -// Recover recovers and opens a DB with missing or corrupted manifest files -// for the given storage. It will ignore any manifest files, valid or not. -// The DB must already exist or it will returns an error. -// Also, Recover will ignore ErrorIfMissing and ErrorIfExist options. -// -// The returned DB instance is goroutine-safe. -// The DB must be closed after use, by calling Close method. -func Recover(stor storage.Storage, o *opt.Options) (db *DB, err error) { - s, err := newSession(stor, o) - if err != nil { - return - } - defer func() { - if err != nil { - s.close() - s.release() - } - }() - - err = recoverTable(s, o) - if err != nil { - return - } - return openDB(s) -} - -// RecoverFile recovers and opens a DB with missing or corrupted manifest files -// for the given path. It will ignore any manifest files, valid or not. -// The DB must already exist or it will returns an error. -// Also, Recover will ignore ErrorIfMissing and ErrorIfExist options. -// -// RecoverFile uses standard file-system backed storage implementation as desribed -// in the leveldb/storage package. -// -// The returned DB instance is goroutine-safe. -// The DB must be closed after use, by calling Close method. -func RecoverFile(path string, o *opt.Options) (db *DB, err error) { - stor, err := storage.OpenFile(path, false) - if err != nil { - return - } - db, err = Recover(stor, o) - if err != nil { - stor.Close() - } else { - db.closer = stor - } - return -} - -func recoverTable(s *session, o *opt.Options) error { - o = dupOptions(o) - // Mask StrictReader, lets StrictRecovery doing its job. - o.Strict &= ^opt.StrictReader - - // Get all tables and sort it by file number. - fds, err := s.stor.List(storage.TypeTable) - if err != nil { - return err - } - sortFds(fds) - - var ( - maxSeq uint64 - recoveredKey, goodKey, corruptedKey, corruptedBlock, droppedTable int - - // We will drop corrupted table. - strict = o.GetStrict(opt.StrictRecovery) - noSync = o.GetNoSync() - - rec = &sessionRecord{} - bpool = util.NewBufferPool(o.GetBlockSize() + 5) - ) - buildTable := func(iter iterator.Iterator) (tmpFd storage.FileDesc, size int64, err error) { - tmpFd = s.newTemp() - writer, err := s.stor.Create(tmpFd) - if err != nil { - return - } - defer func() { - writer.Close() - if err != nil { - s.stor.Remove(tmpFd) - tmpFd = storage.FileDesc{} - } - }() - - // Copy entries. - tw := table.NewWriter(writer, o) - for iter.Next() { - key := iter.Key() - if validInternalKey(key) { - err = tw.Append(key, iter.Value()) - if err != nil { - return - } - } - } - err = iter.Error() - if err != nil { - return - } - err = tw.Close() - if err != nil { - return - } - if !noSync { - err = writer.Sync() - if err != nil { - return - } - } - size = int64(tw.BytesLen()) - return - } - recoverTable := func(fd storage.FileDesc) error { - s.logf("table@recovery recovering @%d", fd.Num) - reader, err := s.stor.Open(fd) - if err != nil { - return err - } - var closed bool - defer func() { - if !closed { - reader.Close() - } - }() - - // Get file size. - size, err := reader.Seek(0, 2) - if err != nil { - return err - } - - var ( - tSeq uint64 - tgoodKey, tcorruptedKey, tcorruptedBlock int - imin, imax []byte - ) - tr, err := table.NewReader(reader, size, fd, nil, bpool, o) - if err != nil { - return err - } - iter := tr.NewIterator(nil, nil) - if itererr, ok := iter.(iterator.ErrorCallbackSetter); ok { - itererr.SetErrorCallback(func(err error) { - if errors.IsCorrupted(err) { - s.logf("table@recovery block corruption @%d %q", fd.Num, err) - tcorruptedBlock++ - } - }) - } - - // Scan the table. - for iter.Next() { - key := iter.Key() - _, seq, _, kerr := parseInternalKey(key) - if kerr != nil { - tcorruptedKey++ - continue - } - tgoodKey++ - if seq > tSeq { - tSeq = seq - } - if imin == nil { - imin = append([]byte{}, key...) - } - imax = append(imax[:0], key...) - } - if err := iter.Error(); err != nil { - iter.Release() - return err - } - iter.Release() - - goodKey += tgoodKey - corruptedKey += tcorruptedKey - corruptedBlock += tcorruptedBlock - - if strict && (tcorruptedKey > 0 || tcorruptedBlock > 0) { - droppedTable++ - s.logf("table@recovery dropped @%d Gk·%d Ck·%d Cb·%d S·%d Q·%d", fd.Num, tgoodKey, tcorruptedKey, tcorruptedBlock, size, tSeq) - return nil - } - - if tgoodKey > 0 { - if tcorruptedKey > 0 || tcorruptedBlock > 0 { - // Rebuild the table. - s.logf("table@recovery rebuilding @%d", fd.Num) - iter := tr.NewIterator(nil, nil) - tmpFd, newSize, err := buildTable(iter) - iter.Release() - if err != nil { - return err - } - closed = true - reader.Close() - if err := s.stor.Rename(tmpFd, fd); err != nil { - return err - } - size = newSize - } - if tSeq > maxSeq { - maxSeq = tSeq - } - recoveredKey += tgoodKey - // Add table to level 0. - rec.addTable(0, fd.Num, size, imin, imax) - s.logf("table@recovery recovered @%d Gk·%d Ck·%d Cb·%d S·%d Q·%d", fd.Num, tgoodKey, tcorruptedKey, tcorruptedBlock, size, tSeq) - } else { - droppedTable++ - s.logf("table@recovery unrecoverable @%d Ck·%d Cb·%d S·%d", fd.Num, tcorruptedKey, tcorruptedBlock, size) - } - - return nil - } - - // Recover all tables. - if len(fds) > 0 { - s.logf("table@recovery F·%d", len(fds)) - - // Mark file number as used. - s.markFileNum(fds[len(fds)-1].Num) - - for _, fd := range fds { - if err := recoverTable(fd); err != nil { - return err - } - } - - s.logf("table@recovery recovered F·%d N·%d Gk·%d Ck·%d Q·%d", len(fds), recoveredKey, goodKey, corruptedKey, maxSeq) - } - - // Set sequence number. - rec.setSeqNum(maxSeq) - - // Create new manifest. - if err := s.create(); err != nil { - return err - } - - // Commit. - return s.commit(rec) -} - -func (db *DB) recoverJournal() error { - // Get all journals and sort it by file number. - rawFds, err := db.s.stor.List(storage.TypeJournal) - if err != nil { - return err - } - sortFds(rawFds) - - // Journals that will be recovered. - var fds []storage.FileDesc - for _, fd := range rawFds { - if fd.Num >= db.s.stJournalNum || fd.Num == db.s.stPrevJournalNum { - fds = append(fds, fd) - } - } - - var ( - ofd storage.FileDesc // Obsolete file. - rec = &sessionRecord{} - ) - - // Recover journals. - if len(fds) > 0 { - db.logf("journal@recovery F·%d", len(fds)) - - // Mark file number as used. - db.s.markFileNum(fds[len(fds)-1].Num) - - var ( - // Options. - strict = db.s.o.GetStrict(opt.StrictJournal) - checksum = db.s.o.GetStrict(opt.StrictJournalChecksum) - writeBuffer = db.s.o.GetWriteBuffer() - - jr *journal.Reader - mdb = memdb.New(db.s.icmp, writeBuffer) - buf = &util.Buffer{} - batch = &Batch{} - ) - - for _, fd := range fds { - db.logf("journal@recovery recovering @%d", fd.Num) - - fr, err := db.s.stor.Open(fd) - if err != nil { - return err - } - - // Create or reset journal reader instance. - if jr == nil { - jr = journal.NewReader(fr, dropper{db.s, fd}, strict, checksum) - } else { - jr.Reset(fr, dropper{db.s, fd}, strict, checksum) - } - - // Flush memdb and remove obsolete journal file. - if !ofd.Nil() { - if mdb.Len() > 0 { - if _, err := db.s.flushMemdb(rec, mdb, 0); err != nil { - fr.Close() - return err - } - } - - rec.setJournalNum(fd.Num) - rec.setSeqNum(db.seq) - if err := db.s.commit(rec); err != nil { - fr.Close() - return err - } - rec.resetAddedTables() - - db.s.stor.Remove(ofd) - ofd = storage.FileDesc{} - } - - // Replay journal to memdb. - mdb.Reset() - for { - r, err := jr.Next() - if err != nil { - if err == io.EOF { - break - } - - fr.Close() - return errors.SetFd(err, fd) - } - - buf.Reset() - if _, err := buf.ReadFrom(r); err != nil { - if err == io.ErrUnexpectedEOF { - // This is error returned due to corruption, with strict == false. - continue - } - - fr.Close() - return errors.SetFd(err, fd) - } - if err := batch.memDecodeAndReplay(db.seq, buf.Bytes(), mdb); err != nil { - if !strict && errors.IsCorrupted(err) { - db.s.logf("journal error: %v (skipped)", err) - // We won't apply sequence number as it might be corrupted. - continue - } - - fr.Close() - return errors.SetFd(err, fd) - } - - // Save sequence number. - db.seq = batch.seq + uint64(batch.Len()) - - // Flush it if large enough. - if mdb.Size() >= writeBuffer { - if _, err := db.s.flushMemdb(rec, mdb, 0); err != nil { - fr.Close() - return err - } - - mdb.Reset() - } - } - - fr.Close() - ofd = fd - } - - // Flush the last memdb. - if mdb.Len() > 0 { - if _, err := db.s.flushMemdb(rec, mdb, 0); err != nil { - return err - } - } - } - - // Create a new journal. - if _, err := db.newMem(0); err != nil { - return err - } - - // Commit. - rec.setJournalNum(db.journalFd.Num) - rec.setSeqNum(db.seq) - if err := db.s.commit(rec); err != nil { - // Close journal on error. - if db.journal != nil { - db.journal.Close() - db.journalWriter.Close() - } - return err - } - - // Remove the last obsolete journal file. - if !ofd.Nil() { - db.s.stor.Remove(ofd) - } - - return nil -} - -func (db *DB) recoverJournalRO() error { - // Get all journals and sort it by file number. - rawFds, err := db.s.stor.List(storage.TypeJournal) - if err != nil { - return err - } - sortFds(rawFds) - - // Journals that will be recovered. - var fds []storage.FileDesc - for _, fd := range rawFds { - if fd.Num >= db.s.stJournalNum || fd.Num == db.s.stPrevJournalNum { - fds = append(fds, fd) - } - } - - var ( - // Options. - strict = db.s.o.GetStrict(opt.StrictJournal) - checksum = db.s.o.GetStrict(opt.StrictJournalChecksum) - writeBuffer = db.s.o.GetWriteBuffer() - - mdb = memdb.New(db.s.icmp, writeBuffer) - ) - - // Recover journals. - if len(fds) > 0 { - db.logf("journal@recovery RO·Mode F·%d", len(fds)) - - var ( - jr *journal.Reader - buf = &util.Buffer{} - batch = &Batch{} - ) - - for _, fd := range fds { - db.logf("journal@recovery recovering @%d", fd.Num) - - fr, err := db.s.stor.Open(fd) - if err != nil { - return err - } - - // Create or reset journal reader instance. - if jr == nil { - jr = journal.NewReader(fr, dropper{db.s, fd}, strict, checksum) - } else { - jr.Reset(fr, dropper{db.s, fd}, strict, checksum) - } - - // Replay journal to memdb. - for { - r, err := jr.Next() - if err != nil { - if err == io.EOF { - break - } - - fr.Close() - return errors.SetFd(err, fd) - } - - buf.Reset() - if _, err := buf.ReadFrom(r); err != nil { - if err == io.ErrUnexpectedEOF { - // This is error returned due to corruption, with strict == false. - continue - } - - fr.Close() - return errors.SetFd(err, fd) - } - if err := batch.memDecodeAndReplay(db.seq, buf.Bytes(), mdb); err != nil { - if !strict && errors.IsCorrupted(err) { - db.s.logf("journal error: %v (skipped)", err) - // We won't apply sequence number as it might be corrupted. - continue - } - - fr.Close() - return errors.SetFd(err, fd) - } - - // Save sequence number. - db.seq = batch.seq + uint64(batch.Len()) - } - - fr.Close() - } - } - - // Set memDB. - db.mem = &memDB{db: db, DB: mdb, ref: 1} - - return nil -} - -func memGet(mdb *memdb.DB, ikey internalKey, icmp *iComparer) (ok bool, mv []byte, err error) { - mk, mv, err := mdb.Find(ikey) - if err == nil { - ukey, _, kt, kerr := parseInternalKey(mk) - if kerr != nil { - // Shouldn't have had happen. - panic(kerr) - } - if icmp.uCompare(ukey, ikey.ukey()) == 0 { - if kt == keyTypeDel { - return true, nil, ErrNotFound - } - return true, mv, nil - - } - } else if err != ErrNotFound { - return true, nil, err - } - return -} - -func (db *DB) get(auxm *memdb.DB, auxt tFiles, key []byte, seq uint64, ro *opt.ReadOptions) (value []byte, err error) { - ikey := makeInternalKey(nil, key, seq, keyTypeSeek) - - if auxm != nil { - if ok, mv, me := memGet(auxm, ikey, db.s.icmp); ok { - return append([]byte{}, mv...), me - } - } - - em, fm := db.getMems() - for _, m := range [...]*memDB{em, fm} { - if m == nil { - continue - } - defer m.decref() - - if ok, mv, me := memGet(m.DB, ikey, db.s.icmp); ok { - return append([]byte{}, mv...), me - } - } - - v := db.s.version() - value, cSched, err := v.get(auxt, ikey, ro, false) - v.release() - if cSched { - // Trigger table compaction. - db.compTrigger(db.tcompCmdC) - } - return -} - -func nilIfNotFound(err error) error { - if err == ErrNotFound { - return nil - } - return err -} - -func (db *DB) has(auxm *memdb.DB, auxt tFiles, key []byte, seq uint64, ro *opt.ReadOptions) (ret bool, err error) { - ikey := makeInternalKey(nil, key, seq, keyTypeSeek) - - if auxm != nil { - if ok, _, me := memGet(auxm, ikey, db.s.icmp); ok { - return me == nil, nilIfNotFound(me) - } - } - - em, fm := db.getMems() - for _, m := range [...]*memDB{em, fm} { - if m == nil { - continue - } - defer m.decref() - - if ok, _, me := memGet(m.DB, ikey, db.s.icmp); ok { - return me == nil, nilIfNotFound(me) - } - } - - v := db.s.version() - _, cSched, err := v.get(auxt, ikey, ro, true) - v.release() - if cSched { - // Trigger table compaction. - db.compTrigger(db.tcompCmdC) - } - if err == nil { - ret = true - } else if err == ErrNotFound { - err = nil - } - return -} - -// Get gets the value for the given key. It returns ErrNotFound if the -// DB does not contains the key. -// -// The returned slice is its own copy, it is safe to modify the contents -// of the returned slice. -// It is safe to modify the contents of the argument after Get returns. -func (db *DB) Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) { - err = db.ok() - if err != nil { - return - } - - se := db.acquireSnapshot() - defer db.releaseSnapshot(se) - return db.get(nil, nil, key, se.seq, ro) -} - -// Has returns true if the DB does contains the given key. -// -// It is safe to modify the contents of the argument after Get returns. -func (db *DB) Has(key []byte, ro *opt.ReadOptions) (ret bool, err error) { - err = db.ok() - if err != nil { - return - } - - se := db.acquireSnapshot() - defer db.releaseSnapshot(se) - return db.has(nil, nil, key, se.seq, ro) -} - -// NewIterator returns an iterator for the latest snapshot of the -// underlying DB. -// The returned iterator is not goroutine-safe, but it is safe to use -// multiple iterators concurrently, with each in a dedicated goroutine. -// It is also safe to use an iterator concurrently with modifying its -// underlying DB. The resultant key/value pairs are guaranteed to be -// consistent. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// DB. And a nil Range.Limit is treated as a key after all keys in -// the DB. -// -// The iterator must be released after use, by calling Release method. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (db *DB) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - if err := db.ok(); err != nil { - return iterator.NewEmptyIterator(err) - } - - se := db.acquireSnapshot() - defer db.releaseSnapshot(se) - // Iterator holds 'version' lock, 'version' is immutable so snapshot - // can be released after iterator created. - return db.newIterator(nil, nil, se.seq, slice, ro) -} - -// GetSnapshot returns a latest snapshot of the underlying DB. A snapshot -// is a frozen snapshot of a DB state at a particular point in time. The -// content of snapshot are guaranteed to be consistent. -// -// The snapshot must be released after use, by calling Release method. -func (db *DB) GetSnapshot() (*Snapshot, error) { - if err := db.ok(); err != nil { - return nil, err - } - - return db.newSnapshot(), nil -} - -// GetProperty returns value of the given property name. -// -// Property names: -// leveldb.num-files-at-level{n} -// Returns the number of files at level 'n'. -// leveldb.stats -// Returns statistics of the underlying DB. -// leveldb.sstables -// Returns sstables list for each level. -// leveldb.blockpool -// Returns block pool stats. -// leveldb.cachedblock -// Returns size of cached block. -// leveldb.openedtables -// Returns number of opened tables. -// leveldb.alivesnaps -// Returns number of alive snapshots. -// leveldb.aliveiters -// Returns number of alive iterators. -func (db *DB) GetProperty(name string) (value string, err error) { - err = db.ok() - if err != nil { - return - } - - const prefix = "leveldb." - if !strings.HasPrefix(name, prefix) { - return "", ErrNotFound - } - p := name[len(prefix):] - - v := db.s.version() - defer v.release() - - numFilesPrefix := "num-files-at-level" - switch { - case strings.HasPrefix(p, numFilesPrefix): - var level uint - var rest string - n, _ := fmt.Sscanf(p[len(numFilesPrefix):], "%d%s", &level, &rest) - if n != 1 { - err = ErrNotFound - } else { - value = fmt.Sprint(v.tLen(int(level))) - } - case p == "stats": - value = "Compactions\n" + - " Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB)\n" + - "-------+------------+---------------+---------------+---------------+---------------\n" - for level, tables := range v.levels { - duration, read, write := db.compStats.getStat(level) - if len(tables) == 0 && duration == 0 { - continue - } - value += fmt.Sprintf(" %3d | %10d | %13.5f | %13.5f | %13.5f | %13.5f\n", - level, len(tables), float64(tables.size())/1048576.0, duration.Seconds(), - float64(read)/1048576.0, float64(write)/1048576.0) - } - case p == "sstables": - for level, tables := range v.levels { - value += fmt.Sprintf("--- level %d ---\n", level) - for _, t := range tables { - value += fmt.Sprintf("%d:%d[%q .. %q]\n", t.fd.Num, t.size, t.imin, t.imax) - } - } - case p == "blockpool": - value = fmt.Sprintf("%v", db.s.tops.bpool) - case p == "cachedblock": - if db.s.tops.bcache != nil { - value = fmt.Sprintf("%d", db.s.tops.bcache.Size()) - } else { - value = "" - } - case p == "openedtables": - value = fmt.Sprintf("%d", db.s.tops.cache.Size()) - case p == "alivesnaps": - value = fmt.Sprintf("%d", atomic.LoadInt32(&db.aliveSnaps)) - case p == "aliveiters": - value = fmt.Sprintf("%d", atomic.LoadInt32(&db.aliveIters)) - default: - err = ErrNotFound - } - - return -} - -// SizeOf calculates approximate sizes of the given key ranges. -// The length of the returned sizes are equal with the length of the given -// ranges. The returned sizes measure storage space usage, so if the user -// data compresses by a factor of ten, the returned sizes will be one-tenth -// the size of the corresponding user data size. -// The results may not include the sizes of recently written data. -func (db *DB) SizeOf(ranges []util.Range) (Sizes, error) { - if err := db.ok(); err != nil { - return nil, err - } - - v := db.s.version() - defer v.release() - - sizes := make(Sizes, 0, len(ranges)) - for _, r := range ranges { - imin := makeInternalKey(nil, r.Start, keyMaxSeq, keyTypeSeek) - imax := makeInternalKey(nil, r.Limit, keyMaxSeq, keyTypeSeek) - start, err := v.offsetOf(imin) - if err != nil { - return nil, err - } - limit, err := v.offsetOf(imax) - if err != nil { - return nil, err - } - var size int64 - if limit >= start { - size = limit - start - } - sizes = append(sizes, size) - } - - return sizes, nil -} - -// Close closes the DB. This will also releases any outstanding snapshot, -// abort any in-flight compaction and discard open transaction. -// -// It is not safe to close a DB until all outstanding iterators are released. -// It is valid to call Close multiple times. Other methods should not be -// called after the DB has been closed. -func (db *DB) Close() error { - if !db.setClosed() { - return ErrClosed - } - - start := time.Now() - db.log("db@close closing") - - // Clear the finalizer. - runtime.SetFinalizer(db, nil) - - // Get compaction error. - var err error - select { - case err = <-db.compErrC: - if err == ErrReadOnly { - err = nil - } - default: - } - - // Signal all goroutines. - close(db.closeC) - - // Discard open transaction. - if db.tr != nil { - db.tr.Discard() - } - - // Acquire writer lock. - db.writeLockC <- struct{}{} - - // Wait for all gorotines to exit. - db.closeW.Wait() - - // Closes journal. - if db.journal != nil { - db.journal.Close() - db.journalWriter.Close() - } - - if db.writeDelayN > 0 { - db.logf("db@write was delayed N·%d T·%v", db.writeDelayN, db.writeDelay) - } - - // Close session. - db.s.close() - db.logf("db@close done T·%v", time.Since(start)) - db.s.release() - - if db.closer != nil { - if err1 := db.closer.Close(); err == nil { - err = err1 - } - } - - // NIL'ing pointers. - db.s = nil - db.mem = nil - db.frozenMem = nil - db.journal = nil - db.journalWriter = nil - db.closer = nil - - return err -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go deleted file mode 100644 index 9664e64d0..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go +++ /dev/null @@ -1,826 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "sync" - "time" - - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" -) - -var ( - errCompactionTransactExiting = errors.New("leveldb: compaction transact exiting") -) - -type cStat struct { - duration time.Duration - read int64 - write int64 -} - -func (p *cStat) add(n *cStatStaging) { - p.duration += n.duration - p.read += n.read - p.write += n.write -} - -func (p *cStat) get() (duration time.Duration, read, write int64) { - return p.duration, p.read, p.write -} - -type cStatStaging struct { - start time.Time - duration time.Duration - on bool - read int64 - write int64 -} - -func (p *cStatStaging) startTimer() { - if !p.on { - p.start = time.Now() - p.on = true - } -} - -func (p *cStatStaging) stopTimer() { - if p.on { - p.duration += time.Since(p.start) - p.on = false - } -} - -type cStats struct { - lk sync.Mutex - stats []cStat -} - -func (p *cStats) addStat(level int, n *cStatStaging) { - p.lk.Lock() - if level >= len(p.stats) { - newStats := make([]cStat, level+1) - copy(newStats, p.stats) - p.stats = newStats - } - p.stats[level].add(n) - p.lk.Unlock() -} - -func (p *cStats) getStat(level int) (duration time.Duration, read, write int64) { - p.lk.Lock() - defer p.lk.Unlock() - if level < len(p.stats) { - return p.stats[level].get() - } - return -} - -func (db *DB) compactionError() { - var err error -noerr: - // No error. - for { - select { - case err = <-db.compErrSetC: - switch { - case err == nil: - case err == ErrReadOnly, errors.IsCorrupted(err): - goto hasperr - default: - goto haserr - } - case _, _ = <-db.closeC: - return - } - } -haserr: - // Transient error. - for { - select { - case db.compErrC <- err: - case err = <-db.compErrSetC: - switch { - case err == nil: - goto noerr - case err == ErrReadOnly, errors.IsCorrupted(err): - goto hasperr - default: - } - case _, _ = <-db.closeC: - return - } - } -hasperr: - // Persistent error. - for { - select { - case db.compErrC <- err: - case db.compPerErrC <- err: - case db.writeLockC <- struct{}{}: - // Hold write lock, so that write won't pass-through. - db.compWriteLocking = true - case _, _ = <-db.closeC: - if db.compWriteLocking { - // We should release the lock or Close will hang. - <-db.writeLockC - } - return - } - } -} - -type compactionTransactCounter int - -func (cnt *compactionTransactCounter) incr() { - *cnt++ -} - -type compactionTransactInterface interface { - run(cnt *compactionTransactCounter) error - revert() error -} - -func (db *DB) compactionTransact(name string, t compactionTransactInterface) { - defer func() { - if x := recover(); x != nil { - if x == errCompactionTransactExiting { - if err := t.revert(); err != nil { - db.logf("%s revert error %q", name, err) - } - } - panic(x) - } - }() - - const ( - backoffMin = 1 * time.Second - backoffMax = 8 * time.Second - backoffMul = 2 * time.Second - ) - var ( - backoff = backoffMin - backoffT = time.NewTimer(backoff) - lastCnt = compactionTransactCounter(0) - - disableBackoff = db.s.o.GetDisableCompactionBackoff() - ) - for n := 0; ; n++ { - // Check wether the DB is closed. - if db.isClosed() { - db.logf("%s exiting", name) - db.compactionExitTransact() - } else if n > 0 { - db.logf("%s retrying N·%d", name, n) - } - - // Execute. - cnt := compactionTransactCounter(0) - err := t.run(&cnt) - if err != nil { - db.logf("%s error I·%d %q", name, cnt, err) - } - - // Set compaction error status. - select { - case db.compErrSetC <- err: - case perr := <-db.compPerErrC: - if err != nil { - db.logf("%s exiting (persistent error %q)", name, perr) - db.compactionExitTransact() - } - case _, _ = <-db.closeC: - db.logf("%s exiting", name) - db.compactionExitTransact() - } - if err == nil { - return - } - if errors.IsCorrupted(err) { - db.logf("%s exiting (corruption detected)", name) - db.compactionExitTransact() - } - - if !disableBackoff { - // Reset backoff duration if counter is advancing. - if cnt > lastCnt { - backoff = backoffMin - lastCnt = cnt - } - - // Backoff. - backoffT.Reset(backoff) - if backoff < backoffMax { - backoff *= backoffMul - if backoff > backoffMax { - backoff = backoffMax - } - } - select { - case <-backoffT.C: - case _, _ = <-db.closeC: - db.logf("%s exiting", name) - db.compactionExitTransact() - } - } - } -} - -type compactionTransactFunc struct { - runFunc func(cnt *compactionTransactCounter) error - revertFunc func() error -} - -func (t *compactionTransactFunc) run(cnt *compactionTransactCounter) error { - return t.runFunc(cnt) -} - -func (t *compactionTransactFunc) revert() error { - if t.revertFunc != nil { - return t.revertFunc() - } - return nil -} - -func (db *DB) compactionTransactFunc(name string, run func(cnt *compactionTransactCounter) error, revert func() error) { - db.compactionTransact(name, &compactionTransactFunc{run, revert}) -} - -func (db *DB) compactionExitTransact() { - panic(errCompactionTransactExiting) -} - -func (db *DB) compactionCommit(name string, rec *sessionRecord) { - db.compCommitLk.Lock() - defer db.compCommitLk.Unlock() // Defer is necessary. - db.compactionTransactFunc(name+"@commit", func(cnt *compactionTransactCounter) error { - return db.s.commit(rec) - }, nil) -} - -func (db *DB) memCompaction() { - mdb := db.getFrozenMem() - if mdb == nil { - return - } - defer mdb.decref() - - db.logf("memdb@flush N·%d S·%s", mdb.Len(), shortenb(mdb.Size())) - - // Don't compact empty memdb. - if mdb.Len() == 0 { - db.logf("memdb@flush skipping") - // drop frozen memdb - db.dropFrozenMem() - return - } - - // Pause table compaction. - resumeC := make(chan struct{}) - select { - case db.tcompPauseC <- (chan<- struct{})(resumeC): - case <-db.compPerErrC: - close(resumeC) - resumeC = nil - case _, _ = <-db.closeC: - return - } - - var ( - rec = &sessionRecord{} - stats = &cStatStaging{} - flushLevel int - ) - - // Generate tables. - db.compactionTransactFunc("memdb@flush", func(cnt *compactionTransactCounter) (err error) { - stats.startTimer() - flushLevel, err = db.s.flushMemdb(rec, mdb.DB, db.memdbMaxLevel) - stats.stopTimer() - return - }, func() error { - for _, r := range rec.addedTables { - db.logf("memdb@flush revert @%d", r.num) - if err := db.s.stor.Remove(storage.FileDesc{Type: storage.TypeTable, Num: r.num}); err != nil { - return err - } - } - return nil - }) - - rec.setJournalNum(db.journalFd.Num) - rec.setSeqNum(db.frozenSeq) - - // Commit. - stats.startTimer() - db.compactionCommit("memdb", rec) - stats.stopTimer() - - db.logf("memdb@flush committed F·%d T·%v", len(rec.addedTables), stats.duration) - - for _, r := range rec.addedTables { - stats.write += r.size - } - db.compStats.addStat(flushLevel, stats) - - // Drop frozen memdb. - db.dropFrozenMem() - - // Resume table compaction. - if resumeC != nil { - select { - case <-resumeC: - close(resumeC) - case _, _ = <-db.closeC: - return - } - } - - // Trigger table compaction. - db.compTrigger(db.tcompCmdC) -} - -type tableCompactionBuilder struct { - db *DB - s *session - c *compaction - rec *sessionRecord - stat0, stat1 *cStatStaging - - snapHasLastUkey bool - snapLastUkey []byte - snapLastSeq uint64 - snapIter int - snapKerrCnt int - snapDropCnt int - - kerrCnt int - dropCnt int - - minSeq uint64 - strict bool - tableSize int - - tw *tWriter -} - -func (b *tableCompactionBuilder) appendKV(key, value []byte) error { - // Create new table if not already. - if b.tw == nil { - // Check for pause event. - if b.db != nil { - select { - case ch := <-b.db.tcompPauseC: - b.db.pauseCompaction(ch) - case _, _ = <-b.db.closeC: - b.db.compactionExitTransact() - default: - } - } - - // Create new table. - var err error - b.tw, err = b.s.tops.create() - if err != nil { - return err - } - } - - // Write key/value into table. - return b.tw.append(key, value) -} - -func (b *tableCompactionBuilder) needFlush() bool { - return b.tw.tw.BytesLen() >= b.tableSize -} - -func (b *tableCompactionBuilder) flush() error { - t, err := b.tw.finish() - if err != nil { - return err - } - b.rec.addTableFile(b.c.sourceLevel+1, t) - b.stat1.write += t.size - b.s.logf("table@build created L%d@%d N·%d S·%s %q:%q", b.c.sourceLevel+1, t.fd.Num, b.tw.tw.EntriesLen(), shortenb(int(t.size)), t.imin, t.imax) - b.tw = nil - return nil -} - -func (b *tableCompactionBuilder) cleanup() { - if b.tw != nil { - b.tw.drop() - b.tw = nil - } -} - -func (b *tableCompactionBuilder) run(cnt *compactionTransactCounter) error { - snapResumed := b.snapIter > 0 - hasLastUkey := b.snapHasLastUkey // The key might has zero length, so this is necessary. - lastUkey := append([]byte{}, b.snapLastUkey...) - lastSeq := b.snapLastSeq - b.kerrCnt = b.snapKerrCnt - b.dropCnt = b.snapDropCnt - // Restore compaction state. - b.c.restore() - - defer b.cleanup() - - b.stat1.startTimer() - defer b.stat1.stopTimer() - - iter := b.c.newIterator() - defer iter.Release() - for i := 0; iter.Next(); i++ { - // Incr transact counter. - cnt.incr() - - // Skip until last state. - if i < b.snapIter { - continue - } - - resumed := false - if snapResumed { - resumed = true - snapResumed = false - } - - ikey := iter.Key() - ukey, seq, kt, kerr := parseInternalKey(ikey) - - if kerr == nil { - shouldStop := !resumed && b.c.shouldStopBefore(ikey) - - if !hasLastUkey || b.s.icmp.uCompare(lastUkey, ukey) != 0 { - // First occurrence of this user key. - - // Only rotate tables if ukey doesn't hop across. - if b.tw != nil && (shouldStop || b.needFlush()) { - if err := b.flush(); err != nil { - return err - } - - // Creates snapshot of the state. - b.c.save() - b.snapHasLastUkey = hasLastUkey - b.snapLastUkey = append(b.snapLastUkey[:0], lastUkey...) - b.snapLastSeq = lastSeq - b.snapIter = i - b.snapKerrCnt = b.kerrCnt - b.snapDropCnt = b.dropCnt - } - - hasLastUkey = true - lastUkey = append(lastUkey[:0], ukey...) - lastSeq = keyMaxSeq - } - - switch { - case lastSeq <= b.minSeq: - // Dropped because newer entry for same user key exist - fallthrough // (A) - case kt == keyTypeDel && seq <= b.minSeq && b.c.baseLevelForKey(lastUkey): - // For this user key: - // (1) there is no data in higher levels - // (2) data in lower levels will have larger seq numbers - // (3) data in layers that are being compacted here and have - // smaller seq numbers will be dropped in the next - // few iterations of this loop (by rule (A) above). - // Therefore this deletion marker is obsolete and can be dropped. - lastSeq = seq - b.dropCnt++ - continue - default: - lastSeq = seq - } - } else { - if b.strict { - return kerr - } - - // Don't drop corrupted keys. - hasLastUkey = false - lastUkey = lastUkey[:0] - lastSeq = keyMaxSeq - b.kerrCnt++ - } - - if err := b.appendKV(ikey, iter.Value()); err != nil { - return err - } - } - - if err := iter.Error(); err != nil { - return err - } - - // Finish last table. - if b.tw != nil && !b.tw.empty() { - return b.flush() - } - return nil -} - -func (b *tableCompactionBuilder) revert() error { - for _, at := range b.rec.addedTables { - b.s.logf("table@build revert @%d", at.num) - if err := b.s.stor.Remove(storage.FileDesc{Type: storage.TypeTable, Num: at.num}); err != nil { - return err - } - } - return nil -} - -func (db *DB) tableCompaction(c *compaction, noTrivial bool) { - defer c.release() - - rec := &sessionRecord{} - rec.addCompPtr(c.sourceLevel, c.imax) - - if !noTrivial && c.trivial() { - t := c.levels[0][0] - db.logf("table@move L%d@%d -> L%d", c.sourceLevel, t.fd.Num, c.sourceLevel+1) - rec.delTable(c.sourceLevel, t.fd.Num) - rec.addTableFile(c.sourceLevel+1, t) - db.compactionCommit("table-move", rec) - return - } - - var stats [2]cStatStaging - for i, tables := range c.levels { - for _, t := range tables { - stats[i].read += t.size - // Insert deleted tables into record - rec.delTable(c.sourceLevel+i, t.fd.Num) - } - } - sourceSize := int(stats[0].read + stats[1].read) - minSeq := db.minSeq() - db.logf("table@compaction L%d·%d -> L%d·%d S·%s Q·%d", c.sourceLevel, len(c.levels[0]), c.sourceLevel+1, len(c.levels[1]), shortenb(sourceSize), minSeq) - - b := &tableCompactionBuilder{ - db: db, - s: db.s, - c: c, - rec: rec, - stat1: &stats[1], - minSeq: minSeq, - strict: db.s.o.GetStrict(opt.StrictCompaction), - tableSize: db.s.o.GetCompactionTableSize(c.sourceLevel + 1), - } - db.compactionTransact("table@build", b) - - // Commit. - stats[1].startTimer() - db.compactionCommit("table", rec) - stats[1].stopTimer() - - resultSize := int(stats[1].write) - db.logf("table@compaction committed F%s S%s Ke·%d D·%d T·%v", sint(len(rec.addedTables)-len(rec.deletedTables)), sshortenb(resultSize-sourceSize), b.kerrCnt, b.dropCnt, stats[1].duration) - - // Save compaction stats - for i := range stats { - db.compStats.addStat(c.sourceLevel+1, &stats[i]) - } -} - -func (db *DB) tableRangeCompaction(level int, umin, umax []byte) error { - db.logf("table@compaction range L%d %q:%q", level, umin, umax) - if level >= 0 { - if c := db.s.getCompactionRange(level, umin, umax, true); c != nil { - db.tableCompaction(c, true) - } - } else { - // Retry until nothing to compact. - for { - compacted := false - - // Scan for maximum level with overlapped tables. - v := db.s.version() - m := 1 - for i := m; i < len(v.levels); i++ { - tables := v.levels[i] - if tables.overlaps(db.s.icmp, umin, umax, false) { - m = i - } - } - v.release() - - for level := 0; level < m; level++ { - if c := db.s.getCompactionRange(level, umin, umax, false); c != nil { - db.tableCompaction(c, true) - compacted = true - } - } - - if !compacted { - break - } - } - } - - return nil -} - -func (db *DB) tableAutoCompaction() { - if c := db.s.pickCompaction(); c != nil { - db.tableCompaction(c, false) - } -} - -func (db *DB) tableNeedCompaction() bool { - v := db.s.version() - defer v.release() - return v.needCompaction() -} - -func (db *DB) pauseCompaction(ch chan<- struct{}) { - select { - case ch <- struct{}{}: - case _, _ = <-db.closeC: - db.compactionExitTransact() - } -} - -type cCmd interface { - ack(err error) -} - -type cAuto struct { - ackC chan<- error -} - -func (r cAuto) ack(err error) { - if r.ackC != nil { - defer func() { - recover() - }() - r.ackC <- err - } -} - -type cRange struct { - level int - min, max []byte - ackC chan<- error -} - -func (r cRange) ack(err error) { - if r.ackC != nil { - defer func() { - recover() - }() - r.ackC <- err - } -} - -// This will trigger auto compaction but will not wait for it. -func (db *DB) compTrigger(compC chan<- cCmd) { - select { - case compC <- cAuto{}: - default: - } -} - -// This will trigger auto compation and/or wait for all compaction to be done. -func (db *DB) compTriggerWait(compC chan<- cCmd) (err error) { - ch := make(chan error) - defer close(ch) - // Send cmd. - select { - case compC <- cAuto{ch}: - case err = <-db.compErrC: - return - case _, _ = <-db.closeC: - return ErrClosed - } - // Wait cmd. - select { - case err = <-ch: - case err = <-db.compErrC: - case _, _ = <-db.closeC: - return ErrClosed - } - return err -} - -// Send range compaction request. -func (db *DB) compTriggerRange(compC chan<- cCmd, level int, min, max []byte) (err error) { - ch := make(chan error) - defer close(ch) - // Send cmd. - select { - case compC <- cRange{level, min, max, ch}: - case err := <-db.compErrC: - return err - case _, _ = <-db.closeC: - return ErrClosed - } - // Wait cmd. - select { - case err = <-ch: - case err = <-db.compErrC: - case _, _ = <-db.closeC: - return ErrClosed - } - return err -} - -func (db *DB) mCompaction() { - var x cCmd - - defer func() { - if x := recover(); x != nil { - if x != errCompactionTransactExiting { - panic(x) - } - } - if x != nil { - x.ack(ErrClosed) - } - db.closeW.Done() - }() - - for { - select { - case x = <-db.mcompCmdC: - switch x.(type) { - case cAuto: - db.memCompaction() - x.ack(nil) - x = nil - default: - panic("leveldb: unknown command") - } - case _, _ = <-db.closeC: - return - } - } -} - -func (db *DB) tCompaction() { - var x cCmd - var ackQ []cCmd - - defer func() { - if x := recover(); x != nil { - if x != errCompactionTransactExiting { - panic(x) - } - } - for i := range ackQ { - ackQ[i].ack(ErrClosed) - ackQ[i] = nil - } - if x != nil { - x.ack(ErrClosed) - } - db.closeW.Done() - }() - - for { - if db.tableNeedCompaction() { - select { - case x = <-db.tcompCmdC: - case ch := <-db.tcompPauseC: - db.pauseCompaction(ch) - continue - case _, _ = <-db.closeC: - return - default: - } - } else { - for i := range ackQ { - ackQ[i].ack(nil) - ackQ[i] = nil - } - ackQ = ackQ[:0] - select { - case x = <-db.tcompCmdC: - case ch := <-db.tcompPauseC: - db.pauseCompaction(ch) - continue - case _, _ = <-db.closeC: - return - } - } - if x != nil { - switch cmd := x.(type) { - case cAuto: - ackQ = append(ackQ, x) - case cRange: - x.ack(db.tableRangeCompaction(cmd.level, cmd.min, cmd.max)) - default: - panic("leveldb: unknown command") - } - x = nil - } - db.tableAutoCompaction() - } -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_iter.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_iter.go deleted file mode 100644 index 03c24cdab..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_iter.go +++ /dev/null @@ -1,360 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "errors" - "math/rand" - "runtime" - "sync" - "sync/atomic" - - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" -) - -var ( - errInvalidInternalKey = errors.New("leveldb: Iterator: invalid internal key") -) - -type memdbReleaser struct { - once sync.Once - m *memDB -} - -func (mr *memdbReleaser) Release() { - mr.once.Do(func() { - mr.m.decref() - }) -} - -func (db *DB) newRawIterator(auxm *memDB, auxt tFiles, slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - strict := opt.GetStrict(db.s.o.Options, ro, opt.StrictReader) - em, fm := db.getMems() - v := db.s.version() - - tableIts := v.getIterators(slice, ro) - n := len(tableIts) + len(auxt) + 3 - its := make([]iterator.Iterator, 0, n) - - if auxm != nil { - ami := auxm.NewIterator(slice) - ami.SetReleaser(&memdbReleaser{m: auxm}) - its = append(its, ami) - } - for _, t := range auxt { - its = append(its, v.s.tops.newIterator(t, slice, ro)) - } - - emi := em.NewIterator(slice) - emi.SetReleaser(&memdbReleaser{m: em}) - its = append(its, emi) - if fm != nil { - fmi := fm.NewIterator(slice) - fmi.SetReleaser(&memdbReleaser{m: fm}) - its = append(its, fmi) - } - its = append(its, tableIts...) - mi := iterator.NewMergedIterator(its, db.s.icmp, strict) - mi.SetReleaser(&versionReleaser{v: v}) - return mi -} - -func (db *DB) newIterator(auxm *memDB, auxt tFiles, seq uint64, slice *util.Range, ro *opt.ReadOptions) *dbIter { - var islice *util.Range - if slice != nil { - islice = &util.Range{} - if slice.Start != nil { - islice.Start = makeInternalKey(nil, slice.Start, keyMaxSeq, keyTypeSeek) - } - if slice.Limit != nil { - islice.Limit = makeInternalKey(nil, slice.Limit, keyMaxSeq, keyTypeSeek) - } - } - rawIter := db.newRawIterator(auxm, auxt, islice, ro) - iter := &dbIter{ - db: db, - icmp: db.s.icmp, - iter: rawIter, - seq: seq, - strict: opt.GetStrict(db.s.o.Options, ro, opt.StrictReader), - key: make([]byte, 0), - value: make([]byte, 0), - } - atomic.AddInt32(&db.aliveIters, 1) - runtime.SetFinalizer(iter, (*dbIter).Release) - return iter -} - -func (db *DB) iterSamplingRate() int { - return rand.Intn(2 * db.s.o.GetIteratorSamplingRate()) -} - -type dir int - -const ( - dirReleased dir = iota - 1 - dirSOI - dirEOI - dirBackward - dirForward -) - -// dbIter represent an interator states over a database session. -type dbIter struct { - db *DB - icmp *iComparer - iter iterator.Iterator - seq uint64 - strict bool - - smaplingGap int - dir dir - key []byte - value []byte - err error - releaser util.Releaser -} - -func (i *dbIter) sampleSeek() { - ikey := i.iter.Key() - i.smaplingGap -= len(ikey) + len(i.iter.Value()) - for i.smaplingGap < 0 { - i.smaplingGap += i.db.iterSamplingRate() - i.db.sampleSeek(ikey) - } -} - -func (i *dbIter) setErr(err error) { - i.err = err - i.key = nil - i.value = nil -} - -func (i *dbIter) iterErr() { - if err := i.iter.Error(); err != nil { - i.setErr(err) - } -} - -func (i *dbIter) Valid() bool { - return i.err == nil && i.dir > dirEOI -} - -func (i *dbIter) First() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.iter.First() { - i.dir = dirSOI - return i.next() - } - i.dir = dirEOI - i.iterErr() - return false -} - -func (i *dbIter) Last() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.iter.Last() { - return i.prev() - } - i.dir = dirSOI - i.iterErr() - return false -} - -func (i *dbIter) Seek(key []byte) bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - ikey := makeInternalKey(nil, key, i.seq, keyTypeSeek) - if i.iter.Seek(ikey) { - i.dir = dirSOI - return i.next() - } - i.dir = dirEOI - i.iterErr() - return false -} - -func (i *dbIter) next() bool { - for { - if ukey, seq, kt, kerr := parseInternalKey(i.iter.Key()); kerr == nil { - i.sampleSeek() - if seq <= i.seq { - switch kt { - case keyTypeDel: - // Skip deleted key. - i.key = append(i.key[:0], ukey...) - i.dir = dirForward - case keyTypeVal: - if i.dir == dirSOI || i.icmp.uCompare(ukey, i.key) > 0 { - i.key = append(i.key[:0], ukey...) - i.value = append(i.value[:0], i.iter.Value()...) - i.dir = dirForward - return true - } - } - } - } else if i.strict { - i.setErr(kerr) - break - } - if !i.iter.Next() { - i.dir = dirEOI - i.iterErr() - break - } - } - return false -} - -func (i *dbIter) Next() bool { - if i.dir == dirEOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if !i.iter.Next() || (i.dir == dirBackward && !i.iter.Next()) { - i.dir = dirEOI - i.iterErr() - return false - } - return i.next() -} - -func (i *dbIter) prev() bool { - i.dir = dirBackward - del := true - if i.iter.Valid() { - for { - if ukey, seq, kt, kerr := parseInternalKey(i.iter.Key()); kerr == nil { - i.sampleSeek() - if seq <= i.seq { - if !del && i.icmp.uCompare(ukey, i.key) < 0 { - return true - } - del = (kt == keyTypeDel) - if !del { - i.key = append(i.key[:0], ukey...) - i.value = append(i.value[:0], i.iter.Value()...) - } - } - } else if i.strict { - i.setErr(kerr) - return false - } - if !i.iter.Prev() { - break - } - } - } - if del { - i.dir = dirSOI - i.iterErr() - return false - } - return true -} - -func (i *dbIter) Prev() bool { - if i.dir == dirSOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - switch i.dir { - case dirEOI: - return i.Last() - case dirForward: - for i.iter.Prev() { - if ukey, _, _, kerr := parseInternalKey(i.iter.Key()); kerr == nil { - i.sampleSeek() - if i.icmp.uCompare(ukey, i.key) < 0 { - goto cont - } - } else if i.strict { - i.setErr(kerr) - return false - } - } - i.dir = dirSOI - i.iterErr() - return false - } - -cont: - return i.prev() -} - -func (i *dbIter) Key() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.key -} - -func (i *dbIter) Value() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.value -} - -func (i *dbIter) Release() { - if i.dir != dirReleased { - // Clear the finalizer. - runtime.SetFinalizer(i, nil) - - if i.releaser != nil { - i.releaser.Release() - i.releaser = nil - } - - i.dir = dirReleased - i.key = nil - i.value = nil - i.iter.Release() - i.iter = nil - atomic.AddInt32(&i.db.aliveIters, -1) - i.db = nil - } -} - -func (i *dbIter) SetReleaser(releaser util.Releaser) { - if i.dir == dirReleased { - panic(util.ErrReleased) - } - if i.releaser != nil && releaser != nil { - panic(util.ErrHasReleaser) - } - i.releaser = releaser -} - -func (i *dbIter) Error() error { - return i.err -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_snapshot.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_snapshot.go deleted file mode 100644 index 977f65ba5..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_snapshot.go +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "container/list" - "fmt" - "runtime" - "sync" - "sync/atomic" - - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" -) - -type snapshotElement struct { - seq uint64 - ref int - e *list.Element -} - -// Acquires a snapshot, based on latest sequence. -func (db *DB) acquireSnapshot() *snapshotElement { - db.snapsMu.Lock() - defer db.snapsMu.Unlock() - - seq := db.getSeq() - - if e := db.snapsList.Back(); e != nil { - se := e.Value.(*snapshotElement) - if se.seq == seq { - se.ref++ - return se - } else if seq < se.seq { - panic("leveldb: sequence number is not increasing") - } - } - se := &snapshotElement{seq: seq, ref: 1} - se.e = db.snapsList.PushBack(se) - return se -} - -// Releases given snapshot element. -func (db *DB) releaseSnapshot(se *snapshotElement) { - db.snapsMu.Lock() - defer db.snapsMu.Unlock() - - se.ref-- - if se.ref == 0 { - db.snapsList.Remove(se.e) - se.e = nil - } else if se.ref < 0 { - panic("leveldb: Snapshot: negative element reference") - } -} - -// Gets minimum sequence that not being snapshoted. -func (db *DB) minSeq() uint64 { - db.snapsMu.Lock() - defer db.snapsMu.Unlock() - - if e := db.snapsList.Front(); e != nil { - return e.Value.(*snapshotElement).seq - } - - return db.getSeq() -} - -// Snapshot is a DB snapshot. -type Snapshot struct { - db *DB - elem *snapshotElement - mu sync.RWMutex - released bool -} - -// Creates new snapshot object. -func (db *DB) newSnapshot() *Snapshot { - snap := &Snapshot{ - db: db, - elem: db.acquireSnapshot(), - } - atomic.AddInt32(&db.aliveSnaps, 1) - runtime.SetFinalizer(snap, (*Snapshot).Release) - return snap -} - -func (snap *Snapshot) String() string { - return fmt.Sprintf("leveldb.Snapshot{%d}", snap.elem.seq) -} - -// Get gets the value for the given key. It returns ErrNotFound if -// the DB does not contains the key. -// -// The caller should not modify the contents of the returned slice, but -// it is safe to modify the contents of the argument after Get returns. -func (snap *Snapshot) Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) { - err = snap.db.ok() - if err != nil { - return - } - snap.mu.RLock() - defer snap.mu.RUnlock() - if snap.released { - err = ErrSnapshotReleased - return - } - return snap.db.get(nil, nil, key, snap.elem.seq, ro) -} - -// Has returns true if the DB does contains the given key. -// -// It is safe to modify the contents of the argument after Get returns. -func (snap *Snapshot) Has(key []byte, ro *opt.ReadOptions) (ret bool, err error) { - err = snap.db.ok() - if err != nil { - return - } - snap.mu.RLock() - defer snap.mu.RUnlock() - if snap.released { - err = ErrSnapshotReleased - return - } - return snap.db.has(nil, nil, key, snap.elem.seq, ro) -} - -// NewIterator returns an iterator for the snapshot of the underlying DB. -// The returned iterator is not goroutine-safe, but it is safe to use -// multiple iterators concurrently, with each in a dedicated goroutine. -// It is also safe to use an iterator concurrently with modifying its -// underlying DB. The resultant key/value pairs are guaranteed to be -// consistent. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// DB. And a nil Range.Limit is treated as a key after all keys in -// the DB. -// -// The iterator must be released after use, by calling Release method. -// Releasing the snapshot doesn't mean releasing the iterator too, the -// iterator would be still valid until released. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (snap *Snapshot) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - if err := snap.db.ok(); err != nil { - return iterator.NewEmptyIterator(err) - } - snap.mu.Lock() - defer snap.mu.Unlock() - if snap.released { - return iterator.NewEmptyIterator(ErrSnapshotReleased) - } - // Since iterator already hold version ref, it doesn't need to - // hold snapshot ref. - return snap.db.newIterator(nil, nil, snap.elem.seq, slice, ro) -} - -// Release releases the snapshot. This will not release any returned -// iterators, the iterators would still be valid until released or the -// underlying DB is closed. -// -// Other methods should not be called after the snapshot has been released. -func (snap *Snapshot) Release() { - snap.mu.Lock() - defer snap.mu.Unlock() - - if !snap.released { - // Clear the finalizer. - runtime.SetFinalizer(snap, nil) - - snap.released = true - snap.db.releaseSnapshot(snap.elem) - atomic.AddInt32(&snap.db.aliveSnaps, -1) - snap.db = nil - snap.elem = nil - } -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_state.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_state.go deleted file mode 100644 index 40f454da1..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_state.go +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright (c) 2013, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "sync/atomic" - "time" - - "github.com/syndtr/goleveldb/leveldb/journal" - "github.com/syndtr/goleveldb/leveldb/memdb" - "github.com/syndtr/goleveldb/leveldb/storage" -) - -type memDB struct { - db *DB - *memdb.DB - ref int32 -} - -func (m *memDB) getref() int32 { - return atomic.LoadInt32(&m.ref) -} - -func (m *memDB) incref() { - atomic.AddInt32(&m.ref, 1) -} - -func (m *memDB) decref() { - if ref := atomic.AddInt32(&m.ref, -1); ref == 0 { - // Only put back memdb with std capacity. - if m.Capacity() == m.db.s.o.GetWriteBuffer() { - m.Reset() - m.db.mpoolPut(m.DB) - } - m.db = nil - m.DB = nil - } else if ref < 0 { - panic("negative memdb ref") - } -} - -// Get latest sequence number. -func (db *DB) getSeq() uint64 { - return atomic.LoadUint64(&db.seq) -} - -// Atomically adds delta to seq. -func (db *DB) addSeq(delta uint64) { - atomic.AddUint64(&db.seq, delta) -} - -func (db *DB) setSeq(seq uint64) { - atomic.StoreUint64(&db.seq, seq) -} - -func (db *DB) sampleSeek(ikey internalKey) { - v := db.s.version() - if v.sampleSeek(ikey) { - // Trigger table compaction. - db.compTrigger(db.tcompCmdC) - } - v.release() -} - -func (db *DB) mpoolPut(mem *memdb.DB) { - defer func() { - recover() - }() - select { - case db.memPool <- mem: - default: - } -} - -func (db *DB) mpoolGet(n int) *memDB { - var mdb *memdb.DB - select { - case mdb = <-db.memPool: - default: - } - if mdb == nil || mdb.Capacity() < n { - mdb = memdb.New(db.s.icmp, maxInt(db.s.o.GetWriteBuffer(), n)) - } - return &memDB{ - db: db, - DB: mdb, - } -} - -func (db *DB) mpoolDrain() { - ticker := time.NewTicker(30 * time.Second) - for { - select { - case <-ticker.C: - select { - case <-db.memPool: - default: - } - case _, _ = <-db.closeC: - close(db.memPool) - return - } - } -} - -// Create new memdb and froze the old one; need external synchronization. -// newMem only called synchronously by the writer. -func (db *DB) newMem(n int) (mem *memDB, err error) { - fd := storage.FileDesc{Type: storage.TypeJournal, Num: db.s.allocFileNum()} - w, err := db.s.stor.Create(fd) - if err != nil { - db.s.reuseFileNum(fd.Num) - return - } - - db.memMu.Lock() - defer db.memMu.Unlock() - - if db.frozenMem != nil { - panic("still has frozen mem") - } - - if db.journal == nil { - db.journal = journal.NewWriter(w) - } else { - db.journal.Reset(w) - db.journalWriter.Close() - db.frozenJournalFd = db.journalFd - } - db.journalWriter = w - db.journalFd = fd - db.frozenMem = db.mem - mem = db.mpoolGet(n) - mem.incref() // for self - mem.incref() // for caller - db.mem = mem - // The seq only incremented by the writer. And whoever called newMem - // should hold write lock, so no need additional synchronization here. - db.frozenSeq = db.seq - return -} - -// Get all memdbs. -func (db *DB) getMems() (e, f *memDB) { - db.memMu.RLock() - defer db.memMu.RUnlock() - if db.mem == nil { - panic("nil effective mem") - } - db.mem.incref() - if db.frozenMem != nil { - db.frozenMem.incref() - } - return db.mem, db.frozenMem -} - -// Get frozen memdb. -func (db *DB) getEffectiveMem() *memDB { - db.memMu.RLock() - defer db.memMu.RUnlock() - if db.mem == nil { - panic("nil effective mem") - } - db.mem.incref() - return db.mem -} - -// Check whether we has frozen memdb. -func (db *DB) hasFrozenMem() bool { - db.memMu.RLock() - defer db.memMu.RUnlock() - return db.frozenMem != nil -} - -// Get frozen memdb. -func (db *DB) getFrozenMem() *memDB { - db.memMu.RLock() - defer db.memMu.RUnlock() - if db.frozenMem != nil { - db.frozenMem.incref() - } - return db.frozenMem -} - -// Drop frozen memdb; assume that frozen memdb isn't nil. -func (db *DB) dropFrozenMem() { - db.memMu.Lock() - if err := db.s.stor.Remove(db.frozenJournalFd); err != nil { - db.logf("journal@remove removing @%d %q", db.frozenJournalFd.Num, err) - } else { - db.logf("journal@remove removed @%d", db.frozenJournalFd.Num) - } - db.frozenJournalFd = storage.FileDesc{} - db.frozenMem.decref() - db.frozenMem = nil - db.memMu.Unlock() -} - -// Set closed flag; return true if not already closed. -func (db *DB) setClosed() bool { - return atomic.CompareAndSwapUint32(&db.closed, 0, 1) -} - -// Check whether DB was closed. -func (db *DB) isClosed() bool { - return atomic.LoadUint32(&db.closed) != 0 -} - -// Check read ok status. -func (db *DB) ok() error { - if db.isClosed() { - return ErrClosed - } - return nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_transaction.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_transaction.go deleted file mode 100644 index fca88037b..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_transaction.go +++ /dev/null @@ -1,289 +0,0 @@ -// Copyright (c) 2016, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "errors" - "sync" - "time" - - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" -) - -var errTransactionDone = errors.New("leveldb: transaction already closed") - -// Transaction is the transaction handle. -type Transaction struct { - db *DB - lk sync.RWMutex - seq uint64 - mem *memDB - tables tFiles - ikScratch []byte - rec sessionRecord - stats cStatStaging - closed bool -} - -// Get gets the value for the given key. It returns ErrNotFound if the -// DB does not contains the key. -// -// The returned slice is its own copy, it is safe to modify the contents -// of the returned slice. -// It is safe to modify the contents of the argument after Get returns. -func (tr *Transaction) Get(key []byte, ro *opt.ReadOptions) ([]byte, error) { - tr.lk.RLock() - defer tr.lk.RUnlock() - if tr.closed { - return nil, errTransactionDone - } - return tr.db.get(tr.mem.DB, tr.tables, key, tr.seq, ro) -} - -// Has returns true if the DB does contains the given key. -// -// It is safe to modify the contents of the argument after Has returns. -func (tr *Transaction) Has(key []byte, ro *opt.ReadOptions) (bool, error) { - tr.lk.RLock() - defer tr.lk.RUnlock() - if tr.closed { - return false, errTransactionDone - } - return tr.db.has(tr.mem.DB, tr.tables, key, tr.seq, ro) -} - -// NewIterator returns an iterator for the latest snapshot of the transaction. -// The returned iterator is not goroutine-safe, but it is safe to use multiple -// iterators concurrently, with each in a dedicated goroutine. -// It is also safe to use an iterator concurrently while writes to the -// transaction. The resultant key/value pairs are guaranteed to be consistent. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// DB. And a nil Range.Limit is treated as a key after all keys in -// the DB. -// -// The iterator must be released after use, by calling Release method. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (tr *Transaction) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - tr.lk.RLock() - defer tr.lk.RUnlock() - if tr.closed { - return iterator.NewEmptyIterator(errTransactionDone) - } - tr.mem.incref() - return tr.db.newIterator(tr.mem, tr.tables, tr.seq, slice, ro) -} - -func (tr *Transaction) flush() error { - // Flush memdb. - if tr.mem.Len() != 0 { - tr.stats.startTimer() - iter := tr.mem.NewIterator(nil) - t, n, err := tr.db.s.tops.createFrom(iter) - iter.Release() - tr.stats.stopTimer() - if err != nil { - return err - } - if tr.mem.getref() == 1 { - tr.mem.Reset() - } else { - tr.mem.decref() - tr.mem = tr.db.mpoolGet(0) - tr.mem.incref() - } - tr.tables = append(tr.tables, t) - tr.rec.addTableFile(0, t) - tr.stats.write += t.size - tr.db.logf("transaction@flush created L0@%d N·%d S·%s %q:%q", t.fd.Num, n, shortenb(int(t.size)), t.imin, t.imax) - } - return nil -} - -func (tr *Transaction) put(kt keyType, key, value []byte) error { - tr.ikScratch = makeInternalKey(tr.ikScratch, key, tr.seq+1, kt) - if tr.mem.Free() < len(tr.ikScratch)+len(value) { - if err := tr.flush(); err != nil { - return err - } - } - if err := tr.mem.Put(tr.ikScratch, value); err != nil { - return err - } - tr.seq++ - return nil -} - -// Put sets the value for the given key. It overwrites any previous value -// for that key; a DB is not a multi-map. -// Please note that the transaction is not compacted until committed, so if you -// writes 10 same keys, then those 10 same keys are in the transaction. -// -// It is safe to modify the contents of the arguments after Put returns. -func (tr *Transaction) Put(key, value []byte, wo *opt.WriteOptions) error { - tr.lk.Lock() - defer tr.lk.Unlock() - if tr.closed { - return errTransactionDone - } - return tr.put(keyTypeVal, key, value) -} - -// Delete deletes the value for the given key. -// Please note that the transaction is not compacted until committed, so if you -// writes 10 same keys, then those 10 same keys are in the transaction. -// -// It is safe to modify the contents of the arguments after Delete returns. -func (tr *Transaction) Delete(key []byte, wo *opt.WriteOptions) error { - tr.lk.Lock() - defer tr.lk.Unlock() - if tr.closed { - return errTransactionDone - } - return tr.put(keyTypeDel, key, nil) -} - -// Write apply the given batch to the transaction. The batch will be applied -// sequentially. -// Please note that the transaction is not compacted until committed, so if you -// writes 10 same keys, then those 10 same keys are in the transaction. -// -// It is safe to modify the contents of the arguments after Write returns. -func (tr *Transaction) Write(b *Batch, wo *opt.WriteOptions) error { - if b == nil || b.Len() == 0 { - return nil - } - - tr.lk.Lock() - defer tr.lk.Unlock() - if tr.closed { - return errTransactionDone - } - return b.decodeRec(func(i int, kt keyType, key, value []byte) error { - return tr.put(kt, key, value) - }) -} - -func (tr *Transaction) setDone() { - tr.closed = true - tr.db.tr = nil - tr.mem.decref() - <-tr.db.writeLockC -} - -// Commit commits the transaction. -// -// Other methods should not be called after transaction has been committed. -func (tr *Transaction) Commit() error { - if err := tr.db.ok(); err != nil { - return err - } - - tr.lk.Lock() - defer tr.lk.Unlock() - if tr.closed { - return errTransactionDone - } - defer tr.setDone() - if err := tr.flush(); err != nil { - tr.discard() - return err - } - if len(tr.tables) != 0 { - // Committing transaction. - tr.rec.setSeqNum(tr.seq) - tr.db.compCommitLk.Lock() - defer tr.db.compCommitLk.Unlock() - for retry := 0; retry < 3; retry++ { - if err := tr.db.s.commit(&tr.rec); err != nil { - tr.db.logf("transaction@commit error R·%d %q", retry, err) - select { - case <-time.After(time.Second): - case _, _ = <-tr.db.closeC: - tr.db.logf("transaction@commit exiting") - return err - } - } else { - // Success. Set db.seq. - tr.db.setSeq(tr.seq) - break - } - } - // Trigger table auto-compaction. - tr.db.compTrigger(tr.db.tcompCmdC) - } - return nil -} - -func (tr *Transaction) discard() { - // Discard transaction. - for _, t := range tr.tables { - tr.db.logf("transaction@discard @%d", t.fd.Num) - if err1 := tr.db.s.stor.Remove(t.fd); err1 == nil { - tr.db.s.reuseFileNum(t.fd.Num) - } - } -} - -// Discard discards the transaction. -// -// Other methods should not be called after transaction has been discarded. -func (tr *Transaction) Discard() { - tr.lk.Lock() - if !tr.closed { - tr.discard() - tr.setDone() - } - tr.lk.Unlock() -} - -// OpenTransaction opens an atomic DB transaction. Only one transaction can be -// opened at a time. Write will be blocked until the transaction is committed or -// discarded. -// The returned transaction handle is goroutine-safe. -// -// The transaction must be closed once done, either by committing or discarding -// the transaction. -// Closing the DB will discard open transaction. -func (db *DB) OpenTransaction() (*Transaction, error) { - if err := db.ok(); err != nil { - return nil, err - } - - // The write happen synchronously. - select { - case db.writeLockC <- struct{}{}: - case err := <-db.compPerErrC: - return nil, err - case _, _ = <-db.closeC: - return nil, ErrClosed - } - - if db.tr != nil { - panic("leveldb: has open transaction") - } - - // Flush current memdb. - if db.mem != nil && db.mem.Len() != 0 { - if _, err := db.rotateMem(0, true); err != nil { - return nil, err - } - } - - tr := &Transaction{ - db: db, - seq: db.seq, - mem: db.mpoolGet(0), - } - tr.mem.incref() - db.tr = tr - return tr, nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_util.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_util.go deleted file mode 100644 index 7fd386ca4..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_util.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/util" -) - -// Reader is the interface that wraps basic Get and NewIterator methods. -// This interface implemented by both DB and Snapshot. -type Reader interface { - Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) - NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator -} - -// Sizes is list of size. -type Sizes []int64 - -// Sum returns sum of the sizes. -func (sizes Sizes) Sum() int64 { - var sum int64 - for _, size := range sizes { - sum += size - } - return sum -} - -// Logging. -func (db *DB) log(v ...interface{}) { db.s.log(v...) } -func (db *DB) logf(format string, v ...interface{}) { db.s.logf(format, v...) } - -// Check and clean files. -func (db *DB) checkAndCleanFiles() error { - v := db.s.version() - defer v.release() - - tmap := make(map[int64]bool) - for _, tables := range v.levels { - for _, t := range tables { - tmap[t.fd.Num] = false - } - } - - fds, err := db.s.stor.List(storage.TypeAll) - if err != nil { - return err - } - - var nt int - var rem []storage.FileDesc - for _, fd := range fds { - keep := true - switch fd.Type { - case storage.TypeManifest: - keep = fd.Num >= db.s.manifestFd.Num - case storage.TypeJournal: - if !db.frozenJournalFd.Nil() { - keep = fd.Num >= db.frozenJournalFd.Num - } else { - keep = fd.Num >= db.journalFd.Num - } - case storage.TypeTable: - _, keep = tmap[fd.Num] - if keep { - tmap[fd.Num] = true - nt++ - } - } - - if !keep { - rem = append(rem, fd) - } - } - - if nt != len(tmap) { - var mfds []storage.FileDesc - for num, present := range tmap { - if !present { - mfds = append(mfds, storage.FileDesc{storage.TypeTable, num}) - db.logf("db@janitor table missing @%d", num) - } - } - return errors.NewErrCorrupted(storage.FileDesc{}, &errors.ErrMissingFiles{Fds: mfds}) - } - - db.logf("db@janitor F·%d G·%d", len(fds), len(rem)) - for _, fd := range rem { - db.logf("db@janitor removing %s-%d", fd.Type, fd.Num) - if err := db.s.stor.Remove(fd); err != nil { - return err - } - } - return nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_write.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_write.go deleted file mode 100644 index 5576761fe..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_write.go +++ /dev/null @@ -1,358 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "time" - - "github.com/syndtr/goleveldb/leveldb/memdb" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" -) - -func (db *DB) writeJournal(b *Batch) error { - w, err := db.journal.Next() - if err != nil { - return err - } - if _, err := w.Write(b.encode()); err != nil { - return err - } - if err := db.journal.Flush(); err != nil { - return err - } - if b.sync { - return db.journalWriter.Sync() - } - return nil -} - -func (db *DB) jWriter() { - defer db.closeW.Done() - for { - select { - case b := <-db.journalC: - if b != nil { - db.journalAckC <- db.writeJournal(b) - } - case _, _ = <-db.closeC: - return - } - } -} - -func (db *DB) rotateMem(n int, wait bool) (mem *memDB, err error) { - // Wait for pending memdb compaction. - err = db.compTriggerWait(db.mcompCmdC) - if err != nil { - return - } - - // Create new memdb and journal. - mem, err = db.newMem(n) - if err != nil { - return - } - - // Schedule memdb compaction. - if wait { - err = db.compTriggerWait(db.mcompCmdC) - } else { - db.compTrigger(db.mcompCmdC) - } - return -} - -func (db *DB) flush(n int) (mdb *memDB, mdbFree int, err error) { - delayed := false - flush := func() (retry bool) { - v := db.s.version() - defer v.release() - mdb = db.getEffectiveMem() - defer func() { - if retry { - mdb.decref() - mdb = nil - } - }() - mdbFree = mdb.Free() - switch { - case v.tLen(0) >= db.s.o.GetWriteL0SlowdownTrigger() && !delayed: - delayed = true - time.Sleep(time.Millisecond) - case mdbFree >= n: - return false - case v.tLen(0) >= db.s.o.GetWriteL0PauseTrigger(): - delayed = true - err = db.compTriggerWait(db.tcompCmdC) - if err != nil { - return false - } - default: - // Allow memdb to grow if it has no entry. - if mdb.Len() == 0 { - mdbFree = n - } else { - mdb.decref() - mdb, err = db.rotateMem(n, false) - if err == nil { - mdbFree = mdb.Free() - } else { - mdbFree = 0 - } - } - return false - } - return true - } - start := time.Now() - for flush() { - } - if delayed { - db.writeDelay += time.Since(start) - db.writeDelayN++ - } else if db.writeDelayN > 0 { - db.logf("db@write was delayed N·%d T·%v", db.writeDelayN, db.writeDelay) - db.writeDelay = 0 - db.writeDelayN = 0 - } - return -} - -// Write apply the given batch to the DB. The batch will be applied -// sequentially. -// -// It is safe to modify the contents of the arguments after Write returns. -func (db *DB) Write(b *Batch, wo *opt.WriteOptions) (err error) { - err = db.ok() - if err != nil || b == nil || b.Len() == 0 { - return - } - - b.init(wo.GetSync() && !db.s.o.GetNoSync()) - - if b.size() > db.s.o.GetWriteBuffer() && !db.s.o.GetDisableLargeBatchTransaction() { - // Writes using transaction. - tr, err1 := db.OpenTransaction() - if err1 != nil { - return err1 - } - if err1 := tr.Write(b, wo); err1 != nil { - tr.Discard() - return err1 - } - return tr.Commit() - } - - // The write happen synchronously. - select { - case db.writeC <- b: - if <-db.writeMergedC { - return <-db.writeAckC - } - // Continue, the write lock already acquired by previous writer - // and handed out to us. - case db.writeLockC <- struct{}{}: - case err = <-db.compPerErrC: - return - case _, _ = <-db.closeC: - return ErrClosed - } - - merged := 0 - danglingMerge := false - defer func() { - for i := 0; i < merged; i++ { - db.writeAckC <- err - } - if danglingMerge { - // Only one dangling merge at most, so this is safe. - db.writeMergedC <- false - } else { - <-db.writeLockC - } - }() - - mdb, mdbFree, err := db.flush(b.size()) - if err != nil { - return - } - defer mdb.decref() - - // Calculate maximum size of the batch. - m := 1 << 20 - if x := b.size(); x <= 128<<10 { - m = x + (128 << 10) - } - m = minInt(m, mdbFree) - - // Merge with other batch. -drain: - for b.size() < m && !b.sync { - select { - case nb := <-db.writeC: - if b.size()+nb.size() <= m { - b.append(nb) - db.writeMergedC <- true - merged++ - } else { - danglingMerge = true - break drain - } - default: - break drain - } - } - - // Set batch first seq number relative from last seq. - b.seq = db.seq + 1 - - // Write journal concurrently if it is large enough. - if b.size() >= (128 << 10) { - // Push the write batch to the journal writer - select { - case db.journalC <- b: - // Write into memdb - if berr := b.memReplay(mdb.DB); berr != nil { - panic(berr) - } - case err = <-db.compPerErrC: - return - case _, _ = <-db.closeC: - err = ErrClosed - return - } - // Wait for journal writer - select { - case err = <-db.journalAckC: - if err != nil { - // Revert memdb if error detected - if berr := b.revertMemReplay(mdb.DB); berr != nil { - panic(berr) - } - return - } - case _, _ = <-db.closeC: - err = ErrClosed - return - } - } else { - err = db.writeJournal(b) - if err != nil { - return - } - if berr := b.memReplay(mdb.DB); berr != nil { - panic(berr) - } - } - - // Set last seq number. - db.addSeq(uint64(b.Len())) - - if b.size() >= mdbFree { - db.rotateMem(0, false) - } - return -} - -// Put sets the value for the given key. It overwrites any previous value -// for that key; a DB is not a multi-map. -// -// It is safe to modify the contents of the arguments after Put returns. -func (db *DB) Put(key, value []byte, wo *opt.WriteOptions) error { - b := new(Batch) - b.Put(key, value) - return db.Write(b, wo) -} - -// Delete deletes the value for the given key. -// -// It is safe to modify the contents of the arguments after Delete returns. -func (db *DB) Delete(key []byte, wo *opt.WriteOptions) error { - b := new(Batch) - b.Delete(key) - return db.Write(b, wo) -} - -func isMemOverlaps(icmp *iComparer, mem *memdb.DB, min, max []byte) bool { - iter := mem.NewIterator(nil) - defer iter.Release() - return (max == nil || (iter.First() && icmp.uCompare(max, internalKey(iter.Key()).ukey()) >= 0)) && - (min == nil || (iter.Last() && icmp.uCompare(min, internalKey(iter.Key()).ukey()) <= 0)) -} - -// CompactRange compacts the underlying DB for the given key range. -// In particular, deleted and overwritten versions are discarded, -// and the data is rearranged to reduce the cost of operations -// needed to access the data. This operation should typically only -// be invoked by users who understand the underlying implementation. -// -// A nil Range.Start is treated as a key before all keys in the DB. -// And a nil Range.Limit is treated as a key after all keys in the DB. -// Therefore if both is nil then it will compact entire DB. -func (db *DB) CompactRange(r util.Range) error { - if err := db.ok(); err != nil { - return err - } - - // Lock writer. - select { - case db.writeLockC <- struct{}{}: - case err := <-db.compPerErrC: - return err - case _, _ = <-db.closeC: - return ErrClosed - } - - // Check for overlaps in memdb. - mdb := db.getEffectiveMem() - defer mdb.decref() - if isMemOverlaps(db.s.icmp, mdb.DB, r.Start, r.Limit) { - // Memdb compaction. - if _, err := db.rotateMem(0, false); err != nil { - <-db.writeLockC - return err - } - <-db.writeLockC - if err := db.compTriggerWait(db.mcompCmdC); err != nil { - return err - } - } else { - <-db.writeLockC - } - - // Table compaction. - return db.compTriggerRange(db.tcompCmdC, -1, r.Start, r.Limit) -} - -// SetReadOnly makes DB read-only. It will stay read-only until reopened. -func (db *DB) SetReadOnly() error { - if err := db.ok(); err != nil { - return err - } - - // Lock writer. - select { - case db.writeLockC <- struct{}{}: - db.compWriteLocking = true - case err := <-db.compPerErrC: - return err - case _, _ = <-db.closeC: - return ErrClosed - } - - // Set compaction read-only. - select { - case db.compErrSetC <- ErrReadOnly: - case perr := <-db.compPerErrC: - return perr - case _, _ = <-db.closeC: - return ErrClosed - } - - return nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/doc.go b/vendor/github.com/syndtr/goleveldb/leveldb/doc.go deleted file mode 100644 index 53f13bb24..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/doc.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package leveldb provides implementation of LevelDB key/value database. -// -// Create or open a database: -// -// db, err := leveldb.OpenFile("path/to/db", nil) -// ... -// defer db.Close() -// ... -// -// Read or modify the database content: -// -// // Remember that the contents of the returned slice should not be modified. -// data, err := db.Get([]byte("key"), nil) -// ... -// err = db.Put([]byte("key"), []byte("value"), nil) -// ... -// err = db.Delete([]byte("key"), nil) -// ... -// -// Iterate over database content: -// -// iter := db.NewIterator(nil, nil) -// for iter.Next() { -// // Remember that the contents of the returned slice should not be modified, and -// // only valid until the next call to Next. -// key := iter.Key() -// value := iter.Value() -// ... -// } -// iter.Release() -// err = iter.Error() -// ... -// -// Iterate over subset of database content with a particular prefix: -// iter := db.NewIterator(util.BytesPrefix([]byte("foo-")), nil) -// for iter.Next() { -// // Use key/value. -// ... -// } -// iter.Release() -// err = iter.Error() -// ... -// -// Seek-then-Iterate: -// -// iter := db.NewIterator(nil, nil) -// for ok := iter.Seek(key); ok; ok = iter.Next() { -// // Use key/value. -// ... -// } -// iter.Release() -// err = iter.Error() -// ... -// -// Iterate over subset of database content: -// -// iter := db.NewIterator(&util.Range{Start: []byte("foo"), Limit: []byte("xoo")}, nil) -// for iter.Next() { -// // Use key/value. -// ... -// } -// iter.Release() -// err = iter.Error() -// ... -// -// Batch writes: -// -// batch := new(leveldb.Batch) -// batch.Put([]byte("foo"), []byte("value")) -// batch.Put([]byte("bar"), []byte("another value")) -// batch.Delete([]byte("baz")) -// err = db.Write(batch, nil) -// ... -// -// Use bloom filter: -// -// o := &opt.Options{ -// Filter: filter.NewBloomFilter(10), -// } -// db, err := leveldb.OpenFile("path/to/db", o) -// ... -// defer db.Close() -// ... -package leveldb diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/errors.go b/vendor/github.com/syndtr/goleveldb/leveldb/errors.go deleted file mode 100644 index c8bd66a5a..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/errors.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/syndtr/goleveldb/leveldb/errors" -) - -var ( - ErrNotFound = errors.ErrNotFound - ErrReadOnly = errors.New("leveldb: read-only mode") - ErrSnapshotReleased = errors.New("leveldb: snapshot released") - ErrIterReleased = errors.New("leveldb: iterator released") - ErrClosed = errors.New("leveldb: closed") -) diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/errors/errors.go b/vendor/github.com/syndtr/goleveldb/leveldb/errors/errors.go deleted file mode 100644 index 9a0f6e2c1..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/errors/errors.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package errors provides common error types used throughout leveldb. -package errors - -import ( - "errors" - "fmt" - - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/util" -) - -var ( - ErrNotFound = New("leveldb: not found") - ErrReleased = util.ErrReleased - ErrHasReleaser = util.ErrHasReleaser -) - -// New returns an error that formats as the given text. -func New(text string) error { - return errors.New(text) -} - -// ErrCorrupted is the type that wraps errors that indicate corruption in -// the database. -type ErrCorrupted struct { - Fd storage.FileDesc - Err error -} - -func (e *ErrCorrupted) Error() string { - if !e.Fd.Nil() { - return fmt.Sprintf("%v [file=%v]", e.Err, e.Fd) - } else { - return e.Err.Error() - } -} - -// NewErrCorrupted creates new ErrCorrupted error. -func NewErrCorrupted(fd storage.FileDesc, err error) error { - return &ErrCorrupted{fd, err} -} - -// IsCorrupted returns a boolean indicating whether the error is indicating -// a corruption. -func IsCorrupted(err error) bool { - switch err.(type) { - case *ErrCorrupted: - return true - case *storage.ErrCorrupted: - return true - } - return false -} - -// ErrMissingFiles is the type that indicating a corruption due to missing -// files. ErrMissingFiles always wrapped with ErrCorrupted. -type ErrMissingFiles struct { - Fds []storage.FileDesc -} - -func (e *ErrMissingFiles) Error() string { return "file missing" } - -// SetFd sets 'file info' of the given error with the given file. -// Currently only ErrCorrupted is supported, otherwise will do nothing. -func SetFd(err error, fd storage.FileDesc) error { - switch x := err.(type) { - case *ErrCorrupted: - x.Fd = fd - return x - } - return err -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/filter.go b/vendor/github.com/syndtr/goleveldb/leveldb/filter.go deleted file mode 100644 index e961e420d..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/filter.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/syndtr/goleveldb/leveldb/filter" -) - -type iFilter struct { - filter.Filter -} - -func (f iFilter) Contains(filter, key []byte) bool { - return f.Filter.Contains(filter, internalKey(key).ukey()) -} - -func (f iFilter) NewGenerator() filter.FilterGenerator { - return iFilterGenerator{f.Filter.NewGenerator()} -} - -type iFilterGenerator struct { - filter.FilterGenerator -} - -func (g iFilterGenerator) Add(key []byte) { - g.FilterGenerator.Add(internalKey(key).ukey()) -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/filter/bloom.go b/vendor/github.com/syndtr/goleveldb/leveldb/filter/bloom.go deleted file mode 100644 index bab0e9970..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/filter/bloom.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package filter - -import ( - "github.com/syndtr/goleveldb/leveldb/util" -) - -func bloomHash(key []byte) uint32 { - return util.Hash(key, 0xbc9f1d34) -} - -type bloomFilter int - -// The bloom filter serializes its parameters and is backward compatible -// with respect to them. Therefor, its parameters are not added to its -// name. -func (bloomFilter) Name() string { - return "leveldb.BuiltinBloomFilter" -} - -func (f bloomFilter) Contains(filter, key []byte) bool { - nBytes := len(filter) - 1 - if nBytes < 1 { - return false - } - nBits := uint32(nBytes * 8) - - // Use the encoded k so that we can read filters generated by - // bloom filters created using different parameters. - k := filter[nBytes] - if k > 30 { - // Reserved for potentially new encodings for short bloom filters. - // Consider it a match. - return true - } - - kh := bloomHash(key) - delta := (kh >> 17) | (kh << 15) // Rotate right 17 bits - for j := uint8(0); j < k; j++ { - bitpos := kh % nBits - if (uint32(filter[bitpos/8]) & (1 << (bitpos % 8))) == 0 { - return false - } - kh += delta - } - return true -} - -func (f bloomFilter) NewGenerator() FilterGenerator { - // Round down to reduce probing cost a little bit. - k := uint8(f * 69 / 100) // 0.69 =~ ln(2) - if k < 1 { - k = 1 - } else if k > 30 { - k = 30 - } - return &bloomFilterGenerator{ - n: int(f), - k: k, - } -} - -type bloomFilterGenerator struct { - n int - k uint8 - - keyHashes []uint32 -} - -func (g *bloomFilterGenerator) Add(key []byte) { - // Use double-hashing to generate a sequence of hash values. - // See analysis in [Kirsch,Mitzenmacher 2006]. - g.keyHashes = append(g.keyHashes, bloomHash(key)) -} - -func (g *bloomFilterGenerator) Generate(b Buffer) { - // Compute bloom filter size (in both bits and bytes) - nBits := uint32(len(g.keyHashes) * g.n) - // For small n, we can see a very high false positive rate. Fix it - // by enforcing a minimum bloom filter length. - if nBits < 64 { - nBits = 64 - } - nBytes := (nBits + 7) / 8 - nBits = nBytes * 8 - - dest := b.Alloc(int(nBytes) + 1) - dest[nBytes] = g.k - for _, kh := range g.keyHashes { - delta := (kh >> 17) | (kh << 15) // Rotate right 17 bits - for j := uint8(0); j < g.k; j++ { - bitpos := kh % nBits - dest[bitpos/8] |= (1 << (bitpos % 8)) - kh += delta - } - } - - g.keyHashes = g.keyHashes[:0] -} - -// NewBloomFilter creates a new initialized bloom filter for given -// bitsPerKey. -// -// Since bitsPerKey is persisted individually for each bloom filter -// serialization, bloom filters are backwards compatible with respect to -// changing bitsPerKey. This means that no big performance penalty will -// be experienced when changing the parameter. See documentation for -// opt.Options.Filter for more information. -func NewBloomFilter(bitsPerKey int) Filter { - return bloomFilter(bitsPerKey) -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/filter/filter.go b/vendor/github.com/syndtr/goleveldb/leveldb/filter/filter.go deleted file mode 100644 index 7a925c5a8..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/filter/filter.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package filter provides interface and implementation of probabilistic -// data structure. -// -// The filter is resposible for creating small filter from a set of keys. -// These filter will then used to test whether a key is a member of the set. -// In many cases, a filter can cut down the number of disk seeks from a -// handful to a single disk seek per DB.Get call. -package filter - -// Buffer is the interface that wraps basic Alloc, Write and WriteByte methods. -type Buffer interface { - // Alloc allocs n bytes of slice from the buffer. This also advancing - // write offset. - Alloc(n int) []byte - - // Write appends the contents of p to the buffer. - Write(p []byte) (n int, err error) - - // WriteByte appends the byte c to the buffer. - WriteByte(c byte) error -} - -// Filter is the filter. -type Filter interface { - // Name returns the name of this policy. - // - // Note that if the filter encoding changes in an incompatible way, - // the name returned by this method must be changed. Otherwise, old - // incompatible filters may be passed to methods of this type. - Name() string - - // NewGenerator creates a new filter generator. - NewGenerator() FilterGenerator - - // Contains returns true if the filter contains the given key. - // - // The filter are filters generated by the filter generator. - Contains(filter, key []byte) bool -} - -// FilterGenerator is the filter generator. -type FilterGenerator interface { - // Add adds a key to the filter generator. - // - // The key may become invalid after call to this method end, therefor - // key must be copied if implementation require keeping key for later - // use. The key should not modified directly, doing so may cause - // undefined results. - Add(key []byte) - - // Generate generates filters based on keys passed so far. After call - // to Generate the filter generator maybe resetted, depends on implementation. - Generate(b Buffer) -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/iterator/array_iter.go b/vendor/github.com/syndtr/goleveldb/leveldb/iterator/array_iter.go deleted file mode 100644 index a23ab05f7..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/iterator/array_iter.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package iterator - -import ( - "github.com/syndtr/goleveldb/leveldb/util" -) - -// BasicArray is the interface that wraps basic Len and Search method. -type BasicArray interface { - // Len returns length of the array. - Len() int - - // Search finds smallest index that point to a key that is greater - // than or equal to the given key. - Search(key []byte) int -} - -// Array is the interface that wraps BasicArray and basic Index method. -type Array interface { - BasicArray - - // Index returns key/value pair with index of i. - Index(i int) (key, value []byte) -} - -// Array is the interface that wraps BasicArray and basic Get method. -type ArrayIndexer interface { - BasicArray - - // Get returns a new data iterator with index of i. - Get(i int) Iterator -} - -type basicArrayIterator struct { - util.BasicReleaser - array BasicArray - pos int - err error -} - -func (i *basicArrayIterator) Valid() bool { - return i.pos >= 0 && i.pos < i.array.Len() && !i.Released() -} - -func (i *basicArrayIterator) First() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - if i.array.Len() == 0 { - i.pos = -1 - return false - } - i.pos = 0 - return true -} - -func (i *basicArrayIterator) Last() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - n := i.array.Len() - if n == 0 { - i.pos = 0 - return false - } - i.pos = n - 1 - return true -} - -func (i *basicArrayIterator) Seek(key []byte) bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - n := i.array.Len() - if n == 0 { - i.pos = 0 - return false - } - i.pos = i.array.Search(key) - if i.pos >= n { - return false - } - return true -} - -func (i *basicArrayIterator) Next() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.pos++ - if n := i.array.Len(); i.pos >= n { - i.pos = n - return false - } - return true -} - -func (i *basicArrayIterator) Prev() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.pos-- - if i.pos < 0 { - i.pos = -1 - return false - } - return true -} - -func (i *basicArrayIterator) Error() error { return i.err } - -type arrayIterator struct { - basicArrayIterator - array Array - pos int - key, value []byte -} - -func (i *arrayIterator) updateKV() { - if i.pos == i.basicArrayIterator.pos { - return - } - i.pos = i.basicArrayIterator.pos - if i.Valid() { - i.key, i.value = i.array.Index(i.pos) - } else { - i.key = nil - i.value = nil - } -} - -func (i *arrayIterator) Key() []byte { - i.updateKV() - return i.key -} - -func (i *arrayIterator) Value() []byte { - i.updateKV() - return i.value -} - -type arrayIteratorIndexer struct { - basicArrayIterator - array ArrayIndexer -} - -func (i *arrayIteratorIndexer) Get() Iterator { - if i.Valid() { - return i.array.Get(i.basicArrayIterator.pos) - } - return nil -} - -// NewArrayIterator returns an iterator from the given array. -func NewArrayIterator(array Array) Iterator { - return &arrayIterator{ - basicArrayIterator: basicArrayIterator{array: array, pos: -1}, - array: array, - pos: -1, - } -} - -// NewArrayIndexer returns an index iterator from the given array. -func NewArrayIndexer(array ArrayIndexer) IteratorIndexer { - return &arrayIteratorIndexer{ - basicArrayIterator: basicArrayIterator{array: array, pos: -1}, - array: array, - } -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/iterator/indexed_iter.go b/vendor/github.com/syndtr/goleveldb/leveldb/iterator/indexed_iter.go deleted file mode 100644 index 939adbb93..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/iterator/indexed_iter.go +++ /dev/null @@ -1,242 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package iterator - -import ( - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/util" -) - -// IteratorIndexer is the interface that wraps CommonIterator and basic Get -// method. IteratorIndexer provides index for indexed iterator. -type IteratorIndexer interface { - CommonIterator - - // Get returns a new data iterator for the current position, or nil if - // done. - Get() Iterator -} - -type indexedIterator struct { - util.BasicReleaser - index IteratorIndexer - strict bool - - data Iterator - err error - errf func(err error) - closed bool -} - -func (i *indexedIterator) setData() { - if i.data != nil { - i.data.Release() - } - i.data = i.index.Get() -} - -func (i *indexedIterator) clearData() { - if i.data != nil { - i.data.Release() - } - i.data = nil -} - -func (i *indexedIterator) indexErr() { - if err := i.index.Error(); err != nil { - if i.errf != nil { - i.errf(err) - } - i.err = err - } -} - -func (i *indexedIterator) dataErr() bool { - if err := i.data.Error(); err != nil { - if i.errf != nil { - i.errf(err) - } - if i.strict || !errors.IsCorrupted(err) { - i.err = err - return true - } - } - return false -} - -func (i *indexedIterator) Valid() bool { - return i.data != nil && i.data.Valid() -} - -func (i *indexedIterator) First() bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - if !i.index.First() { - i.indexErr() - i.clearData() - return false - } - i.setData() - return i.Next() -} - -func (i *indexedIterator) Last() bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - if !i.index.Last() { - i.indexErr() - i.clearData() - return false - } - i.setData() - if !i.data.Last() { - if i.dataErr() { - return false - } - i.clearData() - return i.Prev() - } - return true -} - -func (i *indexedIterator) Seek(key []byte) bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - if !i.index.Seek(key) { - i.indexErr() - i.clearData() - return false - } - i.setData() - if !i.data.Seek(key) { - if i.dataErr() { - return false - } - i.clearData() - return i.Next() - } - return true -} - -func (i *indexedIterator) Next() bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - switch { - case i.data != nil && !i.data.Next(): - if i.dataErr() { - return false - } - i.clearData() - fallthrough - case i.data == nil: - if !i.index.Next() { - i.indexErr() - return false - } - i.setData() - return i.Next() - } - return true -} - -func (i *indexedIterator) Prev() bool { - if i.err != nil { - return false - } else if i.Released() { - i.err = ErrIterReleased - return false - } - - switch { - case i.data != nil && !i.data.Prev(): - if i.dataErr() { - return false - } - i.clearData() - fallthrough - case i.data == nil: - if !i.index.Prev() { - i.indexErr() - return false - } - i.setData() - if !i.data.Last() { - if i.dataErr() { - return false - } - i.clearData() - return i.Prev() - } - } - return true -} - -func (i *indexedIterator) Key() []byte { - if i.data == nil { - return nil - } - return i.data.Key() -} - -func (i *indexedIterator) Value() []byte { - if i.data == nil { - return nil - } - return i.data.Value() -} - -func (i *indexedIterator) Release() { - i.clearData() - i.index.Release() - i.BasicReleaser.Release() -} - -func (i *indexedIterator) Error() error { - if i.err != nil { - return i.err - } - if err := i.index.Error(); err != nil { - return err - } - return nil -} - -func (i *indexedIterator) SetErrorCallback(f func(err error)) { - i.errf = f -} - -// NewIndexedIterator returns an 'indexed iterator'. An index is iterator -// that returns another iterator, a 'data iterator'. A 'data iterator' is the -// iterator that contains actual key/value pairs. -// -// If strict is true the any 'corruption errors' (i.e errors.IsCorrupted(err) == true) -// won't be ignored and will halt 'indexed iterator', otherwise the iterator will -// continue to the next 'data iterator'. Corruption on 'index iterator' will not be -// ignored and will halt the iterator. -func NewIndexedIterator(index IteratorIndexer, strict bool) Iterator { - return &indexedIterator{index: index, strict: strict} -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/iterator/iter.go b/vendor/github.com/syndtr/goleveldb/leveldb/iterator/iter.go deleted file mode 100644 index c2522860b..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/iterator/iter.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package iterator provides interface and implementation to traverse over -// contents of a database. -package iterator - -import ( - "errors" - - "github.com/syndtr/goleveldb/leveldb/util" -) - -var ( - ErrIterReleased = errors.New("leveldb/iterator: iterator released") -) - -// IteratorSeeker is the interface that wraps the 'seeks method'. -type IteratorSeeker interface { - // First moves the iterator to the first key/value pair. If the iterator - // only contains one key/value pair then First and Last whould moves - // to the same key/value pair. - // It returns whether such pair exist. - First() bool - - // Last moves the iterator to the last key/value pair. If the iterator - // only contains one key/value pair then First and Last whould moves - // to the same key/value pair. - // It returns whether such pair exist. - Last() bool - - // Seek moves the iterator to the first key/value pair whose key is greater - // than or equal to the given key. - // It returns whether such pair exist. - // - // It is safe to modify the contents of the argument after Seek returns. - Seek(key []byte) bool - - // Next moves the iterator to the next key/value pair. - // It returns whether the iterator is exhausted. - Next() bool - - // Prev moves the iterator to the previous key/value pair. - // It returns whether the iterator is exhausted. - Prev() bool -} - -// CommonIterator is the interface that wraps common interator methods. -type CommonIterator interface { - IteratorSeeker - - // util.Releaser is the interface that wraps basic Release method. - // When called Release will releases any resources associated with the - // iterator. - util.Releaser - - // util.ReleaseSetter is the interface that wraps the basic SetReleaser - // method. - util.ReleaseSetter - - // TODO: Remove this when ready. - Valid() bool - - // Error returns any accumulated error. Exhausting all the key/value pairs - // is not considered to be an error. - Error() error -} - -// Iterator iterates over a DB's key/value pairs in key order. -// -// When encouter an error any 'seeks method' will return false and will -// yield no key/value pairs. The error can be queried by calling the Error -// method. Calling Release is still necessary. -// -// An iterator must be released after use, but it is not necessary to read -// an iterator until exhaustion. -// Also, an iterator is not necessarily goroutine-safe, but it is safe to use -// multiple iterators concurrently, with each in a dedicated goroutine. -type Iterator interface { - CommonIterator - - // Key returns the key of the current key/value pair, or nil if done. - // The caller should not modify the contents of the returned slice, and - // its contents may change on the next call to any 'seeks method'. - Key() []byte - - // Value returns the key of the current key/value pair, or nil if done. - // The caller should not modify the contents of the returned slice, and - // its contents may change on the next call to any 'seeks method'. - Value() []byte -} - -// ErrorCallbackSetter is the interface that wraps basic SetErrorCallback -// method. -// -// ErrorCallbackSetter implemented by indexed and merged iterator. -type ErrorCallbackSetter interface { - // SetErrorCallback allows set an error callback of the coresponding - // iterator. Use nil to clear the callback. - SetErrorCallback(f func(err error)) -} - -type emptyIterator struct { - util.BasicReleaser - err error -} - -func (i *emptyIterator) rErr() { - if i.err == nil && i.Released() { - i.err = ErrIterReleased - } -} - -func (*emptyIterator) Valid() bool { return false } -func (i *emptyIterator) First() bool { i.rErr(); return false } -func (i *emptyIterator) Last() bool { i.rErr(); return false } -func (i *emptyIterator) Seek(key []byte) bool { i.rErr(); return false } -func (i *emptyIterator) Next() bool { i.rErr(); return false } -func (i *emptyIterator) Prev() bool { i.rErr(); return false } -func (*emptyIterator) Key() []byte { return nil } -func (*emptyIterator) Value() []byte { return nil } -func (i *emptyIterator) Error() error { return i.err } - -// NewEmptyIterator creates an empty iterator. The err parameter can be -// nil, but if not nil the given err will be returned by Error method. -func NewEmptyIterator(err error) Iterator { - return &emptyIterator{err: err} -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/iterator/merged_iter.go b/vendor/github.com/syndtr/goleveldb/leveldb/iterator/merged_iter.go deleted file mode 100644 index 1a7e29df8..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/iterator/merged_iter.go +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package iterator - -import ( - "github.com/syndtr/goleveldb/leveldb/comparer" - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/util" -) - -type dir int - -const ( - dirReleased dir = iota - 1 - dirSOI - dirEOI - dirBackward - dirForward -) - -type mergedIterator struct { - cmp comparer.Comparer - iters []Iterator - strict bool - - keys [][]byte - index int - dir dir - err error - errf func(err error) - releaser util.Releaser -} - -func assertKey(key []byte) []byte { - if key == nil { - panic("leveldb/iterator: nil key") - } - return key -} - -func (i *mergedIterator) iterErr(iter Iterator) bool { - if err := iter.Error(); err != nil { - if i.errf != nil { - i.errf(err) - } - if i.strict || !errors.IsCorrupted(err) { - i.err = err - return true - } - } - return false -} - -func (i *mergedIterator) Valid() bool { - return i.err == nil && i.dir > dirEOI -} - -func (i *mergedIterator) First() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - for x, iter := range i.iters { - switch { - case iter.First(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - } - i.dir = dirSOI - return i.next() -} - -func (i *mergedIterator) Last() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - for x, iter := range i.iters { - switch { - case iter.Last(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - } - i.dir = dirEOI - return i.prev() -} - -func (i *mergedIterator) Seek(key []byte) bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - for x, iter := range i.iters { - switch { - case iter.Seek(key): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - } - i.dir = dirSOI - return i.next() -} - -func (i *mergedIterator) next() bool { - var key []byte - if i.dir == dirForward { - key = i.keys[i.index] - } - for x, tkey := range i.keys { - if tkey != nil && (key == nil || i.cmp.Compare(tkey, key) < 0) { - key = tkey - i.index = x - } - } - if key == nil { - i.dir = dirEOI - return false - } - i.dir = dirForward - return true -} - -func (i *mergedIterator) Next() bool { - if i.dir == dirEOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - switch i.dir { - case dirSOI: - return i.First() - case dirBackward: - key := append([]byte{}, i.keys[i.index]...) - if !i.Seek(key) { - return false - } - return i.Next() - } - - x := i.index - iter := i.iters[x] - switch { - case iter.Next(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - return i.next() -} - -func (i *mergedIterator) prev() bool { - var key []byte - if i.dir == dirBackward { - key = i.keys[i.index] - } - for x, tkey := range i.keys { - if tkey != nil && (key == nil || i.cmp.Compare(tkey, key) > 0) { - key = tkey - i.index = x - } - } - if key == nil { - i.dir = dirSOI - return false - } - i.dir = dirBackward - return true -} - -func (i *mergedIterator) Prev() bool { - if i.dir == dirSOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - switch i.dir { - case dirEOI: - return i.Last() - case dirForward: - key := append([]byte{}, i.keys[i.index]...) - for x, iter := range i.iters { - if x == i.index { - continue - } - seek := iter.Seek(key) - switch { - case seek && iter.Prev(), !seek && iter.Last(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - } - } - - x := i.index - iter := i.iters[x] - switch { - case iter.Prev(): - i.keys[x] = assertKey(iter.Key()) - case i.iterErr(iter): - return false - default: - i.keys[x] = nil - } - return i.prev() -} - -func (i *mergedIterator) Key() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.keys[i.index] -} - -func (i *mergedIterator) Value() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.iters[i.index].Value() -} - -func (i *mergedIterator) Release() { - if i.dir != dirReleased { - i.dir = dirReleased - for _, iter := range i.iters { - iter.Release() - } - i.iters = nil - i.keys = nil - if i.releaser != nil { - i.releaser.Release() - i.releaser = nil - } - } -} - -func (i *mergedIterator) SetReleaser(releaser util.Releaser) { - if i.dir == dirReleased { - panic(util.ErrReleased) - } - if i.releaser != nil && releaser != nil { - panic(util.ErrHasReleaser) - } - i.releaser = releaser -} - -func (i *mergedIterator) Error() error { - return i.err -} - -func (i *mergedIterator) SetErrorCallback(f func(err error)) { - i.errf = f -} - -// NewMergedIterator returns an iterator that merges its input. Walking the -// resultant iterator will return all key/value pairs of all input iterators -// in strictly increasing key order, as defined by cmp. -// The input's key ranges may overlap, but there are assumed to be no duplicate -// keys: if iters[i] contains a key k then iters[j] will not contain that key k. -// None of the iters may be nil. -// -// If strict is true the any 'corruption errors' (i.e errors.IsCorrupted(err) == true) -// won't be ignored and will halt 'merged iterator', otherwise the iterator will -// continue to the next 'input iterator'. -func NewMergedIterator(iters []Iterator, cmp comparer.Comparer, strict bool) Iterator { - return &mergedIterator{ - iters: iters, - cmp: cmp, - strict: strict, - keys: make([][]byte, len(iters)), - } -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/journal/journal.go b/vendor/github.com/syndtr/goleveldb/leveldb/journal/journal.go deleted file mode 100644 index 891098bb7..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/journal/journal.go +++ /dev/null @@ -1,521 +0,0 @@ -// Copyright 2011 The LevelDB-Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Taken from: https://code.google.com/p/leveldb-go/source/browse/leveldb/record/record.go?r=1d5ccbe03246da926391ee12d1c6caae054ff4b0 -// License, authors and contributors informations can be found at bellow URLs respectively: -// https://code.google.com/p/leveldb-go/source/browse/LICENSE -// https://code.google.com/p/leveldb-go/source/browse/AUTHORS -// https://code.google.com/p/leveldb-go/source/browse/CONTRIBUTORS - -// Package journal reads and writes sequences of journals. Each journal is a stream -// of bytes that completes before the next journal starts. -// -// When reading, call Next to obtain an io.Reader for the next journal. Next will -// return io.EOF when there are no more journals. It is valid to call Next -// without reading the current journal to exhaustion. -// -// When writing, call Next to obtain an io.Writer for the next journal. Calling -// Next finishes the current journal. Call Close to finish the final journal. -// -// Optionally, call Flush to finish the current journal and flush the underlying -// writer without starting a new journal. To start a new journal after flushing, -// call Next. -// -// Neither Readers or Writers are safe to use concurrently. -// -// Example code: -// func read(r io.Reader) ([]string, error) { -// var ss []string -// journals := journal.NewReader(r, nil, true, true) -// for { -// j, err := journals.Next() -// if err == io.EOF { -// break -// } -// if err != nil { -// return nil, err -// } -// s, err := ioutil.ReadAll(j) -// if err != nil { -// return nil, err -// } -// ss = append(ss, string(s)) -// } -// return ss, nil -// } -// -// func write(w io.Writer, ss []string) error { -// journals := journal.NewWriter(w) -// for _, s := range ss { -// j, err := journals.Next() -// if err != nil { -// return err -// } -// if _, err := j.Write([]byte(s)), err != nil { -// return err -// } -// } -// return journals.Close() -// } -// -// The wire format is that the stream is divided into 32KiB blocks, and each -// block contains a number of tightly packed chunks. Chunks cannot cross block -// boundaries. The last block may be shorter than 32 KiB. Any unused bytes in a -// block must be zero. -// -// A journal maps to one or more chunks. Each chunk has a 7 byte header (a 4 -// byte checksum, a 2 byte little-endian uint16 length, and a 1 byte chunk type) -// followed by a payload. The checksum is over the chunk type and the payload. -// -// There are four chunk types: whether the chunk is the full journal, or the -// first, middle or last chunk of a multi-chunk journal. A multi-chunk journal -// has one first chunk, zero or more middle chunks, and one last chunk. -// -// The wire format allows for limited recovery in the face of data corruption: -// on a format error (such as a checksum mismatch), the reader moves to the -// next block and looks for the next full or first chunk. -package journal - -import ( - "encoding/binary" - "fmt" - "io" - - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/util" -) - -// These constants are part of the wire format and should not be changed. -const ( - fullChunkType = 1 - firstChunkType = 2 - middleChunkType = 3 - lastChunkType = 4 -) - -const ( - blockSize = 32 * 1024 - headerSize = 7 -) - -type flusher interface { - Flush() error -} - -// ErrCorrupted is the error type that generated by corrupted block or chunk. -type ErrCorrupted struct { - Size int - Reason string -} - -func (e *ErrCorrupted) Error() string { - return fmt.Sprintf("leveldb/journal: block/chunk corrupted: %s (%d bytes)", e.Reason, e.Size) -} - -// Dropper is the interface that wrap simple Drop method. The Drop -// method will be called when the journal reader dropping a block or chunk. -type Dropper interface { - Drop(err error) -} - -// Reader reads journals from an underlying io.Reader. -type Reader struct { - // r is the underlying reader. - r io.Reader - // the dropper. - dropper Dropper - // strict flag. - strict bool - // checksum flag. - checksum bool - // seq is the sequence number of the current journal. - seq int - // buf[i:j] is the unread portion of the current chunk's payload. - // The low bound, i, excludes the chunk header. - i, j int - // n is the number of bytes of buf that are valid. Once reading has started, - // only the final block can have n < blockSize. - n int - // last is whether the current chunk is the last chunk of the journal. - last bool - // err is any accumulated error. - err error - // buf is the buffer. - buf [blockSize]byte -} - -// NewReader returns a new reader. The dropper may be nil, and if -// strict is true then corrupted or invalid chunk will halt the journal -// reader entirely. -func NewReader(r io.Reader, dropper Dropper, strict, checksum bool) *Reader { - return &Reader{ - r: r, - dropper: dropper, - strict: strict, - checksum: checksum, - last: true, - } -} - -var errSkip = errors.New("leveldb/journal: skipped") - -func (r *Reader) corrupt(n int, reason string, skip bool) error { - if r.dropper != nil { - r.dropper.Drop(&ErrCorrupted{n, reason}) - } - if r.strict && !skip { - r.err = errors.NewErrCorrupted(storage.FileDesc{}, &ErrCorrupted{n, reason}) - return r.err - } - return errSkip -} - -// nextChunk sets r.buf[r.i:r.j] to hold the next chunk's payload, reading the -// next block into the buffer if necessary. -func (r *Reader) nextChunk(first bool) error { - for { - if r.j+headerSize <= r.n { - checksum := binary.LittleEndian.Uint32(r.buf[r.j+0 : r.j+4]) - length := binary.LittleEndian.Uint16(r.buf[r.j+4 : r.j+6]) - chunkType := r.buf[r.j+6] - - if checksum == 0 && length == 0 && chunkType == 0 { - // Drop entire block. - m := r.n - r.j - r.i = r.n - r.j = r.n - return r.corrupt(m, "zero header", false) - } else { - m := r.n - r.j - r.i = r.j + headerSize - r.j = r.j + headerSize + int(length) - if r.j > r.n { - // Drop entire block. - r.i = r.n - r.j = r.n - return r.corrupt(m, "chunk length overflows block", false) - } else if r.checksum && checksum != util.NewCRC(r.buf[r.i-1:r.j]).Value() { - // Drop entire block. - r.i = r.n - r.j = r.n - return r.corrupt(m, "checksum mismatch", false) - } - } - if first && chunkType != fullChunkType && chunkType != firstChunkType { - m := r.j - r.i - r.i = r.j - // Report the error, but skip it. - return r.corrupt(m+headerSize, "orphan chunk", true) - } - r.last = chunkType == fullChunkType || chunkType == lastChunkType - return nil - } - - // The last block. - if r.n < blockSize && r.n > 0 { - if !first { - return r.corrupt(0, "missing chunk part", false) - } - r.err = io.EOF - return r.err - } - - // Read block. - n, err := io.ReadFull(r.r, r.buf[:]) - if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF { - return err - } - if n == 0 { - if !first { - return r.corrupt(0, "missing chunk part", false) - } - r.err = io.EOF - return r.err - } - r.i, r.j, r.n = 0, 0, n - } -} - -// Next returns a reader for the next journal. It returns io.EOF if there are no -// more journals. The reader returned becomes stale after the next Next call, -// and should no longer be used. If strict is false, the reader will returns -// io.ErrUnexpectedEOF error when found corrupted journal. -func (r *Reader) Next() (io.Reader, error) { - r.seq++ - if r.err != nil { - return nil, r.err - } - r.i = r.j - for { - if err := r.nextChunk(true); err == nil { - break - } else if err != errSkip { - return nil, err - } - } - return &singleReader{r, r.seq, nil}, nil -} - -// Reset resets the journal reader, allows reuse of the journal reader. Reset returns -// last accumulated error. -func (r *Reader) Reset(reader io.Reader, dropper Dropper, strict, checksum bool) error { - r.seq++ - err := r.err - r.r = reader - r.dropper = dropper - r.strict = strict - r.checksum = checksum - r.i = 0 - r.j = 0 - r.n = 0 - r.last = true - r.err = nil - return err -} - -type singleReader struct { - r *Reader - seq int - err error -} - -func (x *singleReader) Read(p []byte) (int, error) { - r := x.r - if r.seq != x.seq { - return 0, errors.New("leveldb/journal: stale reader") - } - if x.err != nil { - return 0, x.err - } - if r.err != nil { - return 0, r.err - } - for r.i == r.j { - if r.last { - return 0, io.EOF - } - x.err = r.nextChunk(false) - if x.err != nil { - if x.err == errSkip { - x.err = io.ErrUnexpectedEOF - } - return 0, x.err - } - } - n := copy(p, r.buf[r.i:r.j]) - r.i += n - return n, nil -} - -func (x *singleReader) ReadByte() (byte, error) { - r := x.r - if r.seq != x.seq { - return 0, errors.New("leveldb/journal: stale reader") - } - if x.err != nil { - return 0, x.err - } - if r.err != nil { - return 0, r.err - } - for r.i == r.j { - if r.last { - return 0, io.EOF - } - x.err = r.nextChunk(false) - if x.err != nil { - if x.err == errSkip { - x.err = io.ErrUnexpectedEOF - } - return 0, x.err - } - } - c := r.buf[r.i] - r.i++ - return c, nil -} - -// Writer writes journals to an underlying io.Writer. -type Writer struct { - // w is the underlying writer. - w io.Writer - // seq is the sequence number of the current journal. - seq int - // f is w as a flusher. - f flusher - // buf[i:j] is the bytes that will become the current chunk. - // The low bound, i, includes the chunk header. - i, j int - // buf[:written] has already been written to w. - // written is zero unless Flush has been called. - written int - // first is whether the current chunk is the first chunk of the journal. - first bool - // pending is whether a chunk is buffered but not yet written. - pending bool - // err is any accumulated error. - err error - // buf is the buffer. - buf [blockSize]byte -} - -// NewWriter returns a new Writer. -func NewWriter(w io.Writer) *Writer { - f, _ := w.(flusher) - return &Writer{ - w: w, - f: f, - } -} - -// fillHeader fills in the header for the pending chunk. -func (w *Writer) fillHeader(last bool) { - if w.i+headerSize > w.j || w.j > blockSize { - panic("leveldb/journal: bad writer state") - } - if last { - if w.first { - w.buf[w.i+6] = fullChunkType - } else { - w.buf[w.i+6] = lastChunkType - } - } else { - if w.first { - w.buf[w.i+6] = firstChunkType - } else { - w.buf[w.i+6] = middleChunkType - } - } - binary.LittleEndian.PutUint32(w.buf[w.i+0:w.i+4], util.NewCRC(w.buf[w.i+6:w.j]).Value()) - binary.LittleEndian.PutUint16(w.buf[w.i+4:w.i+6], uint16(w.j-w.i-headerSize)) -} - -// writeBlock writes the buffered block to the underlying writer, and reserves -// space for the next chunk's header. -func (w *Writer) writeBlock() { - _, w.err = w.w.Write(w.buf[w.written:]) - w.i = 0 - w.j = headerSize - w.written = 0 -} - -// writePending finishes the current journal and writes the buffer to the -// underlying writer. -func (w *Writer) writePending() { - if w.err != nil { - return - } - if w.pending { - w.fillHeader(true) - w.pending = false - } - _, w.err = w.w.Write(w.buf[w.written:w.j]) - w.written = w.j -} - -// Close finishes the current journal and closes the writer. -func (w *Writer) Close() error { - w.seq++ - w.writePending() - if w.err != nil { - return w.err - } - w.err = errors.New("leveldb/journal: closed Writer") - return nil -} - -// Flush finishes the current journal, writes to the underlying writer, and -// flushes it if that writer implements interface{ Flush() error }. -func (w *Writer) Flush() error { - w.seq++ - w.writePending() - if w.err != nil { - return w.err - } - if w.f != nil { - w.err = w.f.Flush() - return w.err - } - return nil -} - -// Reset resets the journal writer, allows reuse of the journal writer. Reset -// will also closes the journal writer if not already. -func (w *Writer) Reset(writer io.Writer) (err error) { - w.seq++ - if w.err == nil { - w.writePending() - err = w.err - } - w.w = writer - w.f, _ = writer.(flusher) - w.i = 0 - w.j = 0 - w.written = 0 - w.first = false - w.pending = false - w.err = nil - return -} - -// Next returns a writer for the next journal. The writer returned becomes stale -// after the next Close, Flush or Next call, and should no longer be used. -func (w *Writer) Next() (io.Writer, error) { - w.seq++ - if w.err != nil { - return nil, w.err - } - if w.pending { - w.fillHeader(true) - } - w.i = w.j - w.j = w.j + headerSize - // Check if there is room in the block for the header. - if w.j > blockSize { - // Fill in the rest of the block with zeroes. - for k := w.i; k < blockSize; k++ { - w.buf[k] = 0 - } - w.writeBlock() - if w.err != nil { - return nil, w.err - } - } - w.first = true - w.pending = true - return singleWriter{w, w.seq}, nil -} - -type singleWriter struct { - w *Writer - seq int -} - -func (x singleWriter) Write(p []byte) (int, error) { - w := x.w - if w.seq != x.seq { - return 0, errors.New("leveldb/journal: stale writer") - } - if w.err != nil { - return 0, w.err - } - n0 := len(p) - for len(p) > 0 { - // Write a block, if it is full. - if w.j == blockSize { - w.fillHeader(false) - w.writeBlock() - if w.err != nil { - return 0, w.err - } - w.first = false - } - // Copy bytes into the buffer. - n := copy(w.buf[w.j:], p) - w.j += n - p = p[n:] - } - return n0, nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/key.go b/vendor/github.com/syndtr/goleveldb/leveldb/key.go deleted file mode 100644 index d0b80aaf9..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/key.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "encoding/binary" - "fmt" - - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/storage" -) - -// ErrInternalKeyCorrupted records internal key corruption. -type ErrInternalKeyCorrupted struct { - Ikey []byte - Reason string -} - -func (e *ErrInternalKeyCorrupted) Error() string { - return fmt.Sprintf("leveldb: internal key %q corrupted: %s", e.Ikey, e.Reason) -} - -func newErrInternalKeyCorrupted(ikey []byte, reason string) error { - return errors.NewErrCorrupted(storage.FileDesc{}, &ErrInternalKeyCorrupted{append([]byte{}, ikey...), reason}) -} - -type keyType uint - -func (kt keyType) String() string { - switch kt { - case keyTypeDel: - return "d" - case keyTypeVal: - return "v" - } - return "x" -} - -// Value types encoded as the last component of internal keys. -// Don't modify; this value are saved to disk. -const ( - keyTypeDel keyType = iota - keyTypeVal -) - -// keyTypeSeek defines the keyType that should be passed when constructing an -// internal key for seeking to a particular sequence number (since we -// sort sequence numbers in decreasing order and the value type is -// embedded as the low 8 bits in the sequence number in internal keys, -// we need to use the highest-numbered ValueType, not the lowest). -const keyTypeSeek = keyTypeVal - -const ( - // Maximum value possible for sequence number; the 8-bits are - // used by value type, so its can packed together in single - // 64-bit integer. - keyMaxSeq = (uint64(1) << 56) - 1 - // Maximum value possible for packed sequence number and type. - keyMaxNum = (keyMaxSeq << 8) | uint64(keyTypeSeek) -) - -// Maximum number encoded in bytes. -var keyMaxNumBytes = make([]byte, 8) - -func init() { - binary.LittleEndian.PutUint64(keyMaxNumBytes, keyMaxNum) -} - -type internalKey []byte - -func makeInternalKey(dst, ukey []byte, seq uint64, kt keyType) internalKey { - if seq > keyMaxSeq { - panic("leveldb: invalid sequence number") - } else if kt > keyTypeVal { - panic("leveldb: invalid type") - } - - if n := len(ukey) + 8; cap(dst) < n { - dst = make([]byte, n) - } else { - dst = dst[:n] - } - copy(dst, ukey) - binary.LittleEndian.PutUint64(dst[len(ukey):], (seq<<8)|uint64(kt)) - return internalKey(dst) -} - -func parseInternalKey(ik []byte) (ukey []byte, seq uint64, kt keyType, err error) { - if len(ik) < 8 { - return nil, 0, 0, newErrInternalKeyCorrupted(ik, "invalid length") - } - num := binary.LittleEndian.Uint64(ik[len(ik)-8:]) - seq, kt = uint64(num>>8), keyType(num&0xff) - if kt > keyTypeVal { - return nil, 0, 0, newErrInternalKeyCorrupted(ik, "invalid type") - } - ukey = ik[:len(ik)-8] - return -} - -func validInternalKey(ik []byte) bool { - _, _, _, err := parseInternalKey(ik) - return err == nil -} - -func (ik internalKey) assert() { - if ik == nil { - panic("leveldb: nil internalKey") - } - if len(ik) < 8 { - panic(fmt.Sprintf("leveldb: internal key %q, len=%d: invalid length", []byte(ik), len(ik))) - } -} - -func (ik internalKey) ukey() []byte { - ik.assert() - return ik[:len(ik)-8] -} - -func (ik internalKey) num() uint64 { - ik.assert() - return binary.LittleEndian.Uint64(ik[len(ik)-8:]) -} - -func (ik internalKey) parseNum() (seq uint64, kt keyType) { - num := ik.num() - seq, kt = uint64(num>>8), keyType(num&0xff) - if kt > keyTypeVal { - panic(fmt.Sprintf("leveldb: internal key %q, len=%d: invalid type %#x", []byte(ik), len(ik), kt)) - } - return -} - -func (ik internalKey) String() string { - if ik == nil { - return "" - } - - if ukey, seq, kt, err := parseInternalKey(ik); err == nil { - return fmt.Sprintf("%s,%s%d", shorten(string(ukey)), kt, seq) - } - return "" -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/memdb/memdb.go b/vendor/github.com/syndtr/goleveldb/leveldb/memdb/memdb.go deleted file mode 100644 index 1395bd928..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/memdb/memdb.go +++ /dev/null @@ -1,471 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package memdb provides in-memory key/value database implementation. -package memdb - -import ( - "math/rand" - "sync" - - "github.com/syndtr/goleveldb/leveldb/comparer" - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/util" -) - -var ( - ErrNotFound = errors.ErrNotFound - ErrIterReleased = errors.New("leveldb/memdb: iterator released") -) - -const tMaxHeight = 12 - -type dbIter struct { - util.BasicReleaser - p *DB - slice *util.Range - node int - forward bool - key, value []byte - err error -} - -func (i *dbIter) fill(checkStart, checkLimit bool) bool { - if i.node != 0 { - n := i.p.nodeData[i.node] - m := n + i.p.nodeData[i.node+nKey] - i.key = i.p.kvData[n:m] - if i.slice != nil { - switch { - case checkLimit && i.slice.Limit != nil && i.p.cmp.Compare(i.key, i.slice.Limit) >= 0: - fallthrough - case checkStart && i.slice.Start != nil && i.p.cmp.Compare(i.key, i.slice.Start) < 0: - i.node = 0 - goto bail - } - } - i.value = i.p.kvData[m : m+i.p.nodeData[i.node+nVal]] - return true - } -bail: - i.key = nil - i.value = nil - return false -} - -func (i *dbIter) Valid() bool { - return i.node != 0 -} - -func (i *dbIter) First() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.forward = true - i.p.mu.RLock() - defer i.p.mu.RUnlock() - if i.slice != nil && i.slice.Start != nil { - i.node, _ = i.p.findGE(i.slice.Start, false) - } else { - i.node = i.p.nodeData[nNext] - } - return i.fill(false, true) -} - -func (i *dbIter) Last() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.forward = false - i.p.mu.RLock() - defer i.p.mu.RUnlock() - if i.slice != nil && i.slice.Limit != nil { - i.node = i.p.findLT(i.slice.Limit) - } else { - i.node = i.p.findLast() - } - return i.fill(true, false) -} - -func (i *dbIter) Seek(key []byte) bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - i.forward = true - i.p.mu.RLock() - defer i.p.mu.RUnlock() - if i.slice != nil && i.slice.Start != nil && i.p.cmp.Compare(key, i.slice.Start) < 0 { - key = i.slice.Start - } - i.node, _ = i.p.findGE(key, false) - return i.fill(false, true) -} - -func (i *dbIter) Next() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - if i.node == 0 { - if !i.forward { - return i.First() - } - return false - } - i.forward = true - i.p.mu.RLock() - defer i.p.mu.RUnlock() - i.node = i.p.nodeData[i.node+nNext] - return i.fill(false, true) -} - -func (i *dbIter) Prev() bool { - if i.Released() { - i.err = ErrIterReleased - return false - } - - if i.node == 0 { - if i.forward { - return i.Last() - } - return false - } - i.forward = false - i.p.mu.RLock() - defer i.p.mu.RUnlock() - i.node = i.p.findLT(i.key) - return i.fill(true, false) -} - -func (i *dbIter) Key() []byte { - return i.key -} - -func (i *dbIter) Value() []byte { - return i.value -} - -func (i *dbIter) Error() error { return i.err } - -func (i *dbIter) Release() { - if !i.Released() { - i.p = nil - i.node = 0 - i.key = nil - i.value = nil - i.BasicReleaser.Release() - } -} - -const ( - nKV = iota - nKey - nVal - nHeight - nNext -) - -// DB is an in-memory key/value database. -type DB struct { - cmp comparer.BasicComparer - rnd *rand.Rand - - mu sync.RWMutex - kvData []byte - // Node data: - // [0] : KV offset - // [1] : Key length - // [2] : Value length - // [3] : Height - // [3..height] : Next nodes - nodeData []int - prevNode [tMaxHeight]int - maxHeight int - n int - kvSize int -} - -func (p *DB) randHeight() (h int) { - const branching = 4 - h = 1 - for h < tMaxHeight && p.rnd.Int()%branching == 0 { - h++ - } - return -} - -// Must hold RW-lock if prev == true, as it use shared prevNode slice. -func (p *DB) findGE(key []byte, prev bool) (int, bool) { - node := 0 - h := p.maxHeight - 1 - for { - next := p.nodeData[node+nNext+h] - cmp := 1 - if next != 0 { - o := p.nodeData[next] - cmp = p.cmp.Compare(p.kvData[o:o+p.nodeData[next+nKey]], key) - } - if cmp < 0 { - // Keep searching in this list - node = next - } else { - if prev { - p.prevNode[h] = node - } else if cmp == 0 { - return next, true - } - if h == 0 { - return next, cmp == 0 - } - h-- - } - } -} - -func (p *DB) findLT(key []byte) int { - node := 0 - h := p.maxHeight - 1 - for { - next := p.nodeData[node+nNext+h] - o := p.nodeData[next] - if next == 0 || p.cmp.Compare(p.kvData[o:o+p.nodeData[next+nKey]], key) >= 0 { - if h == 0 { - break - } - h-- - } else { - node = next - } - } - return node -} - -func (p *DB) findLast() int { - node := 0 - h := p.maxHeight - 1 - for { - next := p.nodeData[node+nNext+h] - if next == 0 { - if h == 0 { - break - } - h-- - } else { - node = next - } - } - return node -} - -// Put sets the value for the given key. It overwrites any previous value -// for that key; a DB is not a multi-map. -// -// It is safe to modify the contents of the arguments after Put returns. -func (p *DB) Put(key []byte, value []byte) error { - p.mu.Lock() - defer p.mu.Unlock() - - if node, exact := p.findGE(key, true); exact { - kvOffset := len(p.kvData) - p.kvData = append(p.kvData, key...) - p.kvData = append(p.kvData, value...) - p.nodeData[node] = kvOffset - m := p.nodeData[node+nVal] - p.nodeData[node+nVal] = len(value) - p.kvSize += len(value) - m - return nil - } - - h := p.randHeight() - if h > p.maxHeight { - for i := p.maxHeight; i < h; i++ { - p.prevNode[i] = 0 - } - p.maxHeight = h - } - - kvOffset := len(p.kvData) - p.kvData = append(p.kvData, key...) - p.kvData = append(p.kvData, value...) - // Node - node := len(p.nodeData) - p.nodeData = append(p.nodeData, kvOffset, len(key), len(value), h) - for i, n := range p.prevNode[:h] { - m := n + nNext + i - p.nodeData = append(p.nodeData, p.nodeData[m]) - p.nodeData[m] = node - } - - p.kvSize += len(key) + len(value) - p.n++ - return nil -} - -// Delete deletes the value for the given key. It returns ErrNotFound if -// the DB does not contain the key. -// -// It is safe to modify the contents of the arguments after Delete returns. -func (p *DB) Delete(key []byte) error { - p.mu.Lock() - defer p.mu.Unlock() - - node, exact := p.findGE(key, true) - if !exact { - return ErrNotFound - } - - h := p.nodeData[node+nHeight] - for i, n := range p.prevNode[:h] { - m := n + 4 + i - p.nodeData[m] = p.nodeData[p.nodeData[m]+nNext+i] - } - - p.kvSize -= p.nodeData[node+nKey] + p.nodeData[node+nVal] - p.n-- - return nil -} - -// Contains returns true if the given key are in the DB. -// -// It is safe to modify the contents of the arguments after Contains returns. -func (p *DB) Contains(key []byte) bool { - p.mu.RLock() - _, exact := p.findGE(key, false) - p.mu.RUnlock() - return exact -} - -// Get gets the value for the given key. It returns error.ErrNotFound if the -// DB does not contain the key. -// -// The caller should not modify the contents of the returned slice, but -// it is safe to modify the contents of the argument after Get returns. -func (p *DB) Get(key []byte) (value []byte, err error) { - p.mu.RLock() - if node, exact := p.findGE(key, false); exact { - o := p.nodeData[node] + p.nodeData[node+nKey] - value = p.kvData[o : o+p.nodeData[node+nVal]] - } else { - err = ErrNotFound - } - p.mu.RUnlock() - return -} - -// Find finds key/value pair whose key is greater than or equal to the -// given key. It returns ErrNotFound if the table doesn't contain -// such pair. -// -// The caller should not modify the contents of the returned slice, but -// it is safe to modify the contents of the argument after Find returns. -func (p *DB) Find(key []byte) (rkey, value []byte, err error) { - p.mu.RLock() - if node, _ := p.findGE(key, false); node != 0 { - n := p.nodeData[node] - m := n + p.nodeData[node+nKey] - rkey = p.kvData[n:m] - value = p.kvData[m : m+p.nodeData[node+nVal]] - } else { - err = ErrNotFound - } - p.mu.RUnlock() - return -} - -// NewIterator returns an iterator of the DB. -// The returned iterator is not goroutine-safe, but it is safe to use -// multiple iterators concurrently, with each in a dedicated goroutine. -// It is also safe to use an iterator concurrently with modifying its -// underlying DB. However, the resultant key/value pairs are not guaranteed -// to be a consistent snapshot of the DB at a particular point in time. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// DB. And a nil Range.Limit is treated as a key after all keys in -// the DB. -// -// The iterator must be released after use, by calling Release method. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (p *DB) NewIterator(slice *util.Range) iterator.Iterator { - return &dbIter{p: p, slice: slice} -} - -// Capacity returns keys/values buffer capacity. -func (p *DB) Capacity() int { - p.mu.RLock() - defer p.mu.RUnlock() - return cap(p.kvData) -} - -// Size returns sum of keys and values length. Note that deleted -// key/value will not be accouted for, but it will still consume -// the buffer, since the buffer is append only. -func (p *DB) Size() int { - p.mu.RLock() - defer p.mu.RUnlock() - return p.kvSize -} - -// Free returns keys/values free buffer before need to grow. -func (p *DB) Free() int { - p.mu.RLock() - defer p.mu.RUnlock() - return cap(p.kvData) - len(p.kvData) -} - -// Len returns the number of entries in the DB. -func (p *DB) Len() int { - p.mu.RLock() - defer p.mu.RUnlock() - return p.n -} - -// Reset resets the DB to initial empty state. Allows reuse the buffer. -func (p *DB) Reset() { - p.mu.Lock() - p.rnd = rand.New(rand.NewSource(0xdeadbeef)) - p.maxHeight = 1 - p.n = 0 - p.kvSize = 0 - p.kvData = p.kvData[:0] - p.nodeData = p.nodeData[:nNext+tMaxHeight] - p.nodeData[nKV] = 0 - p.nodeData[nKey] = 0 - p.nodeData[nVal] = 0 - p.nodeData[nHeight] = tMaxHeight - for n := 0; n < tMaxHeight; n++ { - p.nodeData[nNext+n] = 0 - p.prevNode[n] = 0 - } - p.mu.Unlock() -} - -// New creates a new initalized in-memory key/value DB. The capacity -// is the initial key/value buffer capacity. The capacity is advisory, -// not enforced. -// -// The returned DB instance is goroutine-safe. -func New(cmp comparer.BasicComparer, capacity int) *DB { - p := &DB{ - cmp: cmp, - rnd: rand.New(rand.NewSource(0xdeadbeef)), - maxHeight: 1, - kvData: make([]byte, 0, capacity), - nodeData: make([]int, 4+tMaxHeight), - } - p.nodeData[nHeight] = tMaxHeight - return p -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/opt/options.go b/vendor/github.com/syndtr/goleveldb/leveldb/opt/options.go deleted file mode 100644 index 3d2bf1c02..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/opt/options.go +++ /dev/null @@ -1,660 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package opt provides sets of options used by LevelDB. -package opt - -import ( - "math" - - "github.com/syndtr/goleveldb/leveldb/cache" - "github.com/syndtr/goleveldb/leveldb/comparer" - "github.com/syndtr/goleveldb/leveldb/filter" -) - -const ( - KiB = 1024 - MiB = KiB * 1024 - GiB = MiB * 1024 -) - -var ( - DefaultBlockCacher = LRUCacher - DefaultBlockCacheCapacity = 8 * MiB - DefaultBlockRestartInterval = 16 - DefaultBlockSize = 4 * KiB - DefaultCompactionExpandLimitFactor = 25 - DefaultCompactionGPOverlapsFactor = 10 - DefaultCompactionL0Trigger = 4 - DefaultCompactionSourceLimitFactor = 1 - DefaultCompactionTableSize = 2 * MiB - DefaultCompactionTableSizeMultiplier = 1.0 - DefaultCompactionTotalSize = 10 * MiB - DefaultCompactionTotalSizeMultiplier = 10.0 - DefaultCompressionType = SnappyCompression - DefaultIteratorSamplingRate = 1 * MiB - DefaultOpenFilesCacher = LRUCacher - DefaultOpenFilesCacheCapacity = 500 - DefaultWriteBuffer = 4 * MiB - DefaultWriteL0PauseTrigger = 12 - DefaultWriteL0SlowdownTrigger = 8 -) - -// Cacher is a caching algorithm. -type Cacher interface { - New(capacity int) cache.Cacher -} - -type CacherFunc struct { - NewFunc func(capacity int) cache.Cacher -} - -func (f *CacherFunc) New(capacity int) cache.Cacher { - if f.NewFunc != nil { - return f.NewFunc(capacity) - } - return nil -} - -func noCacher(int) cache.Cacher { return nil } - -var ( - // LRUCacher is the LRU-cache algorithm. - LRUCacher = &CacherFunc{cache.NewLRU} - - // NoCacher is the value to disable caching algorithm. - NoCacher = &CacherFunc{} -) - -// Compression is the 'sorted table' block compression algorithm to use. -type Compression uint - -func (c Compression) String() string { - switch c { - case DefaultCompression: - return "default" - case NoCompression: - return "none" - case SnappyCompression: - return "snappy" - } - return "invalid" -} - -const ( - DefaultCompression Compression = iota - NoCompression - SnappyCompression - nCompression -) - -// Strict is the DB 'strict level'. -type Strict uint - -const ( - // If present then a corrupted or invalid chunk or block in manifest - // journal will cause an error instead of being dropped. - // This will prevent database with corrupted manifest to be opened. - StrictManifest Strict = 1 << iota - - // If present then journal chunk checksum will be verified. - StrictJournalChecksum - - // If present then a corrupted or invalid chunk or block in journal - // will cause an error instead of being dropped. - // This will prevent database with corrupted journal to be opened. - StrictJournal - - // If present then 'sorted table' block checksum will be verified. - // This has effect on both 'read operation' and compaction. - StrictBlockChecksum - - // If present then a corrupted 'sorted table' will fails compaction. - // The database will enter read-only mode. - StrictCompaction - - // If present then a corrupted 'sorted table' will halts 'read operation'. - StrictReader - - // If present then leveldb.Recover will drop corrupted 'sorted table'. - StrictRecovery - - // This only applicable for ReadOptions, if present then this ReadOptions - // 'strict level' will override global ones. - StrictOverride - - // StrictAll enables all strict flags. - StrictAll = StrictManifest | StrictJournalChecksum | StrictJournal | StrictBlockChecksum | StrictCompaction | StrictReader | StrictRecovery - - // DefaultStrict is the default strict flags. Specify any strict flags - // will override default strict flags as whole (i.e. not OR'ed). - DefaultStrict = StrictJournalChecksum | StrictBlockChecksum | StrictCompaction | StrictReader - - // NoStrict disables all strict flags. Override default strict flags. - NoStrict = ^StrictAll -) - -// Options holds the optional parameters for the DB at large. -type Options struct { - // AltFilters defines one or more 'alternative filters'. - // 'alternative filters' will be used during reads if a filter block - // does not match with the 'effective filter'. - // - // The default value is nil - AltFilters []filter.Filter - - // BlockCacher provides cache algorithm for LevelDB 'sorted table' block caching. - // Specify NoCacher to disable caching algorithm. - // - // The default value is LRUCacher. - BlockCacher Cacher - - // BlockCacheCapacity defines the capacity of the 'sorted table' block caching. - // Use -1 for zero, this has same effect as specifying NoCacher to BlockCacher. - // - // The default value is 8MiB. - BlockCacheCapacity int - - // BlockRestartInterval is the number of keys between restart points for - // delta encoding of keys. - // - // The default value is 16. - BlockRestartInterval int - - // BlockSize is the minimum uncompressed size in bytes of each 'sorted table' - // block. - // - // The default value is 4KiB. - BlockSize int - - // CompactionExpandLimitFactor limits compaction size after expanded. - // This will be multiplied by table size limit at compaction target level. - // - // The default value is 25. - CompactionExpandLimitFactor int - - // CompactionGPOverlapsFactor limits overlaps in grandparent (Level + 2) that a - // single 'sorted table' generates. - // This will be multiplied by table size limit at grandparent level. - // - // The default value is 10. - CompactionGPOverlapsFactor int - - // CompactionL0Trigger defines number of 'sorted table' at level-0 that will - // trigger compaction. - // - // The default value is 4. - CompactionL0Trigger int - - // CompactionSourceLimitFactor limits compaction source size. This doesn't apply to - // level-0. - // This will be multiplied by table size limit at compaction target level. - // - // The default value is 1. - CompactionSourceLimitFactor int - - // CompactionTableSize limits size of 'sorted table' that compaction generates. - // The limits for each level will be calculated as: - // CompactionTableSize * (CompactionTableSizeMultiplier ^ Level) - // The multiplier for each level can also fine-tuned using CompactionTableSizeMultiplierPerLevel. - // - // The default value is 2MiB. - CompactionTableSize int - - // CompactionTableSizeMultiplier defines multiplier for CompactionTableSize. - // - // The default value is 1. - CompactionTableSizeMultiplier float64 - - // CompactionTableSizeMultiplierPerLevel defines per-level multiplier for - // CompactionTableSize. - // Use zero to skip a level. - // - // The default value is nil. - CompactionTableSizeMultiplierPerLevel []float64 - - // CompactionTotalSize limits total size of 'sorted table' for each level. - // The limits for each level will be calculated as: - // CompactionTotalSize * (CompactionTotalSizeMultiplier ^ Level) - // The multiplier for each level can also fine-tuned using - // CompactionTotalSizeMultiplierPerLevel. - // - // The default value is 10MiB. - CompactionTotalSize int - - // CompactionTotalSizeMultiplier defines multiplier for CompactionTotalSize. - // - // The default value is 10. - CompactionTotalSizeMultiplier float64 - - // CompactionTotalSizeMultiplierPerLevel defines per-level multiplier for - // CompactionTotalSize. - // Use zero to skip a level. - // - // The default value is nil. - CompactionTotalSizeMultiplierPerLevel []float64 - - // Comparer defines a total ordering over the space of []byte keys: a 'less - // than' relationship. The same comparison algorithm must be used for reads - // and writes over the lifetime of the DB. - // - // The default value uses the same ordering as bytes.Compare. - Comparer comparer.Comparer - - // Compression defines the 'sorted table' block compression to use. - // - // The default value (DefaultCompression) uses snappy compression. - Compression Compression - - // DisableBufferPool allows disable use of util.BufferPool functionality. - // - // The default value is false. - DisableBufferPool bool - - // DisableBlockCache allows disable use of cache.Cache functionality on - // 'sorted table' block. - // - // The default value is false. - DisableBlockCache bool - - // DisableCompactionBackoff allows disable compaction retry backoff. - // - // The default value is false. - DisableCompactionBackoff bool - - // DisableLargeBatchTransaction allows disabling switch-to-transaction mode - // on large batch write. If enable batch writes large than WriteBuffer will - // use transaction. - // - // The default is false. - DisableLargeBatchTransaction bool - - // ErrorIfExist defines whether an error should returned if the DB already - // exist. - // - // The default value is false. - ErrorIfExist bool - - // ErrorIfMissing defines whether an error should returned if the DB is - // missing. If false then the database will be created if missing, otherwise - // an error will be returned. - // - // The default value is false. - ErrorIfMissing bool - - // Filter defines an 'effective filter' to use. An 'effective filter' - // if defined will be used to generate per-table filter block. - // The filter name will be stored on disk. - // During reads LevelDB will try to find matching filter from - // 'effective filter' and 'alternative filters'. - // - // Filter can be changed after a DB has been created. It is recommended - // to put old filter to the 'alternative filters' to mitigate lack of - // filter during transition period. - // - // A filter is used to reduce disk reads when looking for a specific key. - // - // The default value is nil. - Filter filter.Filter - - // IteratorSamplingRate defines approximate gap (in bytes) between read - // sampling of an iterator. The samples will be used to determine when - // compaction should be triggered. - // - // The default is 1MiB. - IteratorSamplingRate int - - // NoSync allows completely disable fsync. - // - // The default is false. - NoSync bool - - // OpenFilesCacher provides cache algorithm for open files caching. - // Specify NoCacher to disable caching algorithm. - // - // The default value is LRUCacher. - OpenFilesCacher Cacher - - // OpenFilesCacheCapacity defines the capacity of the open files caching. - // Use -1 for zero, this has same effect as specifying NoCacher to OpenFilesCacher. - // - // The default value is 500. - OpenFilesCacheCapacity int - - // If true then opens DB in read-only mode. - // - // The default value is false. - ReadOnly bool - - // Strict defines the DB strict level. - Strict Strict - - // WriteBuffer defines maximum size of a 'memdb' before flushed to - // 'sorted table'. 'memdb' is an in-memory DB backed by an on-disk - // unsorted journal. - // - // LevelDB may held up to two 'memdb' at the same time. - // - // The default value is 4MiB. - WriteBuffer int - - // WriteL0StopTrigger defines number of 'sorted table' at level-0 that will - // pause write. - // - // The default value is 12. - WriteL0PauseTrigger int - - // WriteL0SlowdownTrigger defines number of 'sorted table' at level-0 that - // will trigger write slowdown. - // - // The default value is 8. - WriteL0SlowdownTrigger int -} - -func (o *Options) GetAltFilters() []filter.Filter { - if o == nil { - return nil - } - return o.AltFilters -} - -func (o *Options) GetBlockCacher() Cacher { - if o == nil || o.BlockCacher == nil { - return DefaultBlockCacher - } else if o.BlockCacher == NoCacher { - return nil - } - return o.BlockCacher -} - -func (o *Options) GetBlockCacheCapacity() int { - if o == nil || o.BlockCacheCapacity == 0 { - return DefaultBlockCacheCapacity - } else if o.BlockCacheCapacity < 0 { - return 0 - } - return o.BlockCacheCapacity -} - -func (o *Options) GetBlockRestartInterval() int { - if o == nil || o.BlockRestartInterval <= 0 { - return DefaultBlockRestartInterval - } - return o.BlockRestartInterval -} - -func (o *Options) GetBlockSize() int { - if o == nil || o.BlockSize <= 0 { - return DefaultBlockSize - } - return o.BlockSize -} - -func (o *Options) GetCompactionExpandLimit(level int) int { - factor := DefaultCompactionExpandLimitFactor - if o != nil && o.CompactionExpandLimitFactor > 0 { - factor = o.CompactionExpandLimitFactor - } - return o.GetCompactionTableSize(level+1) * factor -} - -func (o *Options) GetCompactionGPOverlaps(level int) int { - factor := DefaultCompactionGPOverlapsFactor - if o != nil && o.CompactionGPOverlapsFactor > 0 { - factor = o.CompactionGPOverlapsFactor - } - return o.GetCompactionTableSize(level+2) * factor -} - -func (o *Options) GetCompactionL0Trigger() int { - if o == nil || o.CompactionL0Trigger == 0 { - return DefaultCompactionL0Trigger - } - return o.CompactionL0Trigger -} - -func (o *Options) GetCompactionSourceLimit(level int) int { - factor := DefaultCompactionSourceLimitFactor - if o != nil && o.CompactionSourceLimitFactor > 0 { - factor = o.CompactionSourceLimitFactor - } - return o.GetCompactionTableSize(level+1) * factor -} - -func (o *Options) GetCompactionTableSize(level int) int { - var ( - base = DefaultCompactionTableSize - mult float64 - ) - if o != nil { - if o.CompactionTableSize > 0 { - base = o.CompactionTableSize - } - if level < len(o.CompactionTableSizeMultiplierPerLevel) && o.CompactionTableSizeMultiplierPerLevel[level] > 0 { - mult = o.CompactionTableSizeMultiplierPerLevel[level] - } else if o.CompactionTableSizeMultiplier > 0 { - mult = math.Pow(o.CompactionTableSizeMultiplier, float64(level)) - } - } - if mult == 0 { - mult = math.Pow(DefaultCompactionTableSizeMultiplier, float64(level)) - } - return int(float64(base) * mult) -} - -func (o *Options) GetCompactionTotalSize(level int) int64 { - var ( - base = DefaultCompactionTotalSize - mult float64 - ) - if o != nil { - if o.CompactionTotalSize > 0 { - base = o.CompactionTotalSize - } - if level < len(o.CompactionTotalSizeMultiplierPerLevel) && o.CompactionTotalSizeMultiplierPerLevel[level] > 0 { - mult = o.CompactionTotalSizeMultiplierPerLevel[level] - } else if o.CompactionTotalSizeMultiplier > 0 { - mult = math.Pow(o.CompactionTotalSizeMultiplier, float64(level)) - } - } - if mult == 0 { - mult = math.Pow(DefaultCompactionTotalSizeMultiplier, float64(level)) - } - return int64(float64(base) * mult) -} - -func (o *Options) GetComparer() comparer.Comparer { - if o == nil || o.Comparer == nil { - return comparer.DefaultComparer - } - return o.Comparer -} - -func (o *Options) GetCompression() Compression { - if o == nil || o.Compression <= DefaultCompression || o.Compression >= nCompression { - return DefaultCompressionType - } - return o.Compression -} - -func (o *Options) GetDisableBufferPool() bool { - if o == nil { - return false - } - return o.DisableBufferPool -} - -func (o *Options) GetDisableBlockCache() bool { - if o == nil { - return false - } - return o.DisableBlockCache -} - -func (o *Options) GetDisableCompactionBackoff() bool { - if o == nil { - return false - } - return o.DisableCompactionBackoff -} - -func (o *Options) GetDisableLargeBatchTransaction() bool { - if o == nil { - return false - } - return o.DisableLargeBatchTransaction -} - -func (o *Options) GetErrorIfExist() bool { - if o == nil { - return false - } - return o.ErrorIfExist -} - -func (o *Options) GetErrorIfMissing() bool { - if o == nil { - return false - } - return o.ErrorIfMissing -} - -func (o *Options) GetFilter() filter.Filter { - if o == nil { - return nil - } - return o.Filter -} - -func (o *Options) GetIteratorSamplingRate() int { - if o == nil || o.IteratorSamplingRate <= 0 { - return DefaultIteratorSamplingRate - } - return o.IteratorSamplingRate -} - -func (o *Options) GetNoSync() bool { - if o == nil { - return false - } - return o.NoSync -} - -func (o *Options) GetOpenFilesCacher() Cacher { - if o == nil || o.OpenFilesCacher == nil { - return DefaultOpenFilesCacher - } - if o.OpenFilesCacher == NoCacher { - return nil - } - return o.OpenFilesCacher -} - -func (o *Options) GetOpenFilesCacheCapacity() int { - if o == nil || o.OpenFilesCacheCapacity == 0 { - return DefaultOpenFilesCacheCapacity - } else if o.OpenFilesCacheCapacity < 0 { - return 0 - } - return o.OpenFilesCacheCapacity -} - -func (o *Options) GetReadOnly() bool { - if o == nil { - return false - } - return o.ReadOnly -} - -func (o *Options) GetStrict(strict Strict) bool { - if o == nil || o.Strict == 0 { - return DefaultStrict&strict != 0 - } - return o.Strict&strict != 0 -} - -func (o *Options) GetWriteBuffer() int { - if o == nil || o.WriteBuffer <= 0 { - return DefaultWriteBuffer - } - return o.WriteBuffer -} - -func (o *Options) GetWriteL0PauseTrigger() int { - if o == nil || o.WriteL0PauseTrigger == 0 { - return DefaultWriteL0PauseTrigger - } - return o.WriteL0PauseTrigger -} - -func (o *Options) GetWriteL0SlowdownTrigger() int { - if o == nil || o.WriteL0SlowdownTrigger == 0 { - return DefaultWriteL0SlowdownTrigger - } - return o.WriteL0SlowdownTrigger -} - -// ReadOptions holds the optional parameters for 'read operation'. The -// 'read operation' includes Get, Find and NewIterator. -type ReadOptions struct { - // DontFillCache defines whether block reads for this 'read operation' - // should be cached. If false then the block will be cached. This does - // not affects already cached block. - // - // The default value is false. - DontFillCache bool - - // Strict will be OR'ed with global DB 'strict level' unless StrictOverride - // is present. Currently only StrictReader that has effect here. - Strict Strict -} - -func (ro *ReadOptions) GetDontFillCache() bool { - if ro == nil { - return false - } - return ro.DontFillCache -} - -func (ro *ReadOptions) GetStrict(strict Strict) bool { - if ro == nil { - return false - } - return ro.Strict&strict != 0 -} - -// WriteOptions holds the optional parameters for 'write operation'. The -// 'write operation' includes Write, Put and Delete. -type WriteOptions struct { - // Sync is whether to sync underlying writes from the OS buffer cache - // through to actual disk, if applicable. Setting Sync can result in - // slower writes. - // - // If false, and the machine crashes, then some recent writes may be lost. - // Note that if it is just the process that crashes (and the machine does - // not) then no writes will be lost. - // - // In other words, Sync being false has the same semantics as a write - // system call. Sync being true means write followed by fsync. - // - // The default value is false. - Sync bool -} - -func (wo *WriteOptions) GetSync() bool { - if wo == nil { - return false - } - return wo.Sync -} - -func GetStrict(o *Options, ro *ReadOptions, strict Strict) bool { - if ro.GetStrict(StrictOverride) { - return ro.GetStrict(strict) - } else { - return o.GetStrict(strict) || ro.GetStrict(strict) - } -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/options.go b/vendor/github.com/syndtr/goleveldb/leveldb/options.go deleted file mode 100644 index b072b1ac4..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/options.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "github.com/syndtr/goleveldb/leveldb/filter" - "github.com/syndtr/goleveldb/leveldb/opt" -) - -func dupOptions(o *opt.Options) *opt.Options { - newo := &opt.Options{} - if o != nil { - *newo = *o - } - if newo.Strict == 0 { - newo.Strict = opt.DefaultStrict - } - return newo -} - -func (s *session) setOptions(o *opt.Options) { - no := dupOptions(o) - // Alternative filters. - if filters := o.GetAltFilters(); len(filters) > 0 { - no.AltFilters = make([]filter.Filter, len(filters)) - for i, filter := range filters { - no.AltFilters[i] = &iFilter{filter} - } - } - // Comparer. - s.icmp = &iComparer{o.GetComparer()} - no.Comparer = s.icmp - // Filter. - if filter := o.GetFilter(); filter != nil { - no.Filter = &iFilter{filter} - } - - s.o = &cachedOptions{Options: no} - s.o.cache() -} - -const optCachedLevel = 7 - -type cachedOptions struct { - *opt.Options - - compactionExpandLimit []int - compactionGPOverlaps []int - compactionSourceLimit []int - compactionTableSize []int - compactionTotalSize []int64 -} - -func (co *cachedOptions) cache() { - co.compactionExpandLimit = make([]int, optCachedLevel) - co.compactionGPOverlaps = make([]int, optCachedLevel) - co.compactionSourceLimit = make([]int, optCachedLevel) - co.compactionTableSize = make([]int, optCachedLevel) - co.compactionTotalSize = make([]int64, optCachedLevel) - - for level := 0; level < optCachedLevel; level++ { - co.compactionExpandLimit[level] = co.Options.GetCompactionExpandLimit(level) - co.compactionGPOverlaps[level] = co.Options.GetCompactionGPOverlaps(level) - co.compactionSourceLimit[level] = co.Options.GetCompactionSourceLimit(level) - co.compactionTableSize[level] = co.Options.GetCompactionTableSize(level) - co.compactionTotalSize[level] = co.Options.GetCompactionTotalSize(level) - } -} - -func (co *cachedOptions) GetCompactionExpandLimit(level int) int { - if level < optCachedLevel { - return co.compactionExpandLimit[level] - } - return co.Options.GetCompactionExpandLimit(level) -} - -func (co *cachedOptions) GetCompactionGPOverlaps(level int) int { - if level < optCachedLevel { - return co.compactionGPOverlaps[level] - } - return co.Options.GetCompactionGPOverlaps(level) -} - -func (co *cachedOptions) GetCompactionSourceLimit(level int) int { - if level < optCachedLevel { - return co.compactionSourceLimit[level] - } - return co.Options.GetCompactionSourceLimit(level) -} - -func (co *cachedOptions) GetCompactionTableSize(level int) int { - if level < optCachedLevel { - return co.compactionTableSize[level] - } - return co.Options.GetCompactionTableSize(level) -} - -func (co *cachedOptions) GetCompactionTotalSize(level int) int64 { - if level < optCachedLevel { - return co.compactionTotalSize[level] - } - return co.Options.GetCompactionTotalSize(level) -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/session.go b/vendor/github.com/syndtr/goleveldb/leveldb/session.go deleted file mode 100644 index b0d3fef1d..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/session.go +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "io" - "os" - "sync" - - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/journal" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" -) - -// ErrManifestCorrupted records manifest corruption. -type ErrManifestCorrupted struct { - Field string - Reason string -} - -func (e *ErrManifestCorrupted) Error() string { - return fmt.Sprintf("leveldb: manifest corrupted (field '%s'): %s", e.Field, e.Reason) -} - -func newErrManifestCorrupted(fd storage.FileDesc, field, reason string) error { - return errors.NewErrCorrupted(fd, &ErrManifestCorrupted{field, reason}) -} - -// session represent a persistent database session. -type session struct { - // Need 64-bit alignment. - stNextFileNum int64 // current unused file number - stJournalNum int64 // current journal file number; need external synchronization - stPrevJournalNum int64 // prev journal file number; no longer used; for compatibility with older version of leveldb - stTempFileNum int64 - stSeqNum uint64 // last mem compacted seq; need external synchronization - - stor storage.Storage - storLock storage.Lock - o *cachedOptions - icmp *iComparer - tops *tOps - - manifest *journal.Writer - manifestWriter storage.Writer - manifestFd storage.FileDesc - - stCompPtrs []internalKey // compaction pointers; need external synchronization - stVersion *version // current version - vmu sync.Mutex -} - -// Creates new initialized session instance. -func newSession(stor storage.Storage, o *opt.Options) (s *session, err error) { - if stor == nil { - return nil, os.ErrInvalid - } - storLock, err := stor.Lock() - if err != nil { - return - } - s = &session{ - stor: stor, - storLock: storLock, - } - s.setOptions(o) - s.tops = newTableOps(s) - s.setVersion(newVersion(s)) - s.log("log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed") - return -} - -// Close session. -func (s *session) close() { - s.tops.close() - if s.manifest != nil { - s.manifest.Close() - } - if s.manifestWriter != nil { - s.manifestWriter.Close() - } - s.manifest = nil - s.manifestWriter = nil - s.stVersion = nil -} - -// Release session lock. -func (s *session) release() { - s.storLock.Release() -} - -// Create a new database session; need external synchronization. -func (s *session) create() error { - // create manifest - return s.newManifest(nil, nil) -} - -// Recover a database session; need external synchronization. -func (s *session) recover() (err error) { - defer func() { - if os.IsNotExist(err) { - // Don't return os.ErrNotExist if the underlying storage contains - // other files that belong to LevelDB. So the DB won't get trashed. - if fds, _ := s.stor.List(storage.TypeAll); len(fds) > 0 { - err = &errors.ErrCorrupted{Fd: storage.FileDesc{Type: storage.TypeManifest}, Err: &errors.ErrMissingFiles{}} - } - } - }() - - fd, err := s.stor.GetMeta() - if err != nil { - return - } - - reader, err := s.stor.Open(fd) - if err != nil { - return - } - defer reader.Close() - - var ( - // Options. - strict = s.o.GetStrict(opt.StrictManifest) - - jr = journal.NewReader(reader, dropper{s, fd}, strict, true) - rec = &sessionRecord{} - staging = s.stVersion.newStaging() - ) - for { - var r io.Reader - r, err = jr.Next() - if err != nil { - if err == io.EOF { - err = nil - break - } - return errors.SetFd(err, fd) - } - - err = rec.decode(r) - if err == nil { - // save compact pointers - for _, r := range rec.compPtrs { - s.setCompPtr(r.level, internalKey(r.ikey)) - } - // commit record to version staging - staging.commit(rec) - } else { - err = errors.SetFd(err, fd) - if strict || !errors.IsCorrupted(err) { - return - } - s.logf("manifest error: %v (skipped)", errors.SetFd(err, fd)) - } - rec.resetCompPtrs() - rec.resetAddedTables() - rec.resetDeletedTables() - } - - switch { - case !rec.has(recComparer): - return newErrManifestCorrupted(fd, "comparer", "missing") - case rec.comparer != s.icmp.uName(): - return newErrManifestCorrupted(fd, "comparer", fmt.Sprintf("mismatch: want '%s', got '%s'", s.icmp.uName(), rec.comparer)) - case !rec.has(recNextFileNum): - return newErrManifestCorrupted(fd, "next-file-num", "missing") - case !rec.has(recJournalNum): - return newErrManifestCorrupted(fd, "journal-file-num", "missing") - case !rec.has(recSeqNum): - return newErrManifestCorrupted(fd, "seq-num", "missing") - } - - s.manifestFd = fd - s.setVersion(staging.finish()) - s.setNextFileNum(rec.nextFileNum) - s.recordCommited(rec) - return nil -} - -// Commit session; need external synchronization. -func (s *session) commit(r *sessionRecord) (err error) { - v := s.version() - defer v.release() - - // spawn new version based on current version - nv := v.spawn(r) - - if s.manifest == nil { - // manifest journal writer not yet created, create one - err = s.newManifest(r, nv) - } else { - err = s.flushManifest(r) - } - - // finally, apply new version if no error rise - if err == nil { - s.setVersion(nv) - } - - return -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/session_compaction.go b/vendor/github.com/syndtr/goleveldb/leveldb/session_compaction.go deleted file mode 100644 index 089cd00b2..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/session_compaction.go +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "sync/atomic" - - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/memdb" - "github.com/syndtr/goleveldb/leveldb/opt" -) - -func (s *session) pickMemdbLevel(umin, umax []byte, maxLevel int) int { - v := s.version() - defer v.release() - return v.pickMemdbLevel(umin, umax, maxLevel) -} - -func (s *session) flushMemdb(rec *sessionRecord, mdb *memdb.DB, maxLevel int) (int, error) { - // Create sorted table. - iter := mdb.NewIterator(nil) - defer iter.Release() - t, n, err := s.tops.createFrom(iter) - if err != nil { - return 0, err - } - - // Pick level other than zero can cause compaction issue with large - // bulk insert and delete on strictly incrementing key-space. The - // problem is that the small deletion markers trapped at lower level, - // while key/value entries keep growing at higher level. Since the - // key-space is strictly incrementing it will not overlaps with - // higher level, thus maximum possible level is always picked, while - // overlapping deletion marker pushed into lower level. - // See: https://github.com/syndtr/goleveldb/issues/127. - flushLevel := s.pickMemdbLevel(t.imin.ukey(), t.imax.ukey(), maxLevel) - rec.addTableFile(flushLevel, t) - - s.logf("memdb@flush created L%d@%d N·%d S·%s %q:%q", flushLevel, t.fd.Num, n, shortenb(int(t.size)), t.imin, t.imax) - return flushLevel, nil -} - -// Pick a compaction based on current state; need external synchronization. -func (s *session) pickCompaction() *compaction { - v := s.version() - - var sourceLevel int - var t0 tFiles - if v.cScore >= 1 { - sourceLevel = v.cLevel - cptr := s.getCompPtr(sourceLevel) - tables := v.levels[sourceLevel] - for _, t := range tables { - if cptr == nil || s.icmp.Compare(t.imax, cptr) > 0 { - t0 = append(t0, t) - break - } - } - if len(t0) == 0 { - t0 = append(t0, tables[0]) - } - } else { - if p := atomic.LoadPointer(&v.cSeek); p != nil { - ts := (*tSet)(p) - sourceLevel = ts.level - t0 = append(t0, ts.table) - } else { - v.release() - return nil - } - } - - return newCompaction(s, v, sourceLevel, t0) -} - -// Create compaction from given level and range; need external synchronization. -func (s *session) getCompactionRange(sourceLevel int, umin, umax []byte, noLimit bool) *compaction { - v := s.version() - - if sourceLevel >= len(v.levels) { - v.release() - return nil - } - - t0 := v.levels[sourceLevel].getOverlaps(nil, s.icmp, umin, umax, sourceLevel == 0) - if len(t0) == 0 { - v.release() - return nil - } - - // Avoid compacting too much in one shot in case the range is large. - // But we cannot do this for level-0 since level-0 files can overlap - // and we must not pick one file and drop another older file if the - // two files overlap. - if !noLimit && sourceLevel > 0 { - limit := int64(v.s.o.GetCompactionSourceLimit(sourceLevel)) - total := int64(0) - for i, t := range t0 { - total += t.size - if total >= limit { - s.logf("table@compaction limiting F·%d -> F·%d", len(t0), i+1) - t0 = t0[:i+1] - break - } - } - } - - return newCompaction(s, v, sourceLevel, t0) -} - -func newCompaction(s *session, v *version, sourceLevel int, t0 tFiles) *compaction { - c := &compaction{ - s: s, - v: v, - sourceLevel: sourceLevel, - levels: [2]tFiles{t0, nil}, - maxGPOverlaps: int64(s.o.GetCompactionGPOverlaps(sourceLevel)), - tPtrs: make([]int, len(v.levels)), - } - c.expand() - c.save() - return c -} - -// compaction represent a compaction state. -type compaction struct { - s *session - v *version - - sourceLevel int - levels [2]tFiles - maxGPOverlaps int64 - - gp tFiles - gpi int - seenKey bool - gpOverlappedBytes int64 - imin, imax internalKey - tPtrs []int - released bool - - snapGPI int - snapSeenKey bool - snapGPOverlappedBytes int64 - snapTPtrs []int -} - -func (c *compaction) save() { - c.snapGPI = c.gpi - c.snapSeenKey = c.seenKey - c.snapGPOverlappedBytes = c.gpOverlappedBytes - c.snapTPtrs = append(c.snapTPtrs[:0], c.tPtrs...) -} - -func (c *compaction) restore() { - c.gpi = c.snapGPI - c.seenKey = c.snapSeenKey - c.gpOverlappedBytes = c.snapGPOverlappedBytes - c.tPtrs = append(c.tPtrs[:0], c.snapTPtrs...) -} - -func (c *compaction) release() { - if !c.released { - c.released = true - c.v.release() - } -} - -// Expand compacted tables; need external synchronization. -func (c *compaction) expand() { - limit := int64(c.s.o.GetCompactionExpandLimit(c.sourceLevel)) - vt0 := c.v.levels[c.sourceLevel] - vt1 := tFiles{} - if level := c.sourceLevel + 1; level < len(c.v.levels) { - vt1 = c.v.levels[level] - } - - t0, t1 := c.levels[0], c.levels[1] - imin, imax := t0.getRange(c.s.icmp) - // We expand t0 here just incase ukey hop across tables. - t0 = vt0.getOverlaps(t0, c.s.icmp, imin.ukey(), imax.ukey(), c.sourceLevel == 0) - if len(t0) != len(c.levels[0]) { - imin, imax = t0.getRange(c.s.icmp) - } - t1 = vt1.getOverlaps(t1, c.s.icmp, imin.ukey(), imax.ukey(), false) - // Get entire range covered by compaction. - amin, amax := append(t0, t1...).getRange(c.s.icmp) - - // See if we can grow the number of inputs in "sourceLevel" without - // changing the number of "sourceLevel+1" files we pick up. - if len(t1) > 0 { - exp0 := vt0.getOverlaps(nil, c.s.icmp, amin.ukey(), amax.ukey(), c.sourceLevel == 0) - if len(exp0) > len(t0) && t1.size()+exp0.size() < limit { - xmin, xmax := exp0.getRange(c.s.icmp) - exp1 := vt1.getOverlaps(nil, c.s.icmp, xmin.ukey(), xmax.ukey(), false) - if len(exp1) == len(t1) { - c.s.logf("table@compaction expanding L%d+L%d (F·%d S·%s)+(F·%d S·%s) -> (F·%d S·%s)+(F·%d S·%s)", - c.sourceLevel, c.sourceLevel+1, len(t0), shortenb(int(t0.size())), len(t1), shortenb(int(t1.size())), - len(exp0), shortenb(int(exp0.size())), len(exp1), shortenb(int(exp1.size()))) - imin, imax = xmin, xmax - t0, t1 = exp0, exp1 - amin, amax = append(t0, t1...).getRange(c.s.icmp) - } - } - } - - // Compute the set of grandparent files that overlap this compaction - // (parent == sourceLevel+1; grandparent == sourceLevel+2) - if level := c.sourceLevel + 2; level < len(c.v.levels) { - c.gp = c.v.levels[level].getOverlaps(c.gp, c.s.icmp, amin.ukey(), amax.ukey(), false) - } - - c.levels[0], c.levels[1] = t0, t1 - c.imin, c.imax = imin, imax -} - -// Check whether compaction is trivial. -func (c *compaction) trivial() bool { - return len(c.levels[0]) == 1 && len(c.levels[1]) == 0 && c.gp.size() <= c.maxGPOverlaps -} - -func (c *compaction) baseLevelForKey(ukey []byte) bool { - for level := c.sourceLevel + 2; level < len(c.v.levels); level++ { - tables := c.v.levels[level] - for c.tPtrs[level] < len(tables) { - t := tables[c.tPtrs[level]] - if c.s.icmp.uCompare(ukey, t.imax.ukey()) <= 0 { - // We've advanced far enough. - if c.s.icmp.uCompare(ukey, t.imin.ukey()) >= 0 { - // Key falls in this file's range, so definitely not base level. - return false - } - break - } - c.tPtrs[level]++ - } - } - return true -} - -func (c *compaction) shouldStopBefore(ikey internalKey) bool { - for ; c.gpi < len(c.gp); c.gpi++ { - gp := c.gp[c.gpi] - if c.s.icmp.Compare(ikey, gp.imax) <= 0 { - break - } - if c.seenKey { - c.gpOverlappedBytes += gp.size - } - } - c.seenKey = true - - if c.gpOverlappedBytes > c.maxGPOverlaps { - // Too much overlap for current output; start new output. - c.gpOverlappedBytes = 0 - return true - } - return false -} - -// Creates an iterator. -func (c *compaction) newIterator() iterator.Iterator { - // Creates iterator slice. - icap := len(c.levels) - if c.sourceLevel == 0 { - // Special case for level-0. - icap = len(c.levels[0]) + 1 - } - its := make([]iterator.Iterator, 0, icap) - - // Options. - ro := &opt.ReadOptions{ - DontFillCache: true, - Strict: opt.StrictOverride, - } - strict := c.s.o.GetStrict(opt.StrictCompaction) - if strict { - ro.Strict |= opt.StrictReader - } - - for i, tables := range c.levels { - if len(tables) == 0 { - continue - } - - // Level-0 is not sorted and may overlaps each other. - if c.sourceLevel+i == 0 { - for _, t := range tables { - its = append(its, c.s.tops.newIterator(t, nil, ro)) - } - } else { - it := iterator.NewIndexedIterator(tables.newIndexIterator(c.s.tops, c.s.icmp, nil, ro), strict) - its = append(its, it) - } - } - - return iterator.NewMergedIterator(its, c.s.icmp, strict) -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/session_record.go b/vendor/github.com/syndtr/goleveldb/leveldb/session_record.go deleted file mode 100644 index 854e1aa6f..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/session_record.go +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "bufio" - "encoding/binary" - "io" - "strings" - - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/storage" -) - -type byteReader interface { - io.Reader - io.ByteReader -} - -// These numbers are written to disk and should not be changed. -const ( - recComparer = 1 - recJournalNum = 2 - recNextFileNum = 3 - recSeqNum = 4 - recCompPtr = 5 - recDelTable = 6 - recAddTable = 7 - // 8 was used for large value refs - recPrevJournalNum = 9 -) - -type cpRecord struct { - level int - ikey internalKey -} - -type atRecord struct { - level int - num int64 - size int64 - imin internalKey - imax internalKey -} - -type dtRecord struct { - level int - num int64 -} - -type sessionRecord struct { - hasRec int - comparer string - journalNum int64 - prevJournalNum int64 - nextFileNum int64 - seqNum uint64 - compPtrs []cpRecord - addedTables []atRecord - deletedTables []dtRecord - - scratch [binary.MaxVarintLen64]byte - err error -} - -func (p *sessionRecord) has(rec int) bool { - return p.hasRec&(1< -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "sync/atomic" - - "github.com/syndtr/goleveldb/leveldb/journal" - "github.com/syndtr/goleveldb/leveldb/storage" -) - -// Logging. - -type dropper struct { - s *session - fd storage.FileDesc -} - -func (d dropper) Drop(err error) { - if e, ok := err.(*journal.ErrCorrupted); ok { - d.s.logf("journal@drop %s-%d S·%s %q", d.fd.Type, d.fd.Num, shortenb(e.Size), e.Reason) - } else { - d.s.logf("journal@drop %s-%d %q", d.fd.Type, d.fd.Num, err) - } -} - -func (s *session) log(v ...interface{}) { s.stor.Log(fmt.Sprint(v...)) } -func (s *session) logf(format string, v ...interface{}) { s.stor.Log(fmt.Sprintf(format, v...)) } - -// File utils. - -func (s *session) newTemp() storage.FileDesc { - num := atomic.AddInt64(&s.stTempFileNum, 1) - 1 - return storage.FileDesc{storage.TypeTemp, num} -} - -// Session state. - -// Get current version. This will incr version ref, must call -// version.release (exactly once) after use. -func (s *session) version() *version { - s.vmu.Lock() - defer s.vmu.Unlock() - s.stVersion.ref++ - return s.stVersion -} - -// Set current version to v. -func (s *session) setVersion(v *version) { - s.vmu.Lock() - v.ref = 1 // Holds by session. - if old := s.stVersion; old != nil { - v.ref++ // Holds by old version. - old.next = v - old.releaseNB() - } - s.stVersion = v - s.vmu.Unlock() -} - -// Get current unused file number. -func (s *session) nextFileNum() int64 { - return atomic.LoadInt64(&s.stNextFileNum) -} - -// Set current unused file number to num. -func (s *session) setNextFileNum(num int64) { - atomic.StoreInt64(&s.stNextFileNum, num) -} - -// Mark file number as used. -func (s *session) markFileNum(num int64) { - nextFileNum := num + 1 - for { - old, x := s.stNextFileNum, nextFileNum - if old > x { - x = old - } - if atomic.CompareAndSwapInt64(&s.stNextFileNum, old, x) { - break - } - } -} - -// Allocate a file number. -func (s *session) allocFileNum() int64 { - return atomic.AddInt64(&s.stNextFileNum, 1) - 1 -} - -// Reuse given file number. -func (s *session) reuseFileNum(num int64) { - for { - old, x := s.stNextFileNum, num - if old != x+1 { - x = old - } - if atomic.CompareAndSwapInt64(&s.stNextFileNum, old, x) { - break - } - } -} - -// Set compaction ptr at given level; need external synchronization. -func (s *session) setCompPtr(level int, ik internalKey) { - if level >= len(s.stCompPtrs) { - newCompPtrs := make([]internalKey, level+1) - copy(newCompPtrs, s.stCompPtrs) - s.stCompPtrs = newCompPtrs - } - s.stCompPtrs[level] = append(internalKey{}, ik...) -} - -// Get compaction ptr at given level; need external synchronization. -func (s *session) getCompPtr(level int) internalKey { - if level >= len(s.stCompPtrs) { - return nil - } - return s.stCompPtrs[level] -} - -// Manifest related utils. - -// Fill given session record obj with current states; need external -// synchronization. -func (s *session) fillRecord(r *sessionRecord, snapshot bool) { - r.setNextFileNum(s.nextFileNum()) - - if snapshot { - if !r.has(recJournalNum) { - r.setJournalNum(s.stJournalNum) - } - - if !r.has(recSeqNum) { - r.setSeqNum(s.stSeqNum) - } - - for level, ik := range s.stCompPtrs { - if ik != nil { - r.addCompPtr(level, ik) - } - } - - r.setComparer(s.icmp.uName()) - } -} - -// Mark if record has been committed, this will update session state; -// need external synchronization. -func (s *session) recordCommited(rec *sessionRecord) { - if rec.has(recJournalNum) { - s.stJournalNum = rec.journalNum - } - - if rec.has(recPrevJournalNum) { - s.stPrevJournalNum = rec.prevJournalNum - } - - if rec.has(recSeqNum) { - s.stSeqNum = rec.seqNum - } - - for _, r := range rec.compPtrs { - s.setCompPtr(r.level, internalKey(r.ikey)) - } -} - -// Create a new manifest file; need external synchronization. -func (s *session) newManifest(rec *sessionRecord, v *version) (err error) { - fd := storage.FileDesc{storage.TypeManifest, s.allocFileNum()} - writer, err := s.stor.Create(fd) - if err != nil { - return - } - jw := journal.NewWriter(writer) - - if v == nil { - v = s.version() - defer v.release() - } - if rec == nil { - rec = &sessionRecord{} - } - s.fillRecord(rec, true) - v.fillRecord(rec) - - defer func() { - if err == nil { - s.recordCommited(rec) - if s.manifest != nil { - s.manifest.Close() - } - if s.manifestWriter != nil { - s.manifestWriter.Close() - } - if !s.manifestFd.Nil() { - s.stor.Remove(s.manifestFd) - } - s.manifestFd = fd - s.manifestWriter = writer - s.manifest = jw - } else { - writer.Close() - s.stor.Remove(fd) - s.reuseFileNum(fd.Num) - } - }() - - w, err := jw.Next() - if err != nil { - return - } - err = rec.encode(w) - if err != nil { - return - } - err = jw.Flush() - if err != nil { - return - } - err = s.stor.SetMeta(fd) - return -} - -// Flush record to disk. -func (s *session) flushManifest(rec *sessionRecord) (err error) { - s.fillRecord(rec, false) - w, err := s.manifest.Next() - if err != nil { - return - } - err = rec.encode(w) - if err != nil { - return - } - err = s.manifest.Flush() - if err != nil { - return - } - if !s.o.GetNoSync() { - err = s.manifestWriter.Sync() - if err != nil { - return - } - } - s.recordCommited(rec) - return -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage.go b/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage.go deleted file mode 100644 index cbe1dc103..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage.go +++ /dev/null @@ -1,583 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reservefs. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package storage - -import ( - "errors" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "runtime" - "strconv" - "strings" - "sync" - "time" -) - -var ( - errFileOpen = errors.New("leveldb/storage: file still open") - errReadOnly = errors.New("leveldb/storage: storage is read-only") -) - -type fileLock interface { - release() error -} - -type fileStorageLock struct { - fs *fileStorage -} - -func (lock *fileStorageLock) Release() { - if lock.fs != nil { - lock.fs.mu.Lock() - defer lock.fs.mu.Unlock() - if lock.fs.slock == lock { - lock.fs.slock = nil - } - } -} - -const logSizeThreshold = 1024 * 1024 // 1 MiB - -// fileStorage is a file-system backed storage. -type fileStorage struct { - path string - readOnly bool - - mu sync.Mutex - flock fileLock - slock *fileStorageLock - logw *os.File - logSize int64 - buf []byte - // Opened file counter; if open < 0 means closed. - open int - day int -} - -// OpenFile returns a new filesytem-backed storage implementation with the given -// path. This also acquire a file lock, so any subsequent attempt to open the -// same path will fail. -// -// The storage must be closed after use, by calling Close method. -func OpenFile(path string, readOnly bool) (Storage, error) { - if fi, err := os.Stat(path); err == nil { - if !fi.IsDir() { - return nil, fmt.Errorf("leveldb/storage: open %s: not a directory", path) - } - } else if os.IsNotExist(err) && !readOnly { - if err := os.MkdirAll(path, 0755); err != nil { - return nil, err - } - } else { - return nil, err - } - - flock, err := newFileLock(filepath.Join(path, "LOCK"), readOnly) - if err != nil { - return nil, err - } - - defer func() { - if err != nil { - flock.release() - } - }() - - var ( - logw *os.File - logSize int64 - ) - if !readOnly { - logw, err = os.OpenFile(filepath.Join(path, "LOG"), os.O_WRONLY|os.O_CREATE, 0644) - if err != nil { - return nil, err - } - logSize, err = logw.Seek(0, os.SEEK_END) - if err != nil { - logw.Close() - return nil, err - } - } - - fs := &fileStorage{ - path: path, - readOnly: readOnly, - flock: flock, - logw: logw, - logSize: logSize, - } - runtime.SetFinalizer(fs, (*fileStorage).Close) - return fs, nil -} - -func (fs *fileStorage) Lock() (Lock, error) { - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return nil, ErrClosed - } - if fs.readOnly { - return &fileStorageLock{}, nil - } - if fs.slock != nil { - return nil, ErrLocked - } - fs.slock = &fileStorageLock{fs: fs} - return fs.slock, nil -} - -func itoa(buf []byte, i int, wid int) []byte { - u := uint(i) - if u == 0 && wid <= 1 { - return append(buf, '0') - } - - // Assemble decimal in reverse order. - var b [32]byte - bp := len(b) - for ; u > 0 || wid > 0; u /= 10 { - bp-- - wid-- - b[bp] = byte(u%10) + '0' - } - return append(buf, b[bp:]...) -} - -func (fs *fileStorage) printDay(t time.Time) { - if fs.day == t.Day() { - return - } - fs.day = t.Day() - fs.logw.Write([]byte("=============== " + t.Format("Jan 2, 2006 (MST)") + " ===============\n")) -} - -func (fs *fileStorage) doLog(t time.Time, str string) { - if fs.logSize > logSizeThreshold { - // Rotate log file. - fs.logw.Close() - fs.logw = nil - fs.logSize = 0 - rename(filepath.Join(fs.path, "LOG"), filepath.Join(fs.path, "LOG.old")) - } - if fs.logw == nil { - var err error - fs.logw, err = os.OpenFile(filepath.Join(fs.path, "LOG"), os.O_WRONLY|os.O_CREATE, 0644) - if err != nil { - return - } - // Force printDay on new log file. - fs.day = 0 - } - fs.printDay(t) - hour, min, sec := t.Clock() - msec := t.Nanosecond() / 1e3 - // time - fs.buf = itoa(fs.buf[:0], hour, 2) - fs.buf = append(fs.buf, ':') - fs.buf = itoa(fs.buf, min, 2) - fs.buf = append(fs.buf, ':') - fs.buf = itoa(fs.buf, sec, 2) - fs.buf = append(fs.buf, '.') - fs.buf = itoa(fs.buf, msec, 6) - fs.buf = append(fs.buf, ' ') - // write - fs.buf = append(fs.buf, []byte(str)...) - fs.buf = append(fs.buf, '\n') - fs.logw.Write(fs.buf) -} - -func (fs *fileStorage) Log(str string) { - if !fs.readOnly { - t := time.Now() - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return - } - fs.doLog(t, str) - } -} - -func (fs *fileStorage) log(str string) { - if !fs.readOnly { - fs.doLog(time.Now(), str) - } -} - -func (fs *fileStorage) SetMeta(fd FileDesc) (err error) { - if !FileDescOk(fd) { - return ErrInvalidFile - } - if fs.readOnly { - return errReadOnly - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return ErrClosed - } - defer func() { - if err != nil { - fs.log(fmt.Sprintf("CURRENT: %v", err)) - } - }() - path := fmt.Sprintf("%s.%d", filepath.Join(fs.path, "CURRENT"), fd.Num) - w, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) - if err != nil { - return - } - _, err = fmt.Fprintln(w, fsGenName(fd)) - // Close the file first. - if cerr := w.Close(); cerr != nil { - fs.log(fmt.Sprintf("close CURRENT.%d: %v", fd.Num, cerr)) - } - if err != nil { - return - } - return rename(path, filepath.Join(fs.path, "CURRENT")) -} - -func (fs *fileStorage) GetMeta() (fd FileDesc, err error) { - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return FileDesc{}, ErrClosed - } - dir, err := os.Open(fs.path) - if err != nil { - return - } - names, err := dir.Readdirnames(0) - // Close the dir first before checking for Readdirnames error. - if ce := dir.Close(); ce != nil { - fs.log(fmt.Sprintf("close dir: %v", ce)) - } - if err != nil { - return - } - // Find latest CURRENT file. - var rem []string - var pend bool - var cerr error - for _, name := range names { - if strings.HasPrefix(name, "CURRENT") { - pend1 := len(name) > 7 - var pendNum int64 - // Make sure it is valid name for a CURRENT file, otherwise skip it. - if pend1 { - if name[7] != '.' || len(name) < 9 { - fs.log(fmt.Sprintf("skipping %s: invalid file name", name)) - continue - } - var e1 error - if pendNum, e1 = strconv.ParseInt(name[8:], 10, 0); e1 != nil { - fs.log(fmt.Sprintf("skipping %s: invalid file num: %v", name, e1)) - continue - } - } - path := filepath.Join(fs.path, name) - r, e1 := os.OpenFile(path, os.O_RDONLY, 0) - if e1 != nil { - return FileDesc{}, e1 - } - b, e1 := ioutil.ReadAll(r) - if e1 != nil { - r.Close() - return FileDesc{}, e1 - } - var fd1 FileDesc - if len(b) < 1 || b[len(b)-1] != '\n' || !fsParseNamePtr(string(b[:len(b)-1]), &fd1) { - fs.log(fmt.Sprintf("skipping %s: corrupted or incomplete", name)) - if pend1 { - rem = append(rem, name) - } - if !pend1 || cerr == nil { - metaFd, _ := fsParseName(name) - cerr = &ErrCorrupted{ - Fd: metaFd, - Err: errors.New("leveldb/storage: corrupted or incomplete meta file"), - } - } - } else if pend1 && pendNum != fd1.Num { - fs.log(fmt.Sprintf("skipping %s: inconsistent pending-file num: %d vs %d", name, pendNum, fd1.Num)) - rem = append(rem, name) - } else if fd1.Num < fd.Num { - fs.log(fmt.Sprintf("skipping %s: obsolete", name)) - if pend1 { - rem = append(rem, name) - } - } else { - fd = fd1 - pend = pend1 - } - if err := r.Close(); err != nil { - fs.log(fmt.Sprintf("close %s: %v", name, err)) - } - } - } - // Don't remove any files if there is no valid CURRENT file. - if fd.Nil() { - if cerr != nil { - err = cerr - } else { - err = os.ErrNotExist - } - return - } - if !fs.readOnly { - // Rename pending CURRENT file to an effective CURRENT. - if pend { - path := fmt.Sprintf("%s.%d", filepath.Join(fs.path, "CURRENT"), fd.Num) - if err := rename(path, filepath.Join(fs.path, "CURRENT")); err != nil { - fs.log(fmt.Sprintf("CURRENT.%d -> CURRENT: %v", fd.Num, err)) - } - } - // Remove obsolete or incomplete pending CURRENT files. - for _, name := range rem { - path := filepath.Join(fs.path, name) - if err := os.Remove(path); err != nil { - fs.log(fmt.Sprintf("remove %s: %v", name, err)) - } - } - } - return -} - -func (fs *fileStorage) List(ft FileType) (fds []FileDesc, err error) { - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return nil, ErrClosed - } - dir, err := os.Open(fs.path) - if err != nil { - return - } - names, err := dir.Readdirnames(0) - // Close the dir first before checking for Readdirnames error. - if cerr := dir.Close(); cerr != nil { - fs.log(fmt.Sprintf("close dir: %v", cerr)) - } - if err == nil { - for _, name := range names { - if fd, ok := fsParseName(name); ok && fd.Type&ft != 0 { - fds = append(fds, fd) - } - } - } - return -} - -func (fs *fileStorage) Open(fd FileDesc) (Reader, error) { - if !FileDescOk(fd) { - return nil, ErrInvalidFile - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return nil, ErrClosed - } - of, err := os.OpenFile(filepath.Join(fs.path, fsGenName(fd)), os.O_RDONLY, 0) - if err != nil { - if fsHasOldName(fd) && os.IsNotExist(err) { - of, err = os.OpenFile(filepath.Join(fs.path, fsGenOldName(fd)), os.O_RDONLY, 0) - if err == nil { - goto ok - } - } - return nil, err - } -ok: - fs.open++ - return &fileWrap{File: of, fs: fs, fd: fd}, nil -} - -func (fs *fileStorage) Create(fd FileDesc) (Writer, error) { - if !FileDescOk(fd) { - return nil, ErrInvalidFile - } - if fs.readOnly { - return nil, errReadOnly - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return nil, ErrClosed - } - of, err := os.OpenFile(filepath.Join(fs.path, fsGenName(fd)), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) - if err != nil { - return nil, err - } - fs.open++ - return &fileWrap{File: of, fs: fs, fd: fd}, nil -} - -func (fs *fileStorage) Remove(fd FileDesc) error { - if !FileDescOk(fd) { - return ErrInvalidFile - } - if fs.readOnly { - return errReadOnly - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return ErrClosed - } - err := os.Remove(filepath.Join(fs.path, fsGenName(fd))) - if err != nil { - if fsHasOldName(fd) && os.IsNotExist(err) { - if e1 := os.Remove(filepath.Join(fs.path, fsGenOldName(fd))); !os.IsNotExist(e1) { - fs.log(fmt.Sprintf("remove %s: %v (old name)", fd, err)) - err = e1 - } - } else { - fs.log(fmt.Sprintf("remove %s: %v", fd, err)) - } - } - return err -} - -func (fs *fileStorage) Rename(oldfd, newfd FileDesc) error { - if !FileDescOk(oldfd) || !FileDescOk(newfd) { - return ErrInvalidFile - } - if oldfd == newfd { - return nil - } - if fs.readOnly { - return errReadOnly - } - - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return ErrClosed - } - return rename(filepath.Join(fs.path, fsGenName(oldfd)), filepath.Join(fs.path, fsGenName(newfd))) -} - -func (fs *fileStorage) Close() error { - fs.mu.Lock() - defer fs.mu.Unlock() - if fs.open < 0 { - return ErrClosed - } - // Clear the finalizer. - runtime.SetFinalizer(fs, nil) - - if fs.open > 0 { - fs.log(fmt.Sprintf("close: warning, %d files still open", fs.open)) - } - fs.open = -1 - if fs.logw != nil { - fs.logw.Close() - } - return fs.flock.release() -} - -type fileWrap struct { - *os.File - fs *fileStorage - fd FileDesc - closed bool -} - -func (fw *fileWrap) Sync() error { - if err := fw.File.Sync(); err != nil { - return err - } - if fw.fd.Type == TypeManifest { - // Also sync parent directory if file type is manifest. - // See: https://code.google.com/p/leveldb/issues/detail?id=190. - if err := syncDir(fw.fs.path); err != nil { - fw.fs.log(fmt.Sprintf("syncDir: %v", err)) - return err - } - } - return nil -} - -func (fw *fileWrap) Close() error { - fw.fs.mu.Lock() - defer fw.fs.mu.Unlock() - if fw.closed { - return ErrClosed - } - fw.closed = true - fw.fs.open-- - err := fw.File.Close() - if err != nil { - fw.fs.log(fmt.Sprintf("close %s: %v", fw.fd, err)) - } - return err -} - -func fsGenName(fd FileDesc) string { - switch fd.Type { - case TypeManifest: - return fmt.Sprintf("MANIFEST-%06d", fd.Num) - case TypeJournal: - return fmt.Sprintf("%06d.log", fd.Num) - case TypeTable: - return fmt.Sprintf("%06d.ldb", fd.Num) - case TypeTemp: - return fmt.Sprintf("%06d.tmp", fd.Num) - default: - panic("invalid file type") - } -} - -func fsHasOldName(fd FileDesc) bool { - return fd.Type == TypeTable -} - -func fsGenOldName(fd FileDesc) string { - switch fd.Type { - case TypeTable: - return fmt.Sprintf("%06d.sst", fd.Num) - } - return fsGenName(fd) -} - -func fsParseName(name string) (fd FileDesc, ok bool) { - var tail string - _, err := fmt.Sscanf(name, "%d.%s", &fd.Num, &tail) - if err == nil { - switch tail { - case "log": - fd.Type = TypeJournal - case "ldb", "sst": - fd.Type = TypeTable - case "tmp": - fd.Type = TypeTemp - default: - return - } - return fd, true - } - n, _ := fmt.Sscanf(name, "MANIFEST-%d%s", &fd.Num, &tail) - if n == 1 { - fd.Type = TypeManifest - return fd, true - } - return -} - -func fsParseNamePtr(name string, fd *FileDesc) bool { - _fd, ok := fsParseName(name) - if fd != nil { - *fd = _fd - } - return ok -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go b/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go deleted file mode 100644 index bab62bfce..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package storage - -import ( - "os" - "path/filepath" -) - -type plan9FileLock struct { - f *os.File -} - -func (fl *plan9FileLock) release() error { - return fl.f.Close() -} - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - var ( - flag int - perm os.FileMode - ) - if readOnly { - flag = os.O_RDONLY - } else { - flag = os.O_RDWR - perm = os.ModeExclusive - } - f, err := os.OpenFile(path, flag, perm) - if os.IsNotExist(err) { - f, err = os.OpenFile(path, flag|os.O_CREATE, perm|0644) - } - if err != nil { - return - } - fl = &plan9FileLock{f: f} - return -} - -func rename(oldpath, newpath string) error { - if _, err := os.Stat(newpath); err == nil { - if err := os.Remove(newpath); err != nil { - return err - } - } - - _, fname := filepath.Split(newpath) - return os.Rename(oldpath, fname) -} - -func syncDir(name string) error { - f, err := os.Open(name) - if err != nil { - return err - } - defer f.Close() - if err := f.Sync(); err != nil { - return err - } - return nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_solaris.go b/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_solaris.go deleted file mode 100644 index 79901ee4a..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_solaris.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// +build solaris - -package storage - -import ( - "os" - "syscall" -) - -type unixFileLock struct { - f *os.File -} - -func (fl *unixFileLock) release() error { - if err := setFileLock(fl.f, false, false); err != nil { - return err - } - return fl.f.Close() -} - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - var flag int - if readOnly { - flag = os.O_RDONLY - } else { - flag = os.O_RDWR - } - f, err := os.OpenFile(path, flag, 0) - if os.IsNotExist(err) { - f, err = os.OpenFile(path, flag|os.O_CREATE, 0644) - } - if err != nil { - return - } - err = setFileLock(f, readOnly, true) - if err != nil { - f.Close() - return - } - fl = &unixFileLock{f: f} - return -} - -func setFileLock(f *os.File, readOnly, lock bool) error { - flock := syscall.Flock_t{ - Type: syscall.F_UNLCK, - Start: 0, - Len: 0, - Whence: 1, - } - if lock { - if readOnly { - flock.Type = syscall.F_RDLCK - } else { - flock.Type = syscall.F_WRLCK - } - } - return syscall.FcntlFlock(f.Fd(), syscall.F_SETLK, &flock) -} - -func rename(oldpath, newpath string) error { - return os.Rename(oldpath, newpath) -} - -func syncDir(name string) error { - f, err := os.Open(name) - if err != nil { - return err - } - defer f.Close() - if err := f.Sync(); err != nil { - return err - } - return nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_unix.go b/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_unix.go deleted file mode 100644 index 7e2991537..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_unix.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// +build darwin dragonfly freebsd linux netbsd openbsd - -package storage - -import ( - "os" - "syscall" -) - -type unixFileLock struct { - f *os.File -} - -func (fl *unixFileLock) release() error { - if err := setFileLock(fl.f, false, false); err != nil { - return err - } - return fl.f.Close() -} - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - var flag int - if readOnly { - flag = os.O_RDONLY - } else { - flag = os.O_RDWR - } - f, err := os.OpenFile(path, flag, 0) - if os.IsNotExist(err) { - f, err = os.OpenFile(path, flag|os.O_CREATE, 0644) - } - if err != nil { - return - } - err = setFileLock(f, readOnly, true) - if err != nil { - f.Close() - return - } - fl = &unixFileLock{f: f} - return -} - -func setFileLock(f *os.File, readOnly, lock bool) error { - how := syscall.LOCK_UN - if lock { - if readOnly { - how = syscall.LOCK_SH - } else { - how = syscall.LOCK_EX - } - } - return syscall.Flock(int(f.Fd()), how|syscall.LOCK_NB) -} - -func rename(oldpath, newpath string) error { - return os.Rename(oldpath, newpath) -} - -func isErrInvalid(err error) bool { - if err == os.ErrInvalid { - return true - } - if syserr, ok := err.(*os.SyscallError); ok && syserr.Err == syscall.EINVAL { - return true - } - return false -} - -func syncDir(name string) error { - f, err := os.Open(name) - if err != nil { - return err - } - defer f.Close() - if err := f.Sync(); err != nil && !isErrInvalid(err) { - return err - } - return nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_windows.go b/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_windows.go deleted file mode 100644 index 899335fd7..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_windows.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2013, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package storage - -import ( - "syscall" - "unsafe" -) - -var ( - modkernel32 = syscall.NewLazyDLL("kernel32.dll") - - procMoveFileExW = modkernel32.NewProc("MoveFileExW") -) - -const ( - _MOVEFILE_REPLACE_EXISTING = 1 -) - -type windowsFileLock struct { - fd syscall.Handle -} - -func (fl *windowsFileLock) release() error { - return syscall.Close(fl.fd) -} - -func newFileLock(path string, readOnly bool) (fl fileLock, err error) { - pathp, err := syscall.UTF16PtrFromString(path) - if err != nil { - return - } - var access, shareMode uint32 - if readOnly { - access = syscall.GENERIC_READ - shareMode = syscall.FILE_SHARE_READ - } else { - access = syscall.GENERIC_READ | syscall.GENERIC_WRITE - } - fd, err := syscall.CreateFile(pathp, access, shareMode, nil, syscall.OPEN_EXISTING, syscall.FILE_ATTRIBUTE_NORMAL, 0) - if err == syscall.ERROR_FILE_NOT_FOUND { - fd, err = syscall.CreateFile(pathp, access, shareMode, nil, syscall.OPEN_ALWAYS, syscall.FILE_ATTRIBUTE_NORMAL, 0) - } - if err != nil { - return - } - fl = &windowsFileLock{fd: fd} - return -} - -func moveFileEx(from *uint16, to *uint16, flags uint32) error { - r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) - if r1 == 0 { - if e1 != 0 { - return error(e1) - } - return syscall.EINVAL - } - return nil -} - -func rename(oldpath, newpath string) error { - from, err := syscall.UTF16PtrFromString(oldpath) - if err != nil { - return err - } - to, err := syscall.UTF16PtrFromString(newpath) - if err != nil { - return err - } - return moveFileEx(from, to, _MOVEFILE_REPLACE_EXISTING) -} - -func syncDir(name string) error { return nil } diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/storage/mem_storage.go b/vendor/github.com/syndtr/goleveldb/leveldb/storage/mem_storage.go deleted file mode 100644 index 9b70e1513..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/storage/mem_storage.go +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (c) 2013, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package storage - -import ( - "bytes" - "os" - "sync" -) - -const typeShift = 3 - -type memStorageLock struct { - ms *memStorage -} - -func (lock *memStorageLock) Release() { - ms := lock.ms - ms.mu.Lock() - defer ms.mu.Unlock() - if ms.slock == lock { - ms.slock = nil - } - return -} - -// memStorage is a memory-backed storage. -type memStorage struct { - mu sync.Mutex - slock *memStorageLock - files map[uint64]*memFile - meta FileDesc -} - -// NewMemStorage returns a new memory-backed storage implementation. -func NewMemStorage() Storage { - return &memStorage{ - files: make(map[uint64]*memFile), - } -} - -func (ms *memStorage) Lock() (Lock, error) { - ms.mu.Lock() - defer ms.mu.Unlock() - if ms.slock != nil { - return nil, ErrLocked - } - ms.slock = &memStorageLock{ms: ms} - return ms.slock, nil -} - -func (*memStorage) Log(str string) {} - -func (ms *memStorage) SetMeta(fd FileDesc) error { - if !FileDescOk(fd) { - return ErrInvalidFile - } - - ms.mu.Lock() - ms.meta = fd - ms.mu.Unlock() - return nil -} - -func (ms *memStorage) GetMeta() (FileDesc, error) { - ms.mu.Lock() - defer ms.mu.Unlock() - if ms.meta.Nil() { - return FileDesc{}, os.ErrNotExist - } - return ms.meta, nil -} - -func (ms *memStorage) List(ft FileType) ([]FileDesc, error) { - ms.mu.Lock() - var fds []FileDesc - for x, _ := range ms.files { - fd := unpackFile(x) - if fd.Type&ft != 0 { - fds = append(fds, fd) - } - } - ms.mu.Unlock() - return fds, nil -} - -func (ms *memStorage) Open(fd FileDesc) (Reader, error) { - if !FileDescOk(fd) { - return nil, ErrInvalidFile - } - - ms.mu.Lock() - defer ms.mu.Unlock() - if m, exist := ms.files[packFile(fd)]; exist { - if m.open { - return nil, errFileOpen - } - m.open = true - return &memReader{Reader: bytes.NewReader(m.Bytes()), ms: ms, m: m}, nil - } - return nil, os.ErrNotExist -} - -func (ms *memStorage) Create(fd FileDesc) (Writer, error) { - if !FileDescOk(fd) { - return nil, ErrInvalidFile - } - - x := packFile(fd) - ms.mu.Lock() - defer ms.mu.Unlock() - m, exist := ms.files[x] - if exist { - if m.open { - return nil, errFileOpen - } - m.Reset() - } else { - m = &memFile{} - ms.files[x] = m - } - m.open = true - return &memWriter{memFile: m, ms: ms}, nil -} - -func (ms *memStorage) Remove(fd FileDesc) error { - if !FileDescOk(fd) { - return ErrInvalidFile - } - - x := packFile(fd) - ms.mu.Lock() - defer ms.mu.Unlock() - if _, exist := ms.files[x]; exist { - delete(ms.files, x) - return nil - } - return os.ErrNotExist -} - -func (ms *memStorage) Rename(oldfd, newfd FileDesc) error { - if FileDescOk(oldfd) || FileDescOk(newfd) { - return ErrInvalidFile - } - if oldfd == newfd { - return nil - } - - oldx := packFile(oldfd) - newx := packFile(newfd) - ms.mu.Lock() - defer ms.mu.Unlock() - oldm, exist := ms.files[oldx] - if !exist { - return os.ErrNotExist - } - newm, exist := ms.files[newx] - if (exist && newm.open) || oldm.open { - return errFileOpen - } - delete(ms.files, oldx) - ms.files[newx] = oldm - return nil -} - -func (*memStorage) Close() error { return nil } - -type memFile struct { - bytes.Buffer - open bool -} - -type memReader struct { - *bytes.Reader - ms *memStorage - m *memFile - closed bool -} - -func (mr *memReader) Close() error { - mr.ms.mu.Lock() - defer mr.ms.mu.Unlock() - if mr.closed { - return ErrClosed - } - mr.m.open = false - return nil -} - -type memWriter struct { - *memFile - ms *memStorage - closed bool -} - -func (*memWriter) Sync() error { return nil } - -func (mw *memWriter) Close() error { - mw.ms.mu.Lock() - defer mw.ms.mu.Unlock() - if mw.closed { - return ErrClosed - } - mw.memFile.open = false - return nil -} - -func packFile(fd FileDesc) uint64 { - return uint64(fd.Num)<> typeShift)} -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/storage/storage.go b/vendor/github.com/syndtr/goleveldb/leveldb/storage/storage.go deleted file mode 100644 index 9b30b6727..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/storage/storage.go +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package storage provides storage abstraction for LevelDB. -package storage - -import ( - "errors" - "fmt" - "io" - - "github.com/syndtr/goleveldb/leveldb/util" -) - -type FileType int - -const ( - TypeManifest FileType = 1 << iota - TypeJournal - TypeTable - TypeTemp - - TypeAll = TypeManifest | TypeJournal | TypeTable | TypeTemp -) - -func (t FileType) String() string { - switch t { - case TypeManifest: - return "manifest" - case TypeJournal: - return "journal" - case TypeTable: - return "table" - case TypeTemp: - return "temp" - } - return fmt.Sprintf("", t) -} - -var ( - ErrInvalidFile = errors.New("leveldb/storage: invalid file for argument") - ErrLocked = errors.New("leveldb/storage: already locked") - ErrClosed = errors.New("leveldb/storage: closed") -) - -// ErrCorrupted is the type that wraps errors that indicate corruption of -// a file. Package storage has its own type instead of using -// errors.ErrCorrupted to prevent circular import. -type ErrCorrupted struct { - Fd FileDesc - Err error -} - -func (e *ErrCorrupted) Error() string { - if !e.Fd.Nil() { - return fmt.Sprintf("%v [file=%v]", e.Err, e.Fd) - } else { - return e.Err.Error() - } -} - -// Syncer is the interface that wraps basic Sync method. -type Syncer interface { - // Sync commits the current contents of the file to stable storage. - Sync() error -} - -// Reader is the interface that groups the basic Read, Seek, ReadAt and Close -// methods. -type Reader interface { - io.ReadSeeker - io.ReaderAt - io.Closer -} - -// Writer is the interface that groups the basic Write, Sync and Close -// methods. -type Writer interface { - io.WriteCloser - Syncer -} - -type Lock interface { - util.Releaser -} - -// FileDesc is a file descriptor. -type FileDesc struct { - Type FileType - Num int64 -} - -func (fd FileDesc) String() string { - switch fd.Type { - case TypeManifest: - return fmt.Sprintf("MANIFEST-%06d", fd.Num) - case TypeJournal: - return fmt.Sprintf("%06d.log", fd.Num) - case TypeTable: - return fmt.Sprintf("%06d.ldb", fd.Num) - case TypeTemp: - return fmt.Sprintf("%06d.tmp", fd.Num) - default: - return fmt.Sprintf("%#x-%d", fd.Type, fd.Num) - } -} - -// Nil returns true if fd == (FileDesc{}). -func (fd FileDesc) Nil() bool { - return fd == (FileDesc{}) -} - -// FileDescOk returns true if fd is a valid file descriptor. -func FileDescOk(fd FileDesc) bool { - switch fd.Type { - case TypeManifest: - case TypeJournal: - case TypeTable: - case TypeTemp: - default: - return false - } - return fd.Num >= 0 -} - -// Storage is the storage. A storage instance must be goroutine-safe. -type Storage interface { - // Lock locks the storage. Any subsequent attempt to call Lock will fail - // until the last lock released. - // After use the caller should call the Release method. - Lock() (Lock, error) - - // Log logs a string. This is used for logging. - // An implementation may write to a file, stdout or simply do nothing. - Log(str string) - - // SetMeta sets to point to the given fd, which then can be acquired using - // GetMeta method. - // SetMeta should be implemented in such way that changes should happened - // atomically. - SetMeta(fd FileDesc) error - - // GetManifest returns a manifest file. - // Returns os.ErrNotExist if meta doesn't point to any fd, or point to fd - // that doesn't exist. - GetMeta() (FileDesc, error) - - // List returns fds that match the given file types. - // The file types may be OR'ed together. - List(ft FileType) ([]FileDesc, error) - - // Open opens file with the given fd read-only. - // Returns os.ErrNotExist error if the file does not exist. - // Returns ErrClosed if the underlying storage is closed. - Open(fd FileDesc) (Reader, error) - - // Create creates file with the given fd, truncate if already exist and - // opens write-only. - // Returns ErrClosed if the underlying storage is closed. - Create(fd FileDesc) (Writer, error) - - // Remove removes file with the given fd. - // Returns ErrClosed if the underlying storage is closed. - Remove(fd FileDesc) error - - // Rename renames file from oldfd to newfd. - // Returns ErrClosed if the underlying storage is closed. - Rename(oldfd, newfd FileDesc) error - - // Close closes the storage. - // It is valid to call Close multiple times. Other methods should not be - // called after the storage has been closed. - Close() error -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/table.go b/vendor/github.com/syndtr/goleveldb/leveldb/table.go deleted file mode 100644 index 310ba6c22..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/table.go +++ /dev/null @@ -1,529 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "sort" - "sync/atomic" - - "github.com/syndtr/goleveldb/leveldb/cache" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/table" - "github.com/syndtr/goleveldb/leveldb/util" -) - -// tFile holds basic information about a table. -type tFile struct { - fd storage.FileDesc - seekLeft int32 - size int64 - imin, imax internalKey -} - -// Returns true if given key is after largest key of this table. -func (t *tFile) after(icmp *iComparer, ukey []byte) bool { - return ukey != nil && icmp.uCompare(ukey, t.imax.ukey()) > 0 -} - -// Returns true if given key is before smallest key of this table. -func (t *tFile) before(icmp *iComparer, ukey []byte) bool { - return ukey != nil && icmp.uCompare(ukey, t.imin.ukey()) < 0 -} - -// Returns true if given key range overlaps with this table key range. -func (t *tFile) overlaps(icmp *iComparer, umin, umax []byte) bool { - return !t.after(icmp, umin) && !t.before(icmp, umax) -} - -// Cosumes one seek and return current seeks left. -func (t *tFile) consumeSeek() int32 { - return atomic.AddInt32(&t.seekLeft, -1) -} - -// Creates new tFile. -func newTableFile(fd storage.FileDesc, size int64, imin, imax internalKey) *tFile { - f := &tFile{ - fd: fd, - size: size, - imin: imin, - imax: imax, - } - - // We arrange to automatically compact this file after - // a certain number of seeks. Let's assume: - // (1) One seek costs 10ms - // (2) Writing or reading 1MB costs 10ms (100MB/s) - // (3) A compaction of 1MB does 25MB of IO: - // 1MB read from this level - // 10-12MB read from next level (boundaries may be misaligned) - // 10-12MB written to next level - // This implies that 25 seeks cost the same as the compaction - // of 1MB of data. I.e., one seek costs approximately the - // same as the compaction of 40KB of data. We are a little - // conservative and allow approximately one seek for every 16KB - // of data before triggering a compaction. - f.seekLeft = int32(size / 16384) - if f.seekLeft < 100 { - f.seekLeft = 100 - } - - return f -} - -func tableFileFromRecord(r atRecord) *tFile { - return newTableFile(storage.FileDesc{storage.TypeTable, r.num}, r.size, r.imin, r.imax) -} - -// tFiles hold multiple tFile. -type tFiles []*tFile - -func (tf tFiles) Len() int { return len(tf) } -func (tf tFiles) Swap(i, j int) { tf[i], tf[j] = tf[j], tf[i] } - -func (tf tFiles) nums() string { - x := "[ " - for i, f := range tf { - if i != 0 { - x += ", " - } - x += fmt.Sprint(f.fd.Num) - } - x += " ]" - return x -} - -// Returns true if i smallest key is less than j. -// This used for sort by key in ascending order. -func (tf tFiles) lessByKey(icmp *iComparer, i, j int) bool { - a, b := tf[i], tf[j] - n := icmp.Compare(a.imin, b.imin) - if n == 0 { - return a.fd.Num < b.fd.Num - } - return n < 0 -} - -// Returns true if i file number is greater than j. -// This used for sort by file number in descending order. -func (tf tFiles) lessByNum(i, j int) bool { - return tf[i].fd.Num > tf[j].fd.Num -} - -// Sorts tables by key in ascending order. -func (tf tFiles) sortByKey(icmp *iComparer) { - sort.Sort(&tFilesSortByKey{tFiles: tf, icmp: icmp}) -} - -// Sorts tables by file number in descending order. -func (tf tFiles) sortByNum() { - sort.Sort(&tFilesSortByNum{tFiles: tf}) -} - -// Returns sum of all tables size. -func (tf tFiles) size() (sum int64) { - for _, t := range tf { - sum += t.size - } - return sum -} - -// Searches smallest index of tables whose its smallest -// key is after or equal with given key. -func (tf tFiles) searchMin(icmp *iComparer, ikey internalKey) int { - return sort.Search(len(tf), func(i int) bool { - return icmp.Compare(tf[i].imin, ikey) >= 0 - }) -} - -// Searches smallest index of tables whose its largest -// key is after or equal with given key. -func (tf tFiles) searchMax(icmp *iComparer, ikey internalKey) int { - return sort.Search(len(tf), func(i int) bool { - return icmp.Compare(tf[i].imax, ikey) >= 0 - }) -} - -// Returns true if given key range overlaps with one or more -// tables key range. If unsorted is true then binary search will not be used. -func (tf tFiles) overlaps(icmp *iComparer, umin, umax []byte, unsorted bool) bool { - if unsorted { - // Check against all files. - for _, t := range tf { - if t.overlaps(icmp, umin, umax) { - return true - } - } - return false - } - - i := 0 - if len(umin) > 0 { - // Find the earliest possible internal key for min. - i = tf.searchMax(icmp, makeInternalKey(nil, umin, keyMaxSeq, keyTypeSeek)) - } - if i >= len(tf) { - // Beginning of range is after all files, so no overlap. - return false - } - return !tf[i].before(icmp, umax) -} - -// Returns tables whose its key range overlaps with given key range. -// Range will be expanded if ukey found hop across tables. -// If overlapped is true then the search will be restarted if umax -// expanded. -// The dst content will be overwritten. -func (tf tFiles) getOverlaps(dst tFiles, icmp *iComparer, umin, umax []byte, overlapped bool) tFiles { - dst = dst[:0] - for i := 0; i < len(tf); { - t := tf[i] - if t.overlaps(icmp, umin, umax) { - if umin != nil && icmp.uCompare(t.imin.ukey(), umin) < 0 { - umin = t.imin.ukey() - dst = dst[:0] - i = 0 - continue - } else if umax != nil && icmp.uCompare(t.imax.ukey(), umax) > 0 { - umax = t.imax.ukey() - // Restart search if it is overlapped. - if overlapped { - dst = dst[:0] - i = 0 - continue - } - } - - dst = append(dst, t) - } - i++ - } - - return dst -} - -// Returns tables key range. -func (tf tFiles) getRange(icmp *iComparer) (imin, imax internalKey) { - for i, t := range tf { - if i == 0 { - imin, imax = t.imin, t.imax - continue - } - if icmp.Compare(t.imin, imin) < 0 { - imin = t.imin - } - if icmp.Compare(t.imax, imax) > 0 { - imax = t.imax - } - } - - return -} - -// Creates iterator index from tables. -func (tf tFiles) newIndexIterator(tops *tOps, icmp *iComparer, slice *util.Range, ro *opt.ReadOptions) iterator.IteratorIndexer { - if slice != nil { - var start, limit int - if slice.Start != nil { - start = tf.searchMax(icmp, internalKey(slice.Start)) - } - if slice.Limit != nil { - limit = tf.searchMin(icmp, internalKey(slice.Limit)) - } else { - limit = tf.Len() - } - tf = tf[start:limit] - } - return iterator.NewArrayIndexer(&tFilesArrayIndexer{ - tFiles: tf, - tops: tops, - icmp: icmp, - slice: slice, - ro: ro, - }) -} - -// Tables iterator index. -type tFilesArrayIndexer struct { - tFiles - tops *tOps - icmp *iComparer - slice *util.Range - ro *opt.ReadOptions -} - -func (a *tFilesArrayIndexer) Search(key []byte) int { - return a.searchMax(a.icmp, internalKey(key)) -} - -func (a *tFilesArrayIndexer) Get(i int) iterator.Iterator { - if i == 0 || i == a.Len()-1 { - return a.tops.newIterator(a.tFiles[i], a.slice, a.ro) - } - return a.tops.newIterator(a.tFiles[i], nil, a.ro) -} - -// Helper type for sortByKey. -type tFilesSortByKey struct { - tFiles - icmp *iComparer -} - -func (x *tFilesSortByKey) Less(i, j int) bool { - return x.lessByKey(x.icmp, i, j) -} - -// Helper type for sortByNum. -type tFilesSortByNum struct { - tFiles -} - -func (x *tFilesSortByNum) Less(i, j int) bool { - return x.lessByNum(i, j) -} - -// Table operations. -type tOps struct { - s *session - noSync bool - cache *cache.Cache - bcache *cache.Cache - bpool *util.BufferPool -} - -// Creates an empty table and returns table writer. -func (t *tOps) create() (*tWriter, error) { - fd := storage.FileDesc{storage.TypeTable, t.s.allocFileNum()} - fw, err := t.s.stor.Create(fd) - if err != nil { - return nil, err - } - return &tWriter{ - t: t, - fd: fd, - w: fw, - tw: table.NewWriter(fw, t.s.o.Options), - }, nil -} - -// Builds table from src iterator. -func (t *tOps) createFrom(src iterator.Iterator) (f *tFile, n int, err error) { - w, err := t.create() - if err != nil { - return - } - - defer func() { - if err != nil { - w.drop() - } - }() - - for src.Next() { - err = w.append(src.Key(), src.Value()) - if err != nil { - return - } - } - err = src.Error() - if err != nil { - return - } - - n = w.tw.EntriesLen() - f, err = w.finish() - return -} - -// Opens table. It returns a cache handle, which should -// be released after use. -func (t *tOps) open(f *tFile) (ch *cache.Handle, err error) { - ch = t.cache.Get(0, uint64(f.fd.Num), func() (size int, value cache.Value) { - var r storage.Reader - r, err = t.s.stor.Open(f.fd) - if err != nil { - return 0, nil - } - - var bcache *cache.NamespaceGetter - if t.bcache != nil { - bcache = &cache.NamespaceGetter{Cache: t.bcache, NS: uint64(f.fd.Num)} - } - - var tr *table.Reader - tr, err = table.NewReader(r, f.size, f.fd, bcache, t.bpool, t.s.o.Options) - if err != nil { - r.Close() - return 0, nil - } - return 1, tr - - }) - if ch == nil && err == nil { - err = ErrClosed - } - return -} - -// Finds key/value pair whose key is greater than or equal to the -// given key. -func (t *tOps) find(f *tFile, key []byte, ro *opt.ReadOptions) (rkey, rvalue []byte, err error) { - ch, err := t.open(f) - if err != nil { - return nil, nil, err - } - defer ch.Release() - return ch.Value().(*table.Reader).Find(key, true, ro) -} - -// Finds key that is greater than or equal to the given key. -func (t *tOps) findKey(f *tFile, key []byte, ro *opt.ReadOptions) (rkey []byte, err error) { - ch, err := t.open(f) - if err != nil { - return nil, err - } - defer ch.Release() - return ch.Value().(*table.Reader).FindKey(key, true, ro) -} - -// Returns approximate offset of the given key. -func (t *tOps) offsetOf(f *tFile, key []byte) (offset int64, err error) { - ch, err := t.open(f) - if err != nil { - return - } - defer ch.Release() - return ch.Value().(*table.Reader).OffsetOf(key) -} - -// Creates an iterator from the given table. -func (t *tOps) newIterator(f *tFile, slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - ch, err := t.open(f) - if err != nil { - return iterator.NewEmptyIterator(err) - } - iter := ch.Value().(*table.Reader).NewIterator(slice, ro) - iter.SetReleaser(ch) - return iter -} - -// Removes table from persistent storage. It waits until -// no one use the the table. -func (t *tOps) remove(f *tFile) { - t.cache.Delete(0, uint64(f.fd.Num), func() { - if err := t.s.stor.Remove(f.fd); err != nil { - t.s.logf("table@remove removing @%d %q", f.fd.Num, err) - } else { - t.s.logf("table@remove removed @%d", f.fd.Num) - } - if t.bcache != nil { - t.bcache.EvictNS(uint64(f.fd.Num)) - } - }) -} - -// Closes the table ops instance. It will close all tables, -// regadless still used or not. -func (t *tOps) close() { - t.bpool.Close() - t.cache.Close() - if t.bcache != nil { - t.bcache.Close() - } -} - -// Creates new initialized table ops instance. -func newTableOps(s *session) *tOps { - var ( - cacher cache.Cacher - bcache *cache.Cache - bpool *util.BufferPool - ) - if s.o.GetOpenFilesCacheCapacity() > 0 { - cacher = cache.NewLRU(s.o.GetOpenFilesCacheCapacity()) - } - if !s.o.GetDisableBlockCache() { - var bcacher cache.Cacher - if s.o.GetBlockCacheCapacity() > 0 { - bcacher = cache.NewLRU(s.o.GetBlockCacheCapacity()) - } - bcache = cache.NewCache(bcacher) - } - if !s.o.GetDisableBufferPool() { - bpool = util.NewBufferPool(s.o.GetBlockSize() + 5) - } - return &tOps{ - s: s, - noSync: s.o.GetNoSync(), - cache: cache.NewCache(cacher), - bcache: bcache, - bpool: bpool, - } -} - -// tWriter wraps the table writer. It keep track of file descriptor -// and added key range. -type tWriter struct { - t *tOps - - fd storage.FileDesc - w storage.Writer - tw *table.Writer - - first, last []byte -} - -// Append key/value pair to the table. -func (w *tWriter) append(key, value []byte) error { - if w.first == nil { - w.first = append([]byte{}, key...) - } - w.last = append(w.last[:0], key...) - return w.tw.Append(key, value) -} - -// Returns true if the table is empty. -func (w *tWriter) empty() bool { - return w.first == nil -} - -// Closes the storage.Writer. -func (w *tWriter) close() { - if w.w != nil { - w.w.Close() - w.w = nil - } -} - -// Finalizes the table and returns table file. -func (w *tWriter) finish() (f *tFile, err error) { - defer w.close() - err = w.tw.Close() - if err != nil { - return - } - if !w.t.noSync { - err = w.w.Sync() - if err != nil { - return - } - } - f = newTableFile(w.fd, int64(w.tw.BytesLen()), internalKey(w.first), internalKey(w.last)) - return -} - -// Drops the table. -func (w *tWriter) drop() { - w.close() - w.t.s.stor.Remove(w.fd) - w.t.s.reuseFileNum(w.fd.Num) - w.tw = nil - w.first = nil - w.last = nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/table/reader.go b/vendor/github.com/syndtr/goleveldb/leveldb/table/reader.go deleted file mode 100644 index ae61bece9..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/table/reader.go +++ /dev/null @@ -1,1107 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package table - -import ( - "encoding/binary" - "fmt" - "io" - "sort" - "strings" - "sync" - - "github.com/golang/snappy" - - "github.com/syndtr/goleveldb/leveldb/cache" - "github.com/syndtr/goleveldb/leveldb/comparer" - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/filter" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/storage" - "github.com/syndtr/goleveldb/leveldb/util" -) - -var ( - ErrNotFound = errors.ErrNotFound - ErrReaderReleased = errors.New("leveldb/table: reader released") - ErrIterReleased = errors.New("leveldb/table: iterator released") -) - -type ErrCorrupted struct { - Pos int64 - Size int64 - Kind string - Reason string -} - -func (e *ErrCorrupted) Error() string { - return fmt.Sprintf("leveldb/table: corruption on %s (pos=%d): %s", e.Kind, e.Pos, e.Reason) -} - -func max(x, y int) int { - if x > y { - return x - } - return y -} - -type block struct { - bpool *util.BufferPool - bh blockHandle - data []byte - restartsLen int - restartsOffset int -} - -func (b *block) seek(cmp comparer.Comparer, rstart, rlimit int, key []byte) (index, offset int, err error) { - index = sort.Search(b.restartsLen-rstart-(b.restartsLen-rlimit), func(i int) bool { - offset := int(binary.LittleEndian.Uint32(b.data[b.restartsOffset+4*(rstart+i):])) - offset += 1 // shared always zero, since this is a restart point - v1, n1 := binary.Uvarint(b.data[offset:]) // key length - _, n2 := binary.Uvarint(b.data[offset+n1:]) // value length - m := offset + n1 + n2 - return cmp.Compare(b.data[m:m+int(v1)], key) > 0 - }) + rstart - 1 - if index < rstart { - // The smallest key is greater-than key sought. - index = rstart - } - offset = int(binary.LittleEndian.Uint32(b.data[b.restartsOffset+4*index:])) - return -} - -func (b *block) restartIndex(rstart, rlimit, offset int) int { - return sort.Search(b.restartsLen-rstart-(b.restartsLen-rlimit), func(i int) bool { - return int(binary.LittleEndian.Uint32(b.data[b.restartsOffset+4*(rstart+i):])) > offset - }) + rstart - 1 -} - -func (b *block) restartOffset(index int) int { - return int(binary.LittleEndian.Uint32(b.data[b.restartsOffset+4*index:])) -} - -func (b *block) entry(offset int) (key, value []byte, nShared, n int, err error) { - if offset >= b.restartsOffset { - if offset != b.restartsOffset { - err = &ErrCorrupted{Reason: "entries offset not aligned"} - } - return - } - v0, n0 := binary.Uvarint(b.data[offset:]) // Shared prefix length - v1, n1 := binary.Uvarint(b.data[offset+n0:]) // Key length - v2, n2 := binary.Uvarint(b.data[offset+n0+n1:]) // Value length - m := n0 + n1 + n2 - n = m + int(v1) + int(v2) - if n0 <= 0 || n1 <= 0 || n2 <= 0 || offset+n > b.restartsOffset { - err = &ErrCorrupted{Reason: "entries corrupted"} - return - } - key = b.data[offset+m : offset+m+int(v1)] - value = b.data[offset+m+int(v1) : offset+n] - nShared = int(v0) - return -} - -func (b *block) Release() { - b.bpool.Put(b.data) - b.bpool = nil - b.data = nil -} - -type dir int - -const ( - dirReleased dir = iota - 1 - dirSOI - dirEOI - dirBackward - dirForward -) - -type blockIter struct { - tr *Reader - block *block - blockReleaser util.Releaser - releaser util.Releaser - key, value []byte - offset int - // Previous offset, only filled by Next. - prevOffset int - prevNode []int - prevKeys []byte - restartIndex int - // Iterator direction. - dir dir - // Restart index slice range. - riStart int - riLimit int - // Offset slice range. - offsetStart int - offsetRealStart int - offsetLimit int - // Error. - err error -} - -func (i *blockIter) sErr(err error) { - i.err = err - i.key = nil - i.value = nil - i.prevNode = nil - i.prevKeys = nil -} - -func (i *blockIter) reset() { - if i.dir == dirBackward { - i.prevNode = i.prevNode[:0] - i.prevKeys = i.prevKeys[:0] - } - i.restartIndex = i.riStart - i.offset = i.offsetStart - i.dir = dirSOI - i.key = i.key[:0] - i.value = nil -} - -func (i *blockIter) isFirst() bool { - switch i.dir { - case dirForward: - return i.prevOffset == i.offsetRealStart - case dirBackward: - return len(i.prevNode) == 1 && i.restartIndex == i.riStart - } - return false -} - -func (i *blockIter) isLast() bool { - switch i.dir { - case dirForward, dirBackward: - return i.offset == i.offsetLimit - } - return false -} - -func (i *blockIter) First() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.dir == dirBackward { - i.prevNode = i.prevNode[:0] - i.prevKeys = i.prevKeys[:0] - } - i.dir = dirSOI - return i.Next() -} - -func (i *blockIter) Last() bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.dir == dirBackward { - i.prevNode = i.prevNode[:0] - i.prevKeys = i.prevKeys[:0] - } - i.dir = dirEOI - return i.Prev() -} - -func (i *blockIter) Seek(key []byte) bool { - if i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - ri, offset, err := i.block.seek(i.tr.cmp, i.riStart, i.riLimit, key) - if err != nil { - i.sErr(err) - return false - } - i.restartIndex = ri - i.offset = max(i.offsetStart, offset) - if i.dir == dirSOI || i.dir == dirEOI { - i.dir = dirForward - } - for i.Next() { - if i.tr.cmp.Compare(i.key, key) >= 0 { - return true - } - } - return false -} - -func (i *blockIter) Next() bool { - if i.dir == dirEOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - if i.dir == dirSOI { - i.restartIndex = i.riStart - i.offset = i.offsetStart - } else if i.dir == dirBackward { - i.prevNode = i.prevNode[:0] - i.prevKeys = i.prevKeys[:0] - } - for i.offset < i.offsetRealStart { - key, value, nShared, n, err := i.block.entry(i.offset) - if err != nil { - i.sErr(i.tr.fixErrCorruptedBH(i.block.bh, err)) - return false - } - if n == 0 { - i.dir = dirEOI - return false - } - i.key = append(i.key[:nShared], key...) - i.value = value - i.offset += n - } - if i.offset >= i.offsetLimit { - i.dir = dirEOI - if i.offset != i.offsetLimit { - i.sErr(i.tr.newErrCorruptedBH(i.block.bh, "entries offset not aligned")) - } - return false - } - key, value, nShared, n, err := i.block.entry(i.offset) - if err != nil { - i.sErr(i.tr.fixErrCorruptedBH(i.block.bh, err)) - return false - } - if n == 0 { - i.dir = dirEOI - return false - } - i.key = append(i.key[:nShared], key...) - i.value = value - i.prevOffset = i.offset - i.offset += n - i.dir = dirForward - return true -} - -func (i *blockIter) Prev() bool { - if i.dir == dirSOI || i.err != nil { - return false - } else if i.dir == dirReleased { - i.err = ErrIterReleased - return false - } - - var ri int - if i.dir == dirForward { - // Change direction. - i.offset = i.prevOffset - if i.offset == i.offsetRealStart { - i.dir = dirSOI - return false - } - ri = i.block.restartIndex(i.restartIndex, i.riLimit, i.offset) - i.dir = dirBackward - } else if i.dir == dirEOI { - // At the end of iterator. - i.restartIndex = i.riLimit - i.offset = i.offsetLimit - if i.offset == i.offsetRealStart { - i.dir = dirSOI - return false - } - ri = i.riLimit - 1 - i.dir = dirBackward - } else if len(i.prevNode) == 1 { - // This is the end of a restart range. - i.offset = i.prevNode[0] - i.prevNode = i.prevNode[:0] - if i.restartIndex == i.riStart { - i.dir = dirSOI - return false - } - i.restartIndex-- - ri = i.restartIndex - } else { - // In the middle of restart range, get from cache. - n := len(i.prevNode) - 3 - node := i.prevNode[n:] - i.prevNode = i.prevNode[:n] - // Get the key. - ko := node[0] - i.key = append(i.key[:0], i.prevKeys[ko:]...) - i.prevKeys = i.prevKeys[:ko] - // Get the value. - vo := node[1] - vl := vo + node[2] - i.value = i.block.data[vo:vl] - i.offset = vl - return true - } - // Build entries cache. - i.key = i.key[:0] - i.value = nil - offset := i.block.restartOffset(ri) - if offset == i.offset { - ri -= 1 - if ri < 0 { - i.dir = dirSOI - return false - } - offset = i.block.restartOffset(ri) - } - i.prevNode = append(i.prevNode, offset) - for { - key, value, nShared, n, err := i.block.entry(offset) - if err != nil { - i.sErr(i.tr.fixErrCorruptedBH(i.block.bh, err)) - return false - } - if offset >= i.offsetRealStart { - if i.value != nil { - // Appends 3 variables: - // 1. Previous keys offset - // 2. Value offset in the data block - // 3. Value length - i.prevNode = append(i.prevNode, len(i.prevKeys), offset-len(i.value), len(i.value)) - i.prevKeys = append(i.prevKeys, i.key...) - } - i.value = value - } - i.key = append(i.key[:nShared], key...) - offset += n - // Stop if target offset reached. - if offset >= i.offset { - if offset != i.offset { - i.sErr(i.tr.newErrCorruptedBH(i.block.bh, "entries offset not aligned")) - return false - } - - break - } - } - i.restartIndex = ri - i.offset = offset - return true -} - -func (i *blockIter) Key() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.key -} - -func (i *blockIter) Value() []byte { - if i.err != nil || i.dir <= dirEOI { - return nil - } - return i.value -} - -func (i *blockIter) Release() { - if i.dir != dirReleased { - i.tr = nil - i.block = nil - i.prevNode = nil - i.prevKeys = nil - i.key = nil - i.value = nil - i.dir = dirReleased - if i.blockReleaser != nil { - i.blockReleaser.Release() - i.blockReleaser = nil - } - if i.releaser != nil { - i.releaser.Release() - i.releaser = nil - } - } -} - -func (i *blockIter) SetReleaser(releaser util.Releaser) { - if i.dir == dirReleased { - panic(util.ErrReleased) - } - if i.releaser != nil && releaser != nil { - panic(util.ErrHasReleaser) - } - i.releaser = releaser -} - -func (i *blockIter) Valid() bool { - return i.err == nil && (i.dir == dirBackward || i.dir == dirForward) -} - -func (i *blockIter) Error() error { - return i.err -} - -type filterBlock struct { - bpool *util.BufferPool - data []byte - oOffset int - baseLg uint - filtersNum int -} - -func (b *filterBlock) contains(filter filter.Filter, offset uint64, key []byte) bool { - i := int(offset >> b.baseLg) - if i < b.filtersNum { - o := b.data[b.oOffset+i*4:] - n := int(binary.LittleEndian.Uint32(o)) - m := int(binary.LittleEndian.Uint32(o[4:])) - if n < m && m <= b.oOffset { - return filter.Contains(b.data[n:m], key) - } else if n == m { - return false - } - } - return true -} - -func (b *filterBlock) Release() { - b.bpool.Put(b.data) - b.bpool = nil - b.data = nil -} - -type indexIter struct { - *blockIter - tr *Reader - slice *util.Range - // Options - fillCache bool -} - -func (i *indexIter) Get() iterator.Iterator { - value := i.Value() - if value == nil { - return nil - } - dataBH, n := decodeBlockHandle(value) - if n == 0 { - return iterator.NewEmptyIterator(i.tr.newErrCorruptedBH(i.tr.indexBH, "bad data block handle")) - } - - var slice *util.Range - if i.slice != nil && (i.blockIter.isFirst() || i.blockIter.isLast()) { - slice = i.slice - } - return i.tr.getDataIterErr(dataBH, slice, i.tr.verifyChecksum, i.fillCache) -} - -// Reader is a table reader. -type Reader struct { - mu sync.RWMutex - fd storage.FileDesc - reader io.ReaderAt - cache *cache.NamespaceGetter - err error - bpool *util.BufferPool - // Options - o *opt.Options - cmp comparer.Comparer - filter filter.Filter - verifyChecksum bool - - dataEnd int64 - metaBH, indexBH, filterBH blockHandle - indexBlock *block - filterBlock *filterBlock -} - -func (r *Reader) blockKind(bh blockHandle) string { - switch bh.offset { - case r.metaBH.offset: - return "meta-block" - case r.indexBH.offset: - return "index-block" - case r.filterBH.offset: - if r.filterBH.length > 0 { - return "filter-block" - } - } - return "data-block" -} - -func (r *Reader) newErrCorrupted(pos, size int64, kind, reason string) error { - return &errors.ErrCorrupted{Fd: r.fd, Err: &ErrCorrupted{Pos: pos, Size: size, Kind: kind, Reason: reason}} -} - -func (r *Reader) newErrCorruptedBH(bh blockHandle, reason string) error { - return r.newErrCorrupted(int64(bh.offset), int64(bh.length), r.blockKind(bh), reason) -} - -func (r *Reader) fixErrCorruptedBH(bh blockHandle, err error) error { - if cerr, ok := err.(*ErrCorrupted); ok { - cerr.Pos = int64(bh.offset) - cerr.Size = int64(bh.length) - cerr.Kind = r.blockKind(bh) - return &errors.ErrCorrupted{Fd: r.fd, Err: cerr} - } - return err -} - -func (r *Reader) readRawBlock(bh blockHandle, verifyChecksum bool) ([]byte, error) { - data := r.bpool.Get(int(bh.length + blockTrailerLen)) - if _, err := r.reader.ReadAt(data, int64(bh.offset)); err != nil && err != io.EOF { - return nil, err - } - - if verifyChecksum { - n := bh.length + 1 - checksum0 := binary.LittleEndian.Uint32(data[n:]) - checksum1 := util.NewCRC(data[:n]).Value() - if checksum0 != checksum1 { - r.bpool.Put(data) - return nil, r.newErrCorruptedBH(bh, fmt.Sprintf("checksum mismatch, want=%#x got=%#x", checksum0, checksum1)) - } - } - - switch data[bh.length] { - case blockTypeNoCompression: - data = data[:bh.length] - case blockTypeSnappyCompression: - decLen, err := snappy.DecodedLen(data[:bh.length]) - if err != nil { - return nil, r.newErrCorruptedBH(bh, err.Error()) - } - decData := r.bpool.Get(decLen) - decData, err = snappy.Decode(decData, data[:bh.length]) - r.bpool.Put(data) - if err != nil { - r.bpool.Put(decData) - return nil, r.newErrCorruptedBH(bh, err.Error()) - } - data = decData - default: - r.bpool.Put(data) - return nil, r.newErrCorruptedBH(bh, fmt.Sprintf("unknown compression type %#x", data[bh.length])) - } - return data, nil -} - -func (r *Reader) readBlock(bh blockHandle, verifyChecksum bool) (*block, error) { - data, err := r.readRawBlock(bh, verifyChecksum) - if err != nil { - return nil, err - } - restartsLen := int(binary.LittleEndian.Uint32(data[len(data)-4:])) - b := &block{ - bpool: r.bpool, - bh: bh, - data: data, - restartsLen: restartsLen, - restartsOffset: len(data) - (restartsLen+1)*4, - } - return b, nil -} - -func (r *Reader) readBlockCached(bh blockHandle, verifyChecksum, fillCache bool) (*block, util.Releaser, error) { - if r.cache != nil { - var ( - err error - ch *cache.Handle - ) - if fillCache { - ch = r.cache.Get(bh.offset, func() (size int, value cache.Value) { - var b *block - b, err = r.readBlock(bh, verifyChecksum) - if err != nil { - return 0, nil - } - return cap(b.data), b - }) - } else { - ch = r.cache.Get(bh.offset, nil) - } - if ch != nil { - b, ok := ch.Value().(*block) - if !ok { - ch.Release() - return nil, nil, errors.New("leveldb/table: inconsistent block type") - } - return b, ch, err - } else if err != nil { - return nil, nil, err - } - } - - b, err := r.readBlock(bh, verifyChecksum) - return b, b, err -} - -func (r *Reader) readFilterBlock(bh blockHandle) (*filterBlock, error) { - data, err := r.readRawBlock(bh, true) - if err != nil { - return nil, err - } - n := len(data) - if n < 5 { - return nil, r.newErrCorruptedBH(bh, "too short") - } - m := n - 5 - oOffset := int(binary.LittleEndian.Uint32(data[m:])) - if oOffset > m { - return nil, r.newErrCorruptedBH(bh, "invalid data-offsets offset") - } - b := &filterBlock{ - bpool: r.bpool, - data: data, - oOffset: oOffset, - baseLg: uint(data[n-1]), - filtersNum: (m - oOffset) / 4, - } - return b, nil -} - -func (r *Reader) readFilterBlockCached(bh blockHandle, fillCache bool) (*filterBlock, util.Releaser, error) { - if r.cache != nil { - var ( - err error - ch *cache.Handle - ) - if fillCache { - ch = r.cache.Get(bh.offset, func() (size int, value cache.Value) { - var b *filterBlock - b, err = r.readFilterBlock(bh) - if err != nil { - return 0, nil - } - return cap(b.data), b - }) - } else { - ch = r.cache.Get(bh.offset, nil) - } - if ch != nil { - b, ok := ch.Value().(*filterBlock) - if !ok { - ch.Release() - return nil, nil, errors.New("leveldb/table: inconsistent block type") - } - return b, ch, err - } else if err != nil { - return nil, nil, err - } - } - - b, err := r.readFilterBlock(bh) - return b, b, err -} - -func (r *Reader) getIndexBlock(fillCache bool) (b *block, rel util.Releaser, err error) { - if r.indexBlock == nil { - return r.readBlockCached(r.indexBH, true, fillCache) - } - return r.indexBlock, util.NoopReleaser{}, nil -} - -func (r *Reader) getFilterBlock(fillCache bool) (*filterBlock, util.Releaser, error) { - if r.filterBlock == nil { - return r.readFilterBlockCached(r.filterBH, fillCache) - } - return r.filterBlock, util.NoopReleaser{}, nil -} - -func (r *Reader) newBlockIter(b *block, bReleaser util.Releaser, slice *util.Range, inclLimit bool) *blockIter { - bi := &blockIter{ - tr: r, - block: b, - blockReleaser: bReleaser, - // Valid key should never be nil. - key: make([]byte, 0), - dir: dirSOI, - riStart: 0, - riLimit: b.restartsLen, - offsetStart: 0, - offsetRealStart: 0, - offsetLimit: b.restartsOffset, - } - if slice != nil { - if slice.Start != nil { - if bi.Seek(slice.Start) { - bi.riStart = b.restartIndex(bi.restartIndex, b.restartsLen, bi.prevOffset) - bi.offsetStart = b.restartOffset(bi.riStart) - bi.offsetRealStart = bi.prevOffset - } else { - bi.riStart = b.restartsLen - bi.offsetStart = b.restartsOffset - bi.offsetRealStart = b.restartsOffset - } - } - if slice.Limit != nil { - if bi.Seek(slice.Limit) && (!inclLimit || bi.Next()) { - bi.offsetLimit = bi.prevOffset - bi.riLimit = bi.restartIndex + 1 - } - } - bi.reset() - if bi.offsetStart > bi.offsetLimit { - bi.sErr(errors.New("leveldb/table: invalid slice range")) - } - } - return bi -} - -func (r *Reader) getDataIter(dataBH blockHandle, slice *util.Range, verifyChecksum, fillCache bool) iterator.Iterator { - b, rel, err := r.readBlockCached(dataBH, verifyChecksum, fillCache) - if err != nil { - return iterator.NewEmptyIterator(err) - } - return r.newBlockIter(b, rel, slice, false) -} - -func (r *Reader) getDataIterErr(dataBH blockHandle, slice *util.Range, verifyChecksum, fillCache bool) iterator.Iterator { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - return iterator.NewEmptyIterator(r.err) - } - - return r.getDataIter(dataBH, slice, verifyChecksum, fillCache) -} - -// NewIterator creates an iterator from the table. -// -// Slice allows slicing the iterator to only contains keys in the given -// range. A nil Range.Start is treated as a key before all keys in the -// table. And a nil Range.Limit is treated as a key after all keys in -// the table. -// -// The returned iterator is not goroutine-safe and should be released -// when not used. -// -// Also read Iterator documentation of the leveldb/iterator package. -func (r *Reader) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - return iterator.NewEmptyIterator(r.err) - } - - fillCache := !ro.GetDontFillCache() - indexBlock, rel, err := r.getIndexBlock(fillCache) - if err != nil { - return iterator.NewEmptyIterator(err) - } - index := &indexIter{ - blockIter: r.newBlockIter(indexBlock, rel, slice, true), - tr: r, - slice: slice, - fillCache: !ro.GetDontFillCache(), - } - return iterator.NewIndexedIterator(index, opt.GetStrict(r.o, ro, opt.StrictReader)) -} - -func (r *Reader) find(key []byte, filtered bool, ro *opt.ReadOptions, noValue bool) (rkey, value []byte, err error) { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - err = r.err - return - } - - indexBlock, rel, err := r.getIndexBlock(true) - if err != nil { - return - } - defer rel.Release() - - index := r.newBlockIter(indexBlock, nil, nil, true) - defer index.Release() - if !index.Seek(key) { - err = index.Error() - if err == nil { - err = ErrNotFound - } - return - } - dataBH, n := decodeBlockHandle(index.Value()) - if n == 0 { - r.err = r.newErrCorruptedBH(r.indexBH, "bad data block handle") - return - } - if filtered && r.filter != nil { - filterBlock, frel, ferr := r.getFilterBlock(true) - if ferr == nil { - if !filterBlock.contains(r.filter, dataBH.offset, key) { - frel.Release() - return nil, nil, ErrNotFound - } - frel.Release() - } else if !errors.IsCorrupted(ferr) { - err = ferr - return - } - } - data := r.getDataIter(dataBH, nil, r.verifyChecksum, !ro.GetDontFillCache()) - defer data.Release() - if !data.Seek(key) { - err = data.Error() - if err == nil { - err = ErrNotFound - } - return - } - // Don't use block buffer, no need to copy the buffer. - rkey = data.Key() - if !noValue { - if r.bpool == nil { - value = data.Value() - } else { - // Use block buffer, and since the buffer will be recycled, the buffer - // need to be copied. - value = append([]byte{}, data.Value()...) - } - } - return -} - -// Find finds key/value pair whose key is greater than or equal to the -// given key. It returns ErrNotFound if the table doesn't contain -// such pair. -// If filtered is true then the nearest 'block' will be checked against -// 'filter data' (if present) and will immediately return ErrNotFound if -// 'filter data' indicates that such pair doesn't exist. -// -// The caller may modify the contents of the returned slice as it is its -// own copy. -// It is safe to modify the contents of the argument after Find returns. -func (r *Reader) Find(key []byte, filtered bool, ro *opt.ReadOptions) (rkey, value []byte, err error) { - return r.find(key, filtered, ro, false) -} - -// Find finds key that is greater than or equal to the given key. -// It returns ErrNotFound if the table doesn't contain such key. -// If filtered is true then the nearest 'block' will be checked against -// 'filter data' (if present) and will immediately return ErrNotFound if -// 'filter data' indicates that such key doesn't exist. -// -// The caller may modify the contents of the returned slice as it is its -// own copy. -// It is safe to modify the contents of the argument after Find returns. -func (r *Reader) FindKey(key []byte, filtered bool, ro *opt.ReadOptions) (rkey []byte, err error) { - rkey, _, err = r.find(key, filtered, ro, true) - return -} - -// Get gets the value for the given key. It returns errors.ErrNotFound -// if the table does not contain the key. -// -// The caller may modify the contents of the returned slice as it is its -// own copy. -// It is safe to modify the contents of the argument after Find returns. -func (r *Reader) Get(key []byte, ro *opt.ReadOptions) (value []byte, err error) { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - err = r.err - return - } - - rkey, value, err := r.find(key, false, ro, false) - if err == nil && r.cmp.Compare(rkey, key) != 0 { - value = nil - err = ErrNotFound - } - return -} - -// OffsetOf returns approximate offset for the given key. -// -// It is safe to modify the contents of the argument after Get returns. -func (r *Reader) OffsetOf(key []byte) (offset int64, err error) { - r.mu.RLock() - defer r.mu.RUnlock() - - if r.err != nil { - err = r.err - return - } - - indexBlock, rel, err := r.readBlockCached(r.indexBH, true, true) - if err != nil { - return - } - defer rel.Release() - - index := r.newBlockIter(indexBlock, nil, nil, true) - defer index.Release() - if index.Seek(key) { - dataBH, n := decodeBlockHandle(index.Value()) - if n == 0 { - r.err = r.newErrCorruptedBH(r.indexBH, "bad data block handle") - return - } - offset = int64(dataBH.offset) - return - } - err = index.Error() - if err == nil { - offset = r.dataEnd - } - return -} - -// Release implements util.Releaser. -// It also close the file if it is an io.Closer. -func (r *Reader) Release() { - r.mu.Lock() - defer r.mu.Unlock() - - if closer, ok := r.reader.(io.Closer); ok { - closer.Close() - } - if r.indexBlock != nil { - r.indexBlock.Release() - r.indexBlock = nil - } - if r.filterBlock != nil { - r.filterBlock.Release() - r.filterBlock = nil - } - r.reader = nil - r.cache = nil - r.bpool = nil - r.err = ErrReaderReleased -} - -// NewReader creates a new initialized table reader for the file. -// The fi, cache and bpool is optional and can be nil. -// -// The returned table reader instance is goroutine-safe. -func NewReader(f io.ReaderAt, size int64, fd storage.FileDesc, cache *cache.NamespaceGetter, bpool *util.BufferPool, o *opt.Options) (*Reader, error) { - if f == nil { - return nil, errors.New("leveldb/table: nil file") - } - - r := &Reader{ - fd: fd, - reader: f, - cache: cache, - bpool: bpool, - o: o, - cmp: o.GetComparer(), - verifyChecksum: o.GetStrict(opt.StrictBlockChecksum), - } - - if size < footerLen { - r.err = r.newErrCorrupted(0, size, "table", "too small") - return r, nil - } - - footerPos := size - footerLen - var footer [footerLen]byte - if _, err := r.reader.ReadAt(footer[:], footerPos); err != nil && err != io.EOF { - return nil, err - } - if string(footer[footerLen-len(magic):footerLen]) != magic { - r.err = r.newErrCorrupted(footerPos, footerLen, "table-footer", "bad magic number") - return r, nil - } - - var n int - // Decode the metaindex block handle. - r.metaBH, n = decodeBlockHandle(footer[:]) - if n == 0 { - r.err = r.newErrCorrupted(footerPos, footerLen, "table-footer", "bad metaindex block handle") - return r, nil - } - - // Decode the index block handle. - r.indexBH, n = decodeBlockHandle(footer[n:]) - if n == 0 { - r.err = r.newErrCorrupted(footerPos, footerLen, "table-footer", "bad index block handle") - return r, nil - } - - // Read metaindex block. - metaBlock, err := r.readBlock(r.metaBH, true) - if err != nil { - if errors.IsCorrupted(err) { - r.err = err - return r, nil - } else { - return nil, err - } - } - - // Set data end. - r.dataEnd = int64(r.metaBH.offset) - - // Read metaindex. - metaIter := r.newBlockIter(metaBlock, nil, nil, true) - for metaIter.Next() { - key := string(metaIter.Key()) - if !strings.HasPrefix(key, "filter.") { - continue - } - fn := key[7:] - if f0 := o.GetFilter(); f0 != nil && f0.Name() == fn { - r.filter = f0 - } else { - for _, f0 := range o.GetAltFilters() { - if f0.Name() == fn { - r.filter = f0 - break - } - } - } - if r.filter != nil { - filterBH, n := decodeBlockHandle(metaIter.Value()) - if n == 0 { - continue - } - r.filterBH = filterBH - // Update data end. - r.dataEnd = int64(filterBH.offset) - break - } - } - metaIter.Release() - metaBlock.Release() - - // Cache index and filter block locally, since we don't have global cache. - if cache == nil { - r.indexBlock, err = r.readBlock(r.indexBH, true) - if err != nil { - if errors.IsCorrupted(err) { - r.err = err - return r, nil - } else { - return nil, err - } - } - if r.filter != nil { - r.filterBlock, err = r.readFilterBlock(r.filterBH) - if err != nil { - if !errors.IsCorrupted(err) { - return nil, err - } - - // Don't use filter then. - r.filter = nil - } - } - } - - return r, nil -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/table/table.go b/vendor/github.com/syndtr/goleveldb/leveldb/table/table.go deleted file mode 100644 index beacdc1f0..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/table/table.go +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package table allows read and write sorted key/value. -package table - -import ( - "encoding/binary" -) - -/* -Table: - -Table is consist of one or more data blocks, an optional filter block -a metaindex block, an index block and a table footer. Metaindex block -is a special block used to keep parameters of the table, such as filter -block name and its block handle. Index block is a special block used to -keep record of data blocks offset and length, index block use one as -restart interval. The key used by index block are the last key of preceding -block, shorter separator of adjacent blocks or shorter successor of the -last key of the last block. Filter block is an optional block contains -sequence of filter data generated by a filter generator. - -Table data structure: - + optional - / - +--------------+--------------+--------------+------+-------+-----------------+-------------+--------+ - | data block 1 | ... | data block n | filter block | metaindex block | index block | footer | - +--------------+--------------+--------------+--------------+-----------------+-------------+--------+ - - Each block followed by a 5-bytes trailer contains compression type and checksum. - -Table block trailer: - - +---------------------------+-------------------+ - | compression type (1-byte) | checksum (4-byte) | - +---------------------------+-------------------+ - - The checksum is a CRC-32 computed using Castagnoli's polynomial. Compression - type also included in the checksum. - -Table footer: - - +------------------- 40-bytes -------------------+ - / \ - +------------------------+--------------------+------+-----------------+ - | metaindex block handle / index block handle / ---- | magic (8-bytes) | - +------------------------+--------------------+------+-----------------+ - - The magic are first 64-bit of SHA-1 sum of "http://code.google.com/p/leveldb/". - -NOTE: All fixed-length integer are little-endian. -*/ - -/* -Block: - -Block is consist of one or more key/value entries and a block trailer. -Block entry shares key prefix with its preceding key until a restart -point reached. A block should contains at least one restart point. -First restart point are always zero. - -Block data structure: - - + restart point + restart point (depends on restart interval) - / / - +---------------+---------------+---------------+---------------+---------+ - | block entry 1 | block entry 2 | ... | block entry n | trailer | - +---------------+---------------+---------------+---------------+---------+ - -Key/value entry: - - +---- key len ----+ - / \ - +-------+---------+-----------+---------+--------------------+--------------+----------------+ - | shared (varint) | not shared (varint) | value len (varint) | key (varlen) | value (varlen) | - +-----------------+---------------------+--------------------+--------------+----------------+ - - Block entry shares key prefix with its preceding key: - Conditions: - restart_interval=2 - entry one : key=deck,value=v1 - entry two : key=dock,value=v2 - entry three: key=duck,value=v3 - The entries will be encoded as follow: - - + restart point (offset=0) + restart point (offset=16) - / / - +-----+-----+-----+----------+--------+-----+-----+-----+---------+--------+-----+-----+-----+----------+--------+ - | 0 | 4 | 2 | "deck" | "v1" | 1 | 3 | 2 | "ock" | "v2" | 0 | 4 | 2 | "duck" | "v3" | - +-----+-----+-----+----------+--------+-----+-----+-----+---------+--------+-----+-----+-----+----------+--------+ - \ / \ / \ / - +----------- entry one -----------+ +----------- entry two ----------+ +---------- entry three ----------+ - - The block trailer will contains two restart points: - - +------------+-----------+--------+ - | 0 | 16 | 2 | - +------------+-----------+---+----+ - \ / \ - +-- restart points --+ + restart points length - -Block trailer: - - +-- 4-bytes --+ - / \ - +-----------------+-----------------+-----------------+------------------------------+ - | restart point 1 | .... | restart point n | restart points len (4-bytes) | - +-----------------+-----------------+-----------------+------------------------------+ - - -NOTE: All fixed-length integer are little-endian. -*/ - -/* -Filter block: - -Filter block consist of one or more filter data and a filter block trailer. -The trailer contains filter data offsets, a trailer offset and a 1-byte base Lg. - -Filter block data structure: - - + offset 1 + offset 2 + offset n + trailer offset - / / / / - +---------------+---------------+---------------+---------+ - | filter data 1 | ... | filter data n | trailer | - +---------------+---------------+---------------+---------+ - -Filter block trailer: - - +- 4-bytes -+ - / \ - +---------------+---------------+---------------+-------------------------------+------------------+ - | data 1 offset | .... | data n offset | data-offsets offset (4-bytes) | base Lg (1-byte) | - +-------------- +---------------+---------------+-------------------------------+------------------+ - - -NOTE: All fixed-length integer are little-endian. -*/ - -const ( - blockTrailerLen = 5 - footerLen = 48 - - magic = "\x57\xfb\x80\x8b\x24\x75\x47\xdb" - - // The block type gives the per-block compression format. - // These constants are part of the file format and should not be changed. - blockTypeNoCompression = 0 - blockTypeSnappyCompression = 1 - - // Generate new filter every 2KB of data - filterBaseLg = 11 - filterBase = 1 << filterBaseLg -) - -type blockHandle struct { - offset, length uint64 -} - -func decodeBlockHandle(src []byte) (blockHandle, int) { - offset, n := binary.Uvarint(src) - length, m := binary.Uvarint(src[n:]) - if n == 0 || m == 0 { - return blockHandle{}, 0 - } - return blockHandle{offset, length}, n + m -} - -func encodeBlockHandle(dst []byte, b blockHandle) int { - n := binary.PutUvarint(dst, b.offset) - m := binary.PutUvarint(dst[n:], b.length) - return n + m -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/table/writer.go b/vendor/github.com/syndtr/goleveldb/leveldb/table/writer.go deleted file mode 100644 index 274dee6da..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/table/writer.go +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package table - -import ( - "encoding/binary" - "errors" - "fmt" - "io" - - "github.com/golang/snappy" - - "github.com/syndtr/goleveldb/leveldb/comparer" - "github.com/syndtr/goleveldb/leveldb/filter" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" -) - -func sharedPrefixLen(a, b []byte) int { - i, n := 0, len(a) - if n > len(b) { - n = len(b) - } - for i < n && a[i] == b[i] { - i++ - } - return i -} - -type blockWriter struct { - restartInterval int - buf util.Buffer - nEntries int - prevKey []byte - restarts []uint32 - scratch []byte -} - -func (w *blockWriter) append(key, value []byte) { - nShared := 0 - if w.nEntries%w.restartInterval == 0 { - w.restarts = append(w.restarts, uint32(w.buf.Len())) - } else { - nShared = sharedPrefixLen(w.prevKey, key) - } - n := binary.PutUvarint(w.scratch[0:], uint64(nShared)) - n += binary.PutUvarint(w.scratch[n:], uint64(len(key)-nShared)) - n += binary.PutUvarint(w.scratch[n:], uint64(len(value))) - w.buf.Write(w.scratch[:n]) - w.buf.Write(key[nShared:]) - w.buf.Write(value) - w.prevKey = append(w.prevKey[:0], key...) - w.nEntries++ -} - -func (w *blockWriter) finish() { - // Write restarts entry. - if w.nEntries == 0 { - // Must have at least one restart entry. - w.restarts = append(w.restarts, 0) - } - w.restarts = append(w.restarts, uint32(len(w.restarts))) - for _, x := range w.restarts { - buf4 := w.buf.Alloc(4) - binary.LittleEndian.PutUint32(buf4, x) - } -} - -func (w *blockWriter) reset() { - w.buf.Reset() - w.nEntries = 0 - w.restarts = w.restarts[:0] -} - -func (w *blockWriter) bytesLen() int { - restartsLen := len(w.restarts) - if restartsLen == 0 { - restartsLen = 1 - } - return w.buf.Len() + 4*restartsLen + 4 -} - -type filterWriter struct { - generator filter.FilterGenerator - buf util.Buffer - nKeys int - offsets []uint32 -} - -func (w *filterWriter) add(key []byte) { - if w.generator == nil { - return - } - w.generator.Add(key) - w.nKeys++ -} - -func (w *filterWriter) flush(offset uint64) { - if w.generator == nil { - return - } - for x := int(offset / filterBase); x > len(w.offsets); { - w.generate() - } -} - -func (w *filterWriter) finish() { - if w.generator == nil { - return - } - // Generate last keys. - - if w.nKeys > 0 { - w.generate() - } - w.offsets = append(w.offsets, uint32(w.buf.Len())) - for _, x := range w.offsets { - buf4 := w.buf.Alloc(4) - binary.LittleEndian.PutUint32(buf4, x) - } - w.buf.WriteByte(filterBaseLg) -} - -func (w *filterWriter) generate() { - // Record offset. - w.offsets = append(w.offsets, uint32(w.buf.Len())) - // Generate filters. - if w.nKeys > 0 { - w.generator.Generate(&w.buf) - w.nKeys = 0 - } -} - -// Writer is a table writer. -type Writer struct { - writer io.Writer - err error - // Options - cmp comparer.Comparer - filter filter.Filter - compression opt.Compression - blockSize int - - dataBlock blockWriter - indexBlock blockWriter - filterBlock filterWriter - pendingBH blockHandle - offset uint64 - nEntries int - // Scratch allocated enough for 5 uvarint. Block writer should not use - // first 20-bytes since it will be used to encode block handle, which - // then passed to the block writer itself. - scratch [50]byte - comparerScratch []byte - compressionScratch []byte -} - -func (w *Writer) writeBlock(buf *util.Buffer, compression opt.Compression) (bh blockHandle, err error) { - // Compress the buffer if necessary. - var b []byte - if compression == opt.SnappyCompression { - // Allocate scratch enough for compression and block trailer. - if n := snappy.MaxEncodedLen(buf.Len()) + blockTrailerLen; len(w.compressionScratch) < n { - w.compressionScratch = make([]byte, n) - } - compressed := snappy.Encode(w.compressionScratch, buf.Bytes()) - n := len(compressed) - b = compressed[:n+blockTrailerLen] - b[n] = blockTypeSnappyCompression - } else { - tmp := buf.Alloc(blockTrailerLen) - tmp[0] = blockTypeNoCompression - b = buf.Bytes() - } - - // Calculate the checksum. - n := len(b) - 4 - checksum := util.NewCRC(b[:n]).Value() - binary.LittleEndian.PutUint32(b[n:], checksum) - - // Write the buffer to the file. - _, err = w.writer.Write(b) - if err != nil { - return - } - bh = blockHandle{w.offset, uint64(len(b) - blockTrailerLen)} - w.offset += uint64(len(b)) - return -} - -func (w *Writer) flushPendingBH(key []byte) { - if w.pendingBH.length == 0 { - return - } - var separator []byte - if len(key) == 0 { - separator = w.cmp.Successor(w.comparerScratch[:0], w.dataBlock.prevKey) - } else { - separator = w.cmp.Separator(w.comparerScratch[:0], w.dataBlock.prevKey, key) - } - if separator == nil { - separator = w.dataBlock.prevKey - } else { - w.comparerScratch = separator - } - n := encodeBlockHandle(w.scratch[:20], w.pendingBH) - // Append the block handle to the index block. - w.indexBlock.append(separator, w.scratch[:n]) - // Reset prev key of the data block. - w.dataBlock.prevKey = w.dataBlock.prevKey[:0] - // Clear pending block handle. - w.pendingBH = blockHandle{} -} - -func (w *Writer) finishBlock() error { - w.dataBlock.finish() - bh, err := w.writeBlock(&w.dataBlock.buf, w.compression) - if err != nil { - return err - } - w.pendingBH = bh - // Reset the data block. - w.dataBlock.reset() - // Flush the filter block. - w.filterBlock.flush(w.offset) - return nil -} - -// Append appends key/value pair to the table. The keys passed must -// be in increasing order. -// -// It is safe to modify the contents of the arguments after Append returns. -func (w *Writer) Append(key, value []byte) error { - if w.err != nil { - return w.err - } - if w.nEntries > 0 && w.cmp.Compare(w.dataBlock.prevKey, key) >= 0 { - w.err = fmt.Errorf("leveldb/table: Writer: keys are not in increasing order: %q, %q", w.dataBlock.prevKey, key) - return w.err - } - - w.flushPendingBH(key) - // Append key/value pair to the data block. - w.dataBlock.append(key, value) - // Add key to the filter block. - w.filterBlock.add(key) - - // Finish the data block if block size target reached. - if w.dataBlock.bytesLen() >= w.blockSize { - if err := w.finishBlock(); err != nil { - w.err = err - return w.err - } - } - w.nEntries++ - return nil -} - -// BlocksLen returns number of blocks written so far. -func (w *Writer) BlocksLen() int { - n := w.indexBlock.nEntries - if w.pendingBH.length > 0 { - // Includes the pending block. - n++ - } - return n -} - -// EntriesLen returns number of entries added so far. -func (w *Writer) EntriesLen() int { - return w.nEntries -} - -// BytesLen returns number of bytes written so far. -func (w *Writer) BytesLen() int { - return int(w.offset) -} - -// Close will finalize the table. Calling Append is not possible -// after Close, but calling BlocksLen, EntriesLen and BytesLen -// is still possible. -func (w *Writer) Close() error { - if w.err != nil { - return w.err - } - - // Write the last data block. Or empty data block if there - // aren't any data blocks at all. - if w.dataBlock.nEntries > 0 || w.nEntries == 0 { - if err := w.finishBlock(); err != nil { - w.err = err - return w.err - } - } - w.flushPendingBH(nil) - - // Write the filter block. - var filterBH blockHandle - w.filterBlock.finish() - if buf := &w.filterBlock.buf; buf.Len() > 0 { - filterBH, w.err = w.writeBlock(buf, opt.NoCompression) - if w.err != nil { - return w.err - } - } - - // Write the metaindex block. - if filterBH.length > 0 { - key := []byte("filter." + w.filter.Name()) - n := encodeBlockHandle(w.scratch[:20], filterBH) - w.dataBlock.append(key, w.scratch[:n]) - } - w.dataBlock.finish() - metaindexBH, err := w.writeBlock(&w.dataBlock.buf, w.compression) - if err != nil { - w.err = err - return w.err - } - - // Write the index block. - w.indexBlock.finish() - indexBH, err := w.writeBlock(&w.indexBlock.buf, w.compression) - if err != nil { - w.err = err - return w.err - } - - // Write the table footer. - footer := w.scratch[:footerLen] - for i := range footer { - footer[i] = 0 - } - n := encodeBlockHandle(footer, metaindexBH) - encodeBlockHandle(footer[n:], indexBH) - copy(footer[footerLen-len(magic):], magic) - if _, err := w.writer.Write(footer); err != nil { - w.err = err - return w.err - } - w.offset += footerLen - - w.err = errors.New("leveldb/table: writer is closed") - return nil -} - -// NewWriter creates a new initialized table writer for the file. -// -// Table writer is not goroutine-safe. -func NewWriter(f io.Writer, o *opt.Options) *Writer { - w := &Writer{ - writer: f, - cmp: o.GetComparer(), - filter: o.GetFilter(), - compression: o.GetCompression(), - blockSize: o.GetBlockSize(), - comparerScratch: make([]byte, 0), - } - // data block - w.dataBlock.restartInterval = o.GetBlockRestartInterval() - // The first 20-bytes are used for encoding block handle. - w.dataBlock.scratch = w.scratch[20:] - // index block - w.indexBlock.restartInterval = 1 - w.indexBlock.scratch = w.scratch[20:] - // filter block - if w.filter != nil { - w.filterBlock.generator = w.filter.NewGenerator() - w.filterBlock.flush(0) - } - return w -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/util.go b/vendor/github.com/syndtr/goleveldb/leveldb/util.go deleted file mode 100644 index 3b663d1cc..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/util.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "sort" - - "github.com/syndtr/goleveldb/leveldb/storage" -) - -func shorten(str string) string { - if len(str) <= 8 { - return str - } - return str[:3] + ".." + str[len(str)-3:] -} - -var bunits = [...]string{"", "Ki", "Mi", "Gi"} - -func shortenb(bytes int) string { - i := 0 - for ; bytes > 1024 && i < 4; i++ { - bytes /= 1024 - } - return fmt.Sprintf("%d%sB", bytes, bunits[i]) -} - -func sshortenb(bytes int) string { - if bytes == 0 { - return "~" - } - sign := "+" - if bytes < 0 { - sign = "-" - bytes *= -1 - } - i := 0 - for ; bytes > 1024 && i < 4; i++ { - bytes /= 1024 - } - return fmt.Sprintf("%s%d%sB", sign, bytes, bunits[i]) -} - -func sint(x int) string { - if x == 0 { - return "~" - } - sign := "+" - if x < 0 { - sign = "-" - x *= -1 - } - return fmt.Sprintf("%s%d", sign, x) -} - -func minInt(a, b int) int { - if a < b { - return a - } - return b -} - -func maxInt(a, b int) int { - if a > b { - return a - } - return b -} - -type fdSorter []storage.FileDesc - -func (p fdSorter) Len() int { - return len(p) -} - -func (p fdSorter) Less(i, j int) bool { - return p[i].Num < p[j].Num -} - -func (p fdSorter) Swap(i, j int) { - p[i], p[j] = p[j], p[i] -} - -func sortFds(fds []storage.FileDesc) { - sort.Sort(fdSorter(fds)) -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/util/buffer.go b/vendor/github.com/syndtr/goleveldb/leveldb/util/buffer.go deleted file mode 100644 index 21de24255..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/util/buffer.go +++ /dev/null @@ -1,293 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package util - -// This a copy of Go std bytes.Buffer with some modification -// and some features stripped. - -import ( - "bytes" - "io" -) - -// A Buffer is a variable-sized buffer of bytes with Read and Write methods. -// The zero value for Buffer is an empty buffer ready to use. -type Buffer struct { - buf []byte // contents are the bytes buf[off : len(buf)] - off int // read at &buf[off], write at &buf[len(buf)] - bootstrap [64]byte // memory to hold first slice; helps small buffers (Printf) avoid allocation. -} - -// Bytes returns a slice of the contents of the unread portion of the buffer; -// len(b.Bytes()) == b.Len(). If the caller changes the contents of the -// returned slice, the contents of the buffer will change provided there -// are no intervening method calls on the Buffer. -func (b *Buffer) Bytes() []byte { return b.buf[b.off:] } - -// String returns the contents of the unread portion of the buffer -// as a string. If the Buffer is a nil pointer, it returns "". -func (b *Buffer) String() string { - if b == nil { - // Special case, useful in debugging. - return "" - } - return string(b.buf[b.off:]) -} - -// Len returns the number of bytes of the unread portion of the buffer; -// b.Len() == len(b.Bytes()). -func (b *Buffer) Len() int { return len(b.buf) - b.off } - -// Truncate discards all but the first n unread bytes from the buffer. -// It panics if n is negative or greater than the length of the buffer. -func (b *Buffer) Truncate(n int) { - switch { - case n < 0 || n > b.Len(): - panic("leveldb/util.Buffer: truncation out of range") - case n == 0: - // Reuse buffer space. - b.off = 0 - } - b.buf = b.buf[0 : b.off+n] -} - -// Reset resets the buffer so it has no content. -// b.Reset() is the same as b.Truncate(0). -func (b *Buffer) Reset() { b.Truncate(0) } - -// grow grows the buffer to guarantee space for n more bytes. -// It returns the index where bytes should be written. -// If the buffer can't grow it will panic with bytes.ErrTooLarge. -func (b *Buffer) grow(n int) int { - m := b.Len() - // If buffer is empty, reset to recover space. - if m == 0 && b.off != 0 { - b.Truncate(0) - } - if len(b.buf)+n > cap(b.buf) { - var buf []byte - if b.buf == nil && n <= len(b.bootstrap) { - buf = b.bootstrap[0:] - } else if m+n <= cap(b.buf)/2 { - // We can slide things down instead of allocating a new - // slice. We only need m+n <= cap(b.buf) to slide, but - // we instead let capacity get twice as large so we - // don't spend all our time copying. - copy(b.buf[:], b.buf[b.off:]) - buf = b.buf[:m] - } else { - // not enough space anywhere - buf = makeSlice(2*cap(b.buf) + n) - copy(buf, b.buf[b.off:]) - } - b.buf = buf - b.off = 0 - } - b.buf = b.buf[0 : b.off+m+n] - return b.off + m -} - -// Alloc allocs n bytes of slice from the buffer, growing the buffer as -// needed. If n is negative, Alloc will panic. -// If the buffer can't grow it will panic with bytes.ErrTooLarge. -func (b *Buffer) Alloc(n int) []byte { - if n < 0 { - panic("leveldb/util.Buffer.Alloc: negative count") - } - m := b.grow(n) - return b.buf[m:] -} - -// Grow grows the buffer's capacity, if necessary, to guarantee space for -// another n bytes. After Grow(n), at least n bytes can be written to the -// buffer without another allocation. -// If n is negative, Grow will panic. -// If the buffer can't grow it will panic with bytes.ErrTooLarge. -func (b *Buffer) Grow(n int) { - if n < 0 { - panic("leveldb/util.Buffer.Grow: negative count") - } - m := b.grow(n) - b.buf = b.buf[0:m] -} - -// Write appends the contents of p to the buffer, growing the buffer as -// needed. The return value n is the length of p; err is always nil. If the -// buffer becomes too large, Write will panic with bytes.ErrTooLarge. -func (b *Buffer) Write(p []byte) (n int, err error) { - m := b.grow(len(p)) - return copy(b.buf[m:], p), nil -} - -// MinRead is the minimum slice size passed to a Read call by -// Buffer.ReadFrom. As long as the Buffer has at least MinRead bytes beyond -// what is required to hold the contents of r, ReadFrom will not grow the -// underlying buffer. -const MinRead = 512 - -// ReadFrom reads data from r until EOF and appends it to the buffer, growing -// the buffer as needed. The return value n is the number of bytes read. Any -// error except io.EOF encountered during the read is also returned. If the -// buffer becomes too large, ReadFrom will panic with bytes.ErrTooLarge. -func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error) { - // If buffer is empty, reset to recover space. - if b.off >= len(b.buf) { - b.Truncate(0) - } - for { - if free := cap(b.buf) - len(b.buf); free < MinRead { - // not enough space at end - newBuf := b.buf - if b.off+free < MinRead { - // not enough space using beginning of buffer; - // double buffer capacity - newBuf = makeSlice(2*cap(b.buf) + MinRead) - } - copy(newBuf, b.buf[b.off:]) - b.buf = newBuf[:len(b.buf)-b.off] - b.off = 0 - } - m, e := r.Read(b.buf[len(b.buf):cap(b.buf)]) - b.buf = b.buf[0 : len(b.buf)+m] - n += int64(m) - if e == io.EOF { - break - } - if e != nil { - return n, e - } - } - return n, nil // err is EOF, so return nil explicitly -} - -// makeSlice allocates a slice of size n. If the allocation fails, it panics -// with bytes.ErrTooLarge. -func makeSlice(n int) []byte { - // If the make fails, give a known error. - defer func() { - if recover() != nil { - panic(bytes.ErrTooLarge) - } - }() - return make([]byte, n) -} - -// WriteTo writes data to w until the buffer is drained or an error occurs. -// The return value n is the number of bytes written; it always fits into an -// int, but it is int64 to match the io.WriterTo interface. Any error -// encountered during the write is also returned. -func (b *Buffer) WriteTo(w io.Writer) (n int64, err error) { - if b.off < len(b.buf) { - nBytes := b.Len() - m, e := w.Write(b.buf[b.off:]) - if m > nBytes { - panic("leveldb/util.Buffer.WriteTo: invalid Write count") - } - b.off += m - n = int64(m) - if e != nil { - return n, e - } - // all bytes should have been written, by definition of - // Write method in io.Writer - if m != nBytes { - return n, io.ErrShortWrite - } - } - // Buffer is now empty; reset. - b.Truncate(0) - return -} - -// WriteByte appends the byte c to the buffer, growing the buffer as needed. -// The returned error is always nil, but is included to match bufio.Writer's -// WriteByte. If the buffer becomes too large, WriteByte will panic with -// bytes.ErrTooLarge. -func (b *Buffer) WriteByte(c byte) error { - m := b.grow(1) - b.buf[m] = c - return nil -} - -// Read reads the next len(p) bytes from the buffer or until the buffer -// is drained. The return value n is the number of bytes read. If the -// buffer has no data to return, err is io.EOF (unless len(p) is zero); -// otherwise it is nil. -func (b *Buffer) Read(p []byte) (n int, err error) { - if b.off >= len(b.buf) { - // Buffer is empty, reset to recover space. - b.Truncate(0) - if len(p) == 0 { - return - } - return 0, io.EOF - } - n = copy(p, b.buf[b.off:]) - b.off += n - return -} - -// Next returns a slice containing the next n bytes from the buffer, -// advancing the buffer as if the bytes had been returned by Read. -// If there are fewer than n bytes in the buffer, Next returns the entire buffer. -// The slice is only valid until the next call to a read or write method. -func (b *Buffer) Next(n int) []byte { - m := b.Len() - if n > m { - n = m - } - data := b.buf[b.off : b.off+n] - b.off += n - return data -} - -// ReadByte reads and returns the next byte from the buffer. -// If no byte is available, it returns error io.EOF. -func (b *Buffer) ReadByte() (c byte, err error) { - if b.off >= len(b.buf) { - // Buffer is empty, reset to recover space. - b.Truncate(0) - return 0, io.EOF - } - c = b.buf[b.off] - b.off++ - return c, nil -} - -// ReadBytes reads until the first occurrence of delim in the input, -// returning a slice containing the data up to and including the delimiter. -// If ReadBytes encounters an error before finding a delimiter, -// it returns the data read before the error and the error itself (often io.EOF). -// ReadBytes returns err != nil if and only if the returned data does not end in -// delim. -func (b *Buffer) ReadBytes(delim byte) (line []byte, err error) { - slice, err := b.readSlice(delim) - // return a copy of slice. The buffer's backing array may - // be overwritten by later calls. - line = append(line, slice...) - return -} - -// readSlice is like ReadBytes but returns a reference to internal buffer data. -func (b *Buffer) readSlice(delim byte) (line []byte, err error) { - i := bytes.IndexByte(b.buf[b.off:], delim) - end := b.off + i + 1 - if i < 0 { - end = len(b.buf) - err = io.EOF - } - line = b.buf[b.off:end] - b.off = end - return line, err -} - -// NewBuffer creates and initializes a new Buffer using buf as its initial -// contents. It is intended to prepare a Buffer to read existing data. It -// can also be used to size the internal buffer for writing. To do that, -// buf should have the desired capacity but a length of zero. -// -// In most cases, new(Buffer) (or just declaring a Buffer variable) is -// sufficient to initialize a Buffer. -func NewBuffer(buf []byte) *Buffer { return &Buffer{buf: buf} } diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go b/vendor/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go deleted file mode 100644 index 2f3db974a..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/util/buffer_pool.go +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package util - -import ( - "fmt" - "sync" - "sync/atomic" - "time" -) - -type buffer struct { - b []byte - miss int -} - -// BufferPool is a 'buffer pool'. -type BufferPool struct { - pool [6]chan []byte - size [5]uint32 - sizeMiss [5]uint32 - sizeHalf [5]uint32 - baseline [4]int - baseline0 int - - mu sync.RWMutex - closed bool - closeC chan struct{} - - get uint32 - put uint32 - half uint32 - less uint32 - equal uint32 - greater uint32 - miss uint32 -} - -func (p *BufferPool) poolNum(n int) int { - if n <= p.baseline0 && n > p.baseline0/2 { - return 0 - } - for i, x := range p.baseline { - if n <= x { - return i + 1 - } - } - return len(p.baseline) + 1 -} - -// Get returns buffer with length of n. -func (p *BufferPool) Get(n int) []byte { - if p == nil { - return make([]byte, n) - } - - p.mu.RLock() - defer p.mu.RUnlock() - - if p.closed { - return make([]byte, n) - } - - atomic.AddUint32(&p.get, 1) - - poolNum := p.poolNum(n) - pool := p.pool[poolNum] - if poolNum == 0 { - // Fast path. - select { - case b := <-pool: - switch { - case cap(b) > n: - if cap(b)-n >= n { - atomic.AddUint32(&p.half, 1) - select { - case pool <- b: - default: - } - return make([]byte, n) - } else { - atomic.AddUint32(&p.less, 1) - return b[:n] - } - case cap(b) == n: - atomic.AddUint32(&p.equal, 1) - return b[:n] - default: - atomic.AddUint32(&p.greater, 1) - } - default: - atomic.AddUint32(&p.miss, 1) - } - - return make([]byte, n, p.baseline0) - } else { - sizePtr := &p.size[poolNum-1] - - select { - case b := <-pool: - switch { - case cap(b) > n: - if cap(b)-n >= n { - atomic.AddUint32(&p.half, 1) - sizeHalfPtr := &p.sizeHalf[poolNum-1] - if atomic.AddUint32(sizeHalfPtr, 1) == 20 { - atomic.StoreUint32(sizePtr, uint32(cap(b)/2)) - atomic.StoreUint32(sizeHalfPtr, 0) - } else { - select { - case pool <- b: - default: - } - } - return make([]byte, n) - } else { - atomic.AddUint32(&p.less, 1) - return b[:n] - } - case cap(b) == n: - atomic.AddUint32(&p.equal, 1) - return b[:n] - default: - atomic.AddUint32(&p.greater, 1) - if uint32(cap(b)) >= atomic.LoadUint32(sizePtr) { - select { - case pool <- b: - default: - } - } - } - default: - atomic.AddUint32(&p.miss, 1) - } - - if size := atomic.LoadUint32(sizePtr); uint32(n) > size { - if size == 0 { - atomic.CompareAndSwapUint32(sizePtr, 0, uint32(n)) - } else { - sizeMissPtr := &p.sizeMiss[poolNum-1] - if atomic.AddUint32(sizeMissPtr, 1) == 20 { - atomic.StoreUint32(sizePtr, uint32(n)) - atomic.StoreUint32(sizeMissPtr, 0) - } - } - return make([]byte, n) - } else { - return make([]byte, n, size) - } - } -} - -// Put adds given buffer to the pool. -func (p *BufferPool) Put(b []byte) { - if p == nil { - return - } - - p.mu.RLock() - defer p.mu.RUnlock() - - if p.closed { - return - } - - atomic.AddUint32(&p.put, 1) - - pool := p.pool[p.poolNum(cap(b))] - select { - case pool <- b: - default: - } - -} - -func (p *BufferPool) Close() { - if p == nil { - return - } - - p.mu.Lock() - if !p.closed { - p.closed = true - p.closeC <- struct{}{} - } - p.mu.Unlock() -} - -func (p *BufferPool) String() string { - if p == nil { - return "" - } - - return fmt.Sprintf("BufferPool{B·%d Z·%v Zm·%v Zh·%v G·%d P·%d H·%d <·%d =·%d >·%d M·%d}", - p.baseline0, p.size, p.sizeMiss, p.sizeHalf, p.get, p.put, p.half, p.less, p.equal, p.greater, p.miss) -} - -func (p *BufferPool) drain() { - ticker := time.NewTicker(2 * time.Second) - defer ticker.Stop() - for { - select { - case <-ticker.C: - for _, ch := range p.pool { - select { - case <-ch: - default: - } - } - case <-p.closeC: - close(p.closeC) - for _, ch := range p.pool { - close(ch) - } - return - } - } -} - -// NewBufferPool creates a new initialized 'buffer pool'. -func NewBufferPool(baseline int) *BufferPool { - if baseline <= 0 { - panic("baseline can't be <= 0") - } - p := &BufferPool{ - baseline0: baseline, - baseline: [...]int{baseline / 4, baseline / 2, baseline * 2, baseline * 4}, - closeC: make(chan struct{}, 1), - } - for i, cap := range []int{2, 2, 4, 4, 2, 1} { - p.pool[i] = make(chan []byte, cap) - } - go p.drain() - return p -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/util/crc32.go b/vendor/github.com/syndtr/goleveldb/leveldb/util/crc32.go deleted file mode 100644 index 631c9d610..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/util/crc32.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2011 The LevelDB-Go Authors. All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package util - -import ( - "hash/crc32" -) - -var table = crc32.MakeTable(crc32.Castagnoli) - -// CRC is a CRC-32 checksum computed using Castagnoli's polynomial. -type CRC uint32 - -// NewCRC creates a new crc based on the given bytes. -func NewCRC(b []byte) CRC { - return CRC(0).Update(b) -} - -// Update updates the crc with the given bytes. -func (c CRC) Update(b []byte) CRC { - return CRC(crc32.Update(uint32(c), table, b)) -} - -// Value returns a masked crc. -func (c CRC) Value() uint32 { - return uint32(c>>15|c<<17) + 0xa282ead8 -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go b/vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go deleted file mode 100644 index 54903660f..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package util - -import ( - "bytes" - "encoding/binary" -) - -// Hash return hash of the given data. -func Hash(data []byte, seed uint32) uint32 { - // Similar to murmur hash - var m uint32 = 0xc6a4a793 - var r uint32 = 24 - h := seed ^ (uint32(len(data)) * m) - - buf := bytes.NewBuffer(data) - for buf.Len() >= 4 { - var w uint32 - binary.Read(buf, binary.LittleEndian, &w) - h += w - h *= m - h ^= (h >> 16) - } - - rest := buf.Bytes() - switch len(rest) { - default: - panic("not reached") - case 3: - h += uint32(rest[2]) << 16 - fallthrough - case 2: - h += uint32(rest[1]) << 8 - fallthrough - case 1: - h += uint32(rest[0]) - h *= m - h ^= (h >> r) - case 0: - } - - return h -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/util/range.go b/vendor/github.com/syndtr/goleveldb/leveldb/util/range.go deleted file mode 100644 index 85159583d..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/util/range.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package util - -// Range is a key range. -type Range struct { - // Start of the key range, include in the range. - Start []byte - - // Limit of the key range, not include in the range. - Limit []byte -} - -// BytesPrefix returns key range that satisfy the given prefix. -// This only applicable for the standard 'bytes comparer'. -func BytesPrefix(prefix []byte) *Range { - var limit []byte - for i := len(prefix) - 1; i >= 0; i-- { - c := prefix[i] - if c < 0xff { - limit = make([]byte, i+1) - copy(limit, prefix) - limit[i] = c + 1 - break - } - } - return &Range{prefix, limit} -} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/util/util.go b/vendor/github.com/syndtr/goleveldb/leveldb/util/util.go deleted file mode 100644 index f35976865..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/util/util.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2013, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Package util provides utilities used throughout leveldb. -package util - -import ( - "errors" -) - -var ( - ErrReleased = errors.New("leveldb: resource already relesed") - ErrHasReleaser = errors.New("leveldb: releaser already defined") -) - -// Releaser is the interface that wraps the basic Release method. -type Releaser interface { - // Release releases associated resources. Release should always success - // and can be called multipe times without causing error. - Release() -} - -// ReleaseSetter is the interface that wraps the basic SetReleaser method. -type ReleaseSetter interface { - // SetReleaser associates the given releaser to the resources. The - // releaser will be called once coresponding resources released. - // Calling SetReleaser with nil will clear the releaser. - // - // This will panic if a releaser already present or coresponding - // resource is already released. Releaser should be cleared first - // before assigned a new one. - SetReleaser(releaser Releaser) -} - -// BasicReleaser provides basic implementation of Releaser and ReleaseSetter. -type BasicReleaser struct { - releaser Releaser - released bool -} - -// Released returns whether Release method already called. -func (r *BasicReleaser) Released() bool { - return r.released -} - -// Release implements Releaser.Release. -func (r *BasicReleaser) Release() { - if !r.released { - if r.releaser != nil { - r.releaser.Release() - r.releaser = nil - } - r.released = true - } -} - -// SetReleaser implements ReleaseSetter.SetReleaser. -func (r *BasicReleaser) SetReleaser(releaser Releaser) { - if r.released { - panic(ErrReleased) - } - if r.releaser != nil && releaser != nil { - panic(ErrHasReleaser) - } - r.releaser = releaser -} - -type NoopReleaser struct{} - -func (NoopReleaser) Release() {} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/version.go b/vendor/github.com/syndtr/goleveldb/leveldb/version.go deleted file mode 100644 index d274eeff2..000000000 --- a/vendor/github.com/syndtr/goleveldb/leveldb/version.go +++ /dev/null @@ -1,519 +0,0 @@ -// Copyright (c) 2012, Suryandaru Triandana -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package leveldb - -import ( - "fmt" - "sync/atomic" - "unsafe" - - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" -) - -type tSet struct { - level int - table *tFile -} - -type version struct { - s *session - - levels []tFiles - - // Level that should be compacted next and its compaction score. - // Score < 1 means compaction is not strictly needed. These fields - // are initialized by computeCompaction() - cLevel int - cScore float64 - - cSeek unsafe.Pointer - - ref int - // Succeeding version. - next *version -} - -func newVersion(s *session) *version { - return &version{s: s} -} - -func (v *version) releaseNB() { - v.ref-- - if v.ref > 0 { - return - } - if v.ref < 0 { - panic("negative version ref") - } - - nextTables := make(map[int64]bool) - for _, tt := range v.next.levels { - for _, t := range tt { - num := t.fd.Num - nextTables[num] = true - } - } - - for _, tt := range v.levels { - for _, t := range tt { - num := t.fd.Num - if _, ok := nextTables[num]; !ok { - v.s.tops.remove(t) - } - } - } - - v.next.releaseNB() - v.next = nil -} - -func (v *version) release() { - v.s.vmu.Lock() - v.releaseNB() - v.s.vmu.Unlock() -} - -func (v *version) walkOverlapping(aux tFiles, ikey internalKey, f func(level int, t *tFile) bool, lf func(level int) bool) { - ukey := ikey.ukey() - - // Aux level. - if aux != nil { - for _, t := range aux { - if t.overlaps(v.s.icmp, ukey, ukey) { - if !f(-1, t) { - return - } - } - } - - if lf != nil && !lf(-1) { - return - } - } - - // Walk tables level-by-level. - for level, tables := range v.levels { - if len(tables) == 0 { - continue - } - - if level == 0 { - // Level-0 files may overlap each other. Find all files that - // overlap ukey. - for _, t := range tables { - if t.overlaps(v.s.icmp, ukey, ukey) { - if !f(level, t) { - return - } - } - } - } else { - if i := tables.searchMax(v.s.icmp, ikey); i < len(tables) { - t := tables[i] - if v.s.icmp.uCompare(ukey, t.imin.ukey()) >= 0 { - if !f(level, t) { - return - } - } - } - } - - if lf != nil && !lf(level) { - return - } - } -} - -func (v *version) get(aux tFiles, ikey internalKey, ro *opt.ReadOptions, noValue bool) (value []byte, tcomp bool, err error) { - ukey := ikey.ukey() - - var ( - tset *tSet - tseek bool - - // Level-0. - zfound bool - zseq uint64 - zkt keyType - zval []byte - ) - - err = ErrNotFound - - // Since entries never hop across level, finding key/value - // in smaller level make later levels irrelevant. - v.walkOverlapping(aux, ikey, func(level int, t *tFile) bool { - if level >= 0 && !tseek { - if tset == nil { - tset = &tSet{level, t} - } else { - tseek = true - } - } - - var ( - fikey, fval []byte - ferr error - ) - if noValue { - fikey, ferr = v.s.tops.findKey(t, ikey, ro) - } else { - fikey, fval, ferr = v.s.tops.find(t, ikey, ro) - } - - switch ferr { - case nil: - case ErrNotFound: - return true - default: - err = ferr - return false - } - - if fukey, fseq, fkt, fkerr := parseInternalKey(fikey); fkerr == nil { - if v.s.icmp.uCompare(ukey, fukey) == 0 { - // Level <= 0 may overlaps each-other. - if level <= 0 { - if fseq >= zseq { - zfound = true - zseq = fseq - zkt = fkt - zval = fval - } - } else { - switch fkt { - case keyTypeVal: - value = fval - err = nil - case keyTypeDel: - default: - panic("leveldb: invalid internalKey type") - } - return false - } - } - } else { - err = fkerr - return false - } - - return true - }, func(level int) bool { - if zfound { - switch zkt { - case keyTypeVal: - value = zval - err = nil - case keyTypeDel: - default: - panic("leveldb: invalid internalKey type") - } - return false - } - - return true - }) - - if tseek && tset.table.consumeSeek() <= 0 { - tcomp = atomic.CompareAndSwapPointer(&v.cSeek, nil, unsafe.Pointer(tset)) - } - - return -} - -func (v *version) sampleSeek(ikey internalKey) (tcomp bool) { - var tset *tSet - - v.walkOverlapping(nil, ikey, func(level int, t *tFile) bool { - if tset == nil { - tset = &tSet{level, t} - return true - } - if tset.table.consumeSeek() <= 0 { - tcomp = atomic.CompareAndSwapPointer(&v.cSeek, nil, unsafe.Pointer(tset)) - } - return false - }, nil) - - return -} - -func (v *version) getIterators(slice *util.Range, ro *opt.ReadOptions) (its []iterator.Iterator) { - strict := opt.GetStrict(v.s.o.Options, ro, opt.StrictReader) - for level, tables := range v.levels { - if level == 0 { - // Merge all level zero files together since they may overlap. - for _, t := range tables { - its = append(its, v.s.tops.newIterator(t, slice, ro)) - } - } else if len(tables) != 0 { - its = append(its, iterator.NewIndexedIterator(tables.newIndexIterator(v.s.tops, v.s.icmp, slice, ro), strict)) - } - } - return -} - -func (v *version) newStaging() *versionStaging { - return &versionStaging{base: v} -} - -// Spawn a new version based on this version. -func (v *version) spawn(r *sessionRecord) *version { - staging := v.newStaging() - staging.commit(r) - return staging.finish() -} - -func (v *version) fillRecord(r *sessionRecord) { - for level, tables := range v.levels { - for _, t := range tables { - r.addTableFile(level, t) - } - } -} - -func (v *version) tLen(level int) int { - if level < len(v.levels) { - return len(v.levels[level]) - } - return 0 -} - -func (v *version) offsetOf(ikey internalKey) (n int64, err error) { - for level, tables := range v.levels { - for _, t := range tables { - if v.s.icmp.Compare(t.imax, ikey) <= 0 { - // Entire file is before "ikey", so just add the file size - n += t.size - } else if v.s.icmp.Compare(t.imin, ikey) > 0 { - // Entire file is after "ikey", so ignore - if level > 0 { - // Files other than level 0 are sorted by meta->min, so - // no further files in this level will contain data for - // "ikey". - break - } - } else { - // "ikey" falls in the range for this table. Add the - // approximate offset of "ikey" within the table. - if m, err := v.s.tops.offsetOf(t, ikey); err == nil { - n += m - } else { - return 0, err - } - } - } - } - - return -} - -func (v *version) pickMemdbLevel(umin, umax []byte, maxLevel int) (level int) { - if maxLevel > 0 { - if len(v.levels) == 0 { - return maxLevel - } - if !v.levels[0].overlaps(v.s.icmp, umin, umax, true) { - var overlaps tFiles - for ; level < maxLevel; level++ { - if pLevel := level + 1; pLevel >= len(v.levels) { - return maxLevel - } else if v.levels[pLevel].overlaps(v.s.icmp, umin, umax, false) { - break - } - if gpLevel := level + 2; gpLevel < len(v.levels) { - overlaps = v.levels[gpLevel].getOverlaps(overlaps, v.s.icmp, umin, umax, false) - if overlaps.size() > int64(v.s.o.GetCompactionGPOverlaps(level)) { - break - } - } - } - } - } - return -} - -func (v *version) computeCompaction() { - // Precomputed best level for next compaction - bestLevel := int(-1) - bestScore := float64(-1) - - statFiles := make([]int, len(v.levels)) - statSizes := make([]string, len(v.levels)) - statScore := make([]string, len(v.levels)) - statTotSize := int64(0) - - for level, tables := range v.levels { - var score float64 - size := tables.size() - if level == 0 { - // We treat level-0 specially by bounding the number of files - // instead of number of bytes for two reasons: - // - // (1) With larger write-buffer sizes, it is nice not to do too - // many level-0 compaction. - // - // (2) The files in level-0 are merged on every read and - // therefore we wish to avoid too many files when the individual - // file size is small (perhaps because of a small write-buffer - // setting, or very high compression ratios, or lots of - // overwrites/deletions). - score = float64(len(tables)) / float64(v.s.o.GetCompactionL0Trigger()) - } else { - score = float64(size) / float64(v.s.o.GetCompactionTotalSize(level)) - } - - if score > bestScore { - bestLevel = level - bestScore = score - } - - statFiles[level] = len(tables) - statSizes[level] = shortenb(int(size)) - statScore[level] = fmt.Sprintf("%.2f", score) - statTotSize += size - } - - v.cLevel = bestLevel - v.cScore = bestScore - - v.s.logf("version@stat F·%v S·%s%v Sc·%v", statFiles, shortenb(int(statTotSize)), statSizes, statScore) -} - -func (v *version) needCompaction() bool { - return v.cScore >= 1 || atomic.LoadPointer(&v.cSeek) != nil -} - -type tablesScratch struct { - added map[int64]atRecord - deleted map[int64]struct{} -} - -type versionStaging struct { - base *version - levels []tablesScratch -} - -func (p *versionStaging) getScratch(level int) *tablesScratch { - if level >= len(p.levels) { - newLevels := make([]tablesScratch, level+1) - copy(newLevels, p.levels) - p.levels = newLevels - } - return &(p.levels[level]) -} - -func (p *versionStaging) commit(r *sessionRecord) { - // Deleted tables. - for _, r := range r.deletedTables { - scratch := p.getScratch(r.level) - if r.level < len(p.base.levels) && len(p.base.levels[r.level]) > 0 { - if scratch.deleted == nil { - scratch.deleted = make(map[int64]struct{}) - } - scratch.deleted[r.num] = struct{}{} - } - if scratch.added != nil { - delete(scratch.added, r.num) - } - } - - // New tables. - for _, r := range r.addedTables { - scratch := p.getScratch(r.level) - if scratch.added == nil { - scratch.added = make(map[int64]atRecord) - } - scratch.added[r.num] = r - if scratch.deleted != nil { - delete(scratch.deleted, r.num) - } - } -} - -func (p *versionStaging) finish() *version { - // Build new version. - nv := newVersion(p.base.s) - numLevel := len(p.levels) - if len(p.base.levels) > numLevel { - numLevel = len(p.base.levels) - } - nv.levels = make([]tFiles, numLevel) - for level := 0; level < numLevel; level++ { - var baseTabels tFiles - if level < len(p.base.levels) { - baseTabels = p.base.levels[level] - } - - if level < len(p.levels) { - scratch := p.levels[level] - - var nt tFiles - // Prealloc list if possible. - if n := len(baseTabels) + len(scratch.added) - len(scratch.deleted); n > 0 { - nt = make(tFiles, 0, n) - } - - // Base tables. - for _, t := range baseTabels { - if _, ok := scratch.deleted[t.fd.Num]; ok { - continue - } - if _, ok := scratch.added[t.fd.Num]; ok { - continue - } - nt = append(nt, t) - } - - // New tables. - for _, r := range scratch.added { - nt = append(nt, tableFileFromRecord(r)) - } - - if len(nt) != 0 { - // Sort tables. - if level == 0 { - nt.sortByNum() - } else { - nt.sortByKey(p.base.s.icmp) - } - - nv.levels[level] = nt - } - } else { - nv.levels[level] = baseTabels - } - } - - // Trim levels. - n := len(nv.levels) - for ; n > 0 && nv.levels[n-1] == nil; n-- { - } - nv.levels = nv.levels[:n] - - // Compute compaction score for new version. - nv.computeCompaction() - - return nv -} - -type versionReleaser struct { - v *version - once bool -} - -func (vr *versionReleaser) Release() { - v := vr.v - v.s.vmu.Lock() - if !vr.once { - v.releaseNB() - vr.once = true - } - v.s.vmu.Unlock() -} diff --git a/vendor/github.com/twinj/uuid/LICENSE b/vendor/github.com/twinj/uuid/LICENSE deleted file mode 100644 index a92c1e08f..000000000 --- a/vendor/github.com/twinj/uuid/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (C) 2011 by Krzysztof Kowalik -Copyright (C) 2014 by Daniel Kemp Derivative work - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/twinj/uuid/array.go b/vendor/github.com/twinj/uuid/array.go deleted file mode 100644 index add7e19be..000000000 --- a/vendor/github.com/twinj/uuid/array.go +++ /dev/null @@ -1,68 +0,0 @@ -package uuid - -/**************** - * Date: 1/02/14 - * Time: 10:08 AM - ***************/ - -const ( - variantIndex = 8 - versionIndex = 6 -) - -// A clean UUID type for simpler UUID versions -type Array [length]byte - -func (Array) Size() int { - return length -} - -func (o Array) Version() int { - return int(o[versionIndex]) >> 4 -} - -func (o *Array) setVersion(pVersion int) { - o[versionIndex] &= 0x0F - o[versionIndex] |= byte(pVersion) << 4 -} - -func (o *Array) Variant() byte { - return variant(o[variantIndex]) -} - -func (o *Array) setVariant(pVariant byte) { - setVariant(&o[variantIndex], pVariant) -} - -func (o *Array) Unmarshal(pData []byte) { - copy(o[:], pData) -} - -func (o *Array) Bytes() []byte { - return o[:] -} - -func (o Array) String() string { - return formatter(&o, format) -} - -func (o Array) Format(pFormat string) string { - return formatter(&o, pFormat) -} - -// Set the three most significant bits (bits 0, 1 and 2) of the -// sequenceHiAndVariant equivalent in the array to ReservedRFC4122. -func (o *Array) setRFC4122Variant() { - o[variantIndex] &= 0x3F - o[variantIndex] |= ReservedRFC4122 -} - -// Marshals the UUID bytes into a slice -func (o *Array) MarshalBinary() ([]byte, error) { - return o.Bytes(), nil -} - -// Un-marshals the data bytes into the UUID. -func (o *Array) UnmarshalBinary(pData []byte) error { - return UnmarshalBinary(o, pData) -} diff --git a/vendor/github.com/twinj/uuid/rfc4122.go b/vendor/github.com/twinj/uuid/rfc4122.go deleted file mode 100644 index 64ef55613..000000000 --- a/vendor/github.com/twinj/uuid/rfc4122.go +++ /dev/null @@ -1,146 +0,0 @@ -package uuid - -/*************** - * Date: 14/02/14 - * Time: 7:44 PM - ***************/ - -import ( - "crypto/md5" - "crypto/rand" - "crypto/sha1" - "encoding/binary" - "log" - seed "math/rand" - "net" -) - -const ( - length = 16 - - // 3F used by RFC4122 although 1F works for all - variantSet = 0x3F - - // rather than using 0xC0 we use 0xE0 to retrieve the variant - // The result is the same for all other variants - // 0x80 and 0xA0 are used to identify RFC4122 compliance - variantGet = 0xE0 -) - -var ( - // nodeID is the default Namespace node - nodeId = []byte{ - // 00.192.79.212.48.200 - 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8, - } - // The following standard UUIDs are for use with V3 or V5 UUIDs. - NamespaceDNS = &Struct{0x6ba7b810, 0x9dad, 0x11d1, 0x80, 0xb4, nodeId, length} - NamespaceURL = &Struct{0x6ba7b811, 0x9dad, 0x11d1, 0x80, 0xb4, nodeId, length} - NamespaceOID = &Struct{0x6ba7b812, 0x9dad, 0x11d1, 0x80, 0xb4, nodeId, length} - NamespaceX500 = &Struct{0x6ba7b814, 0x9dad, 0x11d1, 0x80, 0xb4, nodeId, length} - - state State -) - -func init() { - seed.Seed((int64(timestamp())^int64(gregorianToUNIXOffset))*0x6ba7b814<<0x6ba7b812 | 1391463463) - state = State{ - randomNode: true, - randomSequence: true, - past: Timestamp((1391463463 * 10000000) + (100 * 10) + gregorianToUNIXOffset), - node: nodeId, - sequence: uint16(seed.Int()) & 0x3FFF, - saver: nil, - } -} - -// NewV1 will generate a new RFC4122 version 1 UUID -func NewV1() UUID { - state.Lock() - defer state.Unlock() - now := currentUUIDTimestamp() - state.read(now, currentUUIDNodeId()) - state.persist() - return formatV1(now, uint16(1), ReservedRFC4122, state.node) -} - -// NewV3 will generate a new RFC4122 version 3 UUID -// V3 is based on the MD5 hash of a namespace identifier UUID and -// any type which implements the UniqueName interface for the name. -// For strings and slices cast to a Name type -func NewV3(pNs UUID, pName UniqueName) UUID { - o := new(Array) - // Set all bits to MD5 hash generated from namespace and name. - Digest(o, pNs, pName, md5.New()) - o.setRFC4122Variant() - o.setVersion(3) - return o -} - -// NewV4 will generate a new RFC4122 version 4 UUID -// A cryptographically secure random UUID. -func NewV4() UUID { - o := new(Array) - // Read random values (or pseudo-randomly) into Array type. - _, err := rand.Read(o[:length]) - if err != nil { - panic(err) - } - o.setRFC4122Variant() - o.setVersion(4) - return o -} - -// NewV5 will generate a new RFC4122 version 5 UUID -// Generate a UUID based on the SHA-1 hash of a namespace -// identifier and a name. -func NewV5(pNs UUID, pName UniqueName) UUID { - o := new(Array) - Digest(o, pNs, pName, sha1.New()) - o.setRFC4122Variant() - o.setVersion(5) - return o -} - -// either generates a random node when there is an error or gets -// the pre initialised one -func currentUUIDNodeId() (node net.HardwareAddr) { - if state.randomNode { - b := make([]byte, 16+6) - _, err := rand.Read(b) - if err != nil { - log.Println("UUID.currentUUIDNodeId error:", err) - node = nodeId - return - } - h := sha1.New() - h.Write(b) - binary.Write(h, binary.LittleEndian, state.sequence) - node = h.Sum(nil)[:6] - if err != nil { - log.Println("UUID.currentUUIDNodeId error:", err) - node = nodeId - return - } - // Mark as randomly generated - node[0] |= 0x01 - } else { - node = state.node - } - return -} - -// Unmarshal data into struct for V1 UUIDs -func formatV1(pNow Timestamp, pVersion uint16, pVariant byte, pNode []byte) UUID { - o := new(Struct) - o.timeLow = uint32(pNow & 0xFFFFFFFF) - o.timeMid = uint16((pNow >> 32) & 0xFFFF) - o.timeHiAndVersion = uint16((pNow >> 48) & 0x0FFF) - o.timeHiAndVersion |= uint16(pVersion << 12) - o.sequenceLow = byte(state.sequence & 0xFF) - o.sequenceHiAndVariant = byte((state.sequence & 0x3F00) >> 8) - o.sequenceHiAndVariant |= pVariant - o.node = pNode - o.size = length - return o -} diff --git a/vendor/github.com/twinj/uuid/saver.go b/vendor/github.com/twinj/uuid/saver.go deleted file mode 100644 index 0b776a46a..000000000 --- a/vendor/github.com/twinj/uuid/saver.go +++ /dev/null @@ -1,140 +0,0 @@ -package uuid - -/**************** - * Date: 21/06/15 - * Time: 5:48 PM - ***************/ - -import ( - "encoding/gob" - "log" - "os" - "time" -) - -func init() { - gob.Register(stateEntity{}) -} - -func SetupFileSystemStateSaver(pConfig StateSaverConfig) { - saver := &FileSystemSaver{} - saver.saveReport = pConfig.SaveReport - saver.saveSchedule = int64(pConfig.SaveSchedule) - SetupCustomStateSaver(saver) -} - -// A wrapper for default setup of the FileSystemStateSaver -type StateSaverConfig struct { - - // Print save log - SaveReport bool - - // Save every x nanoseconds - SaveSchedule time.Duration -} - -// *********************************************** StateEntity - -// StateEntity acts as a marshaller struct for the state -type stateEntity struct { - Past Timestamp - Node []byte - Sequence uint16 -} - -// This implements the StateSaver interface for UUIDs -type FileSystemSaver struct { - cache *os.File - saveState uint64 - saveReport bool - saveSchedule int64 -} - -// Saves the current state of the generator -// If the scheduled file save is reached then the file is synced -func (o *FileSystemSaver) Save(pState *State) { - if pState.past >= pState.next { - err := o.open() - defer o.cache.Close() - if err != nil { - log.Println("uuid.State.save:", err) - return - } - // do the save - o.encode(pState) - // a tick is 100 nano seconds - pState.next = pState.past + Timestamp(o.saveSchedule / 100) - if o.saveReport { - log.Printf("UUID STATE: SAVED %d", pState.past) - } - } -} - -func (o *FileSystemSaver) Init(pState *State) { - pState.saver = o - err := o.open() - defer o.cache.Close() - if err != nil { - if os.IsNotExist(err) { - log.Printf("'%s' created\n", "uuid.SaveState") - var err error - o.cache, err = os.Create(os.TempDir() + "/state.unique") - if err != nil { - log.Println("uuid.State.init: SaveState error:", err) - goto pastInit - } - o.encode(pState) - } else { - log.Println("uuid.State.init: SaveState error:", err) - goto pastInit - } - } - err = o.decode(pState) - if err != nil { - goto pastInit - } - pState.randomSequence = false -pastInit: - if timestamp() <= pState.past { - pState.sequence++ - } - pState.next = pState.past -} - -func (o *FileSystemSaver) reset() { - o.cache.Seek(0, 0) -} - -func (o *FileSystemSaver) open() error { - var err error - o.cache, err = os.OpenFile(os.TempDir()+"/state.unique", os.O_RDWR, os.ModeExclusive) - return err -} - -// Encodes State generator data into a saved file -func (o *FileSystemSaver) encode(pState *State) { - // ensure reader state is ready for use - o.reset() - enc := gob.NewEncoder(o.cache) - // Wrap private State data into the StateEntity - err := enc.Encode(&stateEntity{pState.past, pState.node, pState.sequence}) - if err != nil { - log.Panic("UUID.encode error:", err) - } -} - -// Decodes StateEntity data into the main State -func (o *FileSystemSaver) decode(pState *State) error { - o.reset() - dec := gob.NewDecoder(o.cache) - entity := stateEntity{} - err := dec.Decode(&entity) - if err != nil { - log.Println("uuid.decode error:", err) - return err - } - pState.past = entity.Past - pState.node = entity.Node - pState.sequence = entity.Sequence - return nil -} diff --git a/vendor/github.com/twinj/uuid/state.go b/vendor/github.com/twinj/uuid/state.go deleted file mode 100644 index f3920776c..000000000 --- a/vendor/github.com/twinj/uuid/state.go +++ /dev/null @@ -1,137 +0,0 @@ -package uuid - -/**************** - * Date: 14/02/14 - * Time: 7:43 PM - ***************/ - -import ( - "bytes" - "log" - seed "math/rand" - "net" - "sync" -) - - -// **************************************************** State - -func SetupCustomStateSaver(pSaver StateSaver) { - state.Lock() - pSaver.Init(&state) - state.init() - state.Unlock() -} - -// Holds package information about the current -// state of the UUID generator -type State struct { - - // A flag which informs whether to - // randomly create a node id - randomNode bool - - // A flag which informs whether to - // randomly create the sequence - randomSequence bool - - // the last time UUID was saved - past Timestamp - - // the next time the state will be saved - next Timestamp - - // the last node which saved a UUID - node []byte - - // An iterated value to help ensure different - // values across the same domain - sequence uint16 - - sync.Mutex - - // save state interface - saver StateSaver -} - -// Changes the state with current data -// Compares the current found node to the last node stored, -// If they are the same or randomSequence is already set due -// to an earlier read issue then the sequence is randomly generated -// else if there is an issue with the time the sequence is incremented -func (o *State) read(pNow Timestamp, pNode net.HardwareAddr) { - if bytes.Equal([]byte(pNode), o.node) || o.randomSequence { - o.sequence = uint16(seed.Int()) & 0x3FFF - } else if pNow < o.past { - o.sequence++ - } - o.past = pNow - o.node = pNode -} - -func (o *State) persist() { - if o.saver != nil { - o.saver.Save(o) - } -} - -// Initialises the UUID state when the package is first loaded -// it first attempts to decode the file state into State -// if this file does not exist it will create the file and do a flush -// of the random state which gets loaded at package runtime -// second it will attempt to resolve the current hardware address nodeId -// thirdly it will check the state of the clock -func (o *State) init() { - if o.saver != nil { - intfcs, err := net.Interfaces() - if err != nil { - log.Println("uuid.State.init: address error: will generate random node id instead", err) - return - } - a := getHardwareAddress(intfcs) - if a == nil { - log.Println("uuid.State.init: address error: will generate random node id instead", err) - return - } - // Don't use random as we have a real address - o.randomSequence = false - if bytes.Equal([]byte(a), state.node) { - state.sequence++ - } - state.node = a - state.randomNode = false - } -} - -func getHardwareAddress(pInterfaces []net.Interface) net.HardwareAddr { - for _, inter := range pInterfaces { - // Initially I could multicast out the Flags to get - // whether the interface was up but started failing - if (inter.Flags & (1 << net.FlagUp)) != 0 { - //if inter.Flags.String() != "0" { - if addrs, err := inter.Addrs(); err == nil { - for _, addr := range addrs { - if addr.String() != "0.0.0.0" && !bytes.Equal([]byte(inter.HardwareAddr), make([]byte, len(inter.HardwareAddr))) { - return inter.HardwareAddr - } - } - } - } - } - return nil -} - -// *********************************************** StateSaver interface - -// Use this interface to setup a custom state saver if you wish to have -// v1 UUIDs based on your node id and constant time. -type StateSaver interface { - // Init is run if Setup() is false - // Init should setup the system to save the state - Init(*State) - - // Save saves the state and is called only if const V1Save and - // Setup() is true - Save(*State) -} - diff --git a/vendor/github.com/twinj/uuid/struct.go b/vendor/github.com/twinj/uuid/struct.go deleted file mode 100644 index 4f2fba8bd..000000000 --- a/vendor/github.com/twinj/uuid/struct.go +++ /dev/null @@ -1,103 +0,0 @@ -package uuid - -/**************** - * Date: 31/01/14 - * Time: 3:34 PM - ***************/ - -import "net" - -// Struct is used for RFC4122 Version 1 UUIDs -type Struct struct { - timeLow uint32 - timeMid uint16 - timeHiAndVersion uint16 - sequenceHiAndVariant byte - sequenceLow byte - node []byte - size int -} - -func (o Struct) Size() int { - return o.size -} - -func (o Struct) Version() int { - return int(o.timeHiAndVersion >> 12) -} - -func (o Struct) Variant() byte { - return variant(o.sequenceHiAndVariant) -} - -// Sets the four most significant bits (bits 12 through 15) of the -// timeHiAndVersion field to the 4-bit version number. -func (o *Struct) setVersion(pVersion int) { - o.timeHiAndVersion &= 0x0FFF - o.timeHiAndVersion |= (uint16(pVersion) << 12) -} - -func (o *Struct) setVariant(pVariant byte) { - setVariant(&o.sequenceHiAndVariant, pVariant) -} - -func (o *Struct) Unmarshal(pData []byte) { - o.timeLow = uint32(pData[3]) | uint32(pData[2])<<8 | uint32(pData[1])<<16 | uint32(pData[0])<<24 - o.timeMid = uint16(pData[5]) | uint16(pData[4])<<8 - o.timeHiAndVersion = uint16(pData[7]) | uint16(pData[6])<<8 - o.sequenceHiAndVariant = pData[8] - o.sequenceLow = pData[9] - o.node = pData[10:o.Size()] -} - -func (o *Struct) Bytes() (data []byte) { - data = []byte{ - byte(o.timeLow >> 24), byte(o.timeLow >> 16), byte(o.timeLow >> 8), byte(o.timeLow), - byte(o.timeMid >> 8), byte(o.timeMid), - byte(o.timeHiAndVersion >> 8), byte(o.timeHiAndVersion), - } - data = append(data, o.sequenceHiAndVariant) - data = append(data, o.sequenceLow) - data = append(data, o.node...) - return -} - -// Marshals the UUID bytes into a slice -func (o *Struct) MarshalBinary() ([]byte, error) { - return o.Bytes(), nil -} - -// Un-marshals the data bytes into the UUID struct. -// Implements the BinaryUn-marshaller interface -func (o *Struct) UnmarshalBinary(pData []byte) error { - return UnmarshalBinary(o, pData) -} - -func (o Struct) String() string { - return formatter(&o, format) -} - -func (o Struct) Format(pFormat string) string { - return formatter(&o, pFormat) -} - -// Set the three most significant bits (bits 0, 1 and 2) of the -// sequenceHiAndVariant to variant mask 0x80. -func (o *Struct) setRFC4122Variant() { - o.sequenceHiAndVariant &= variantSet - o.sequenceHiAndVariant |= ReservedRFC4122 -} - -// Unmarshals data into struct for V1 UUIDs -func newV1(pNow Timestamp, pVersion uint16, pVariant byte, pNode net.HardwareAddr) UUID { - o := new(Struct) - o.timeLow = uint32(pNow & 0xFFFFFFFF) - o.timeMid = uint16((pNow >> 32) & 0xFFFF) - o.timeHiAndVersion = uint16((pNow >> 48) & 0x0FFF) - o.timeHiAndVersion |= uint16(pVersion << 12) - o.sequenceLow = byte(state.sequence & 0xFF) - o.sequenceHiAndVariant = byte((state.sequence & 0x3F00) >> 8) - o.sequenceHiAndVariant |= pVariant - o.node = pNode - return o -} diff --git a/vendor/github.com/twinj/uuid/timestamp.go b/vendor/github.com/twinj/uuid/timestamp.go deleted file mode 100644 index 616428745..000000000 --- a/vendor/github.com/twinj/uuid/timestamp.go +++ /dev/null @@ -1,81 +0,0 @@ -package uuid - -/**************** - * Date: 14/02/14 - * Time: 7:46 PM - ***************/ - -import ( - "time" -) - -const ( - // A tick is 100 ns - ticksPerSecond = 10000000 - - // Difference between - gregorianToUNIXOffset uint64 = 0x01B21DD213814000 - - // set the following to the number of 100ns ticks of the actual - // resolution of your system's clock - idsPerTimestamp = 1024 -) - -var ( - lastTimestamp Timestamp - idsThisTimestamp = idsPerTimestamp -) - -// ********************************************** Timestamp - -type Timestamp uint64 - -// TODO Create c version same as package runtime and time -func Now() (sec int64, nsec int32) { - t := time.Now() - sec = t.Unix() - nsec = int32(t.Nanosecond()) - return -} - -// Converts Unix formatted time to RFC4122 UUID formatted times -// UUID UTC base time is October 15, 1582. -// Unix base time is January 1, 1970. -// Converts time to 100 nanosecond ticks since epoch -// There are 1000000000 nanoseconds in a second, -// 1000000000 / 100 = 10000000 tiks per second -func timestamp() Timestamp { - sec, nsec := Now() - return Timestamp(uint64(sec)*ticksPerSecond + - uint64(nsec)/100 + gregorianToUNIXOffset) -} - -func (o Timestamp) Unix() time.Time { - t := uint64(o) - gregorianToUNIXOffset - return time.Unix(0, int64(t*100)) -} - -// Get time as 60-bit 100ns ticks since UUID epoch. -// Compensate for the fact that real clock resolution is -// less than 100ns. -func currentUUIDTimestamp() Timestamp { - var timeNow Timestamp - for { - timeNow = timestamp() - - // if clock reading changed since last UUID generated - if lastTimestamp != timeNow { - // reset count of UUIDs with this timestamp - idsThisTimestamp = 0 - lastTimestamp = timeNow - break - } - if idsThisTimestamp < idsPerTimestamp { - idsThisTimestamp++ - break - } - // going too fast for the clock; spin - } - // add the count of UUIDs to low order bits of the clock reading - return timeNow + Timestamp(idsThisTimestamp) -} diff --git a/vendor/github.com/twinj/uuid/uuids.go b/vendor/github.com/twinj/uuid/uuids.go deleted file mode 100644 index 846ff05e9..000000000 --- a/vendor/github.com/twinj/uuid/uuids.go +++ /dev/null @@ -1,296 +0,0 @@ -// This package provides RFC4122 UUIDs. -// -// NewV1, NewV3, NewV4, NewV5, for generating versions 1, 3, 4 -// and 5 UUIDs as specified in RFC-4122. -// -// New([]byte), unsafe; NewHex(string); and Parse(string) for -// creating UUIDs from existing data. -// -// The original version was from Krzysztof Kowalik -// Unfortunately, that version was non compliant with RFC4122. -// I forked it but have since heavily redesigned it. -// -// The example code in the specification was also used as reference -// for design. -// -// Copyright (C) 2014 twinj@github.com 2014 MIT style licence -package uuid - -/**************** - * Date: 31/01/14 - * Time: 3:35 PM - ***************/ - -import ( - "encoding" - "encoding/hex" - "errors" - "fmt" - "hash" - "regexp" - "strings" - "bytes" -) - -const ( - ReservedNCS byte = 0x00 - ReservedRFC4122 byte = 0x80 // or and A0 if masked with 1F - ReservedMicrosoft byte = 0xC0 - ReservedFuture byte = 0xE0 - TakeBack byte = 0xF0 -) - -const ( - - // Pattern used to parse string representation of the UUID. - // Current one allows to parse string where only one opening - // or closing bracket or any of the hyphens are optional. - // It is only used to extract the main bytes to create a UUID, - // so these imperfections are of no consequence. - hexPattern = `^(urn\:uuid\:)?[\{(\[]?([A-Fa-f0-9]{8})-?([A-Fa-f0-9]{4})-?([1-5][A-Fa-f0-9]{3})-?([A-Fa-f0-9]{4})-?([A-Fa-f0-9]{12})[\]\})]?$` -) - -var ( - parseUUIDRegex = regexp.MustCompile(hexPattern) - format string -) - -func init() { - SwitchFormat(CleanHyphen) -} - -// ****************************************************** UUID - -// The main interface for UUIDs -// Each implementation must also implement the UniqueName interface -type UUID interface { - encoding.BinaryMarshaler - encoding.BinaryUnmarshaler - - // Marshals the UUID bytes or data - Bytes() (data []byte) - - // Organises data into a new UUID - Unmarshal(pData []byte) - - // Size is used where different implementations require - // different sizes. Should return the number of bytes in - // the implementation. - // Enables unmarshal and Bytes to screen for size - Size() int - - // Version returns a version number of the algorithm used - // to generate the UUID. - // This may may behave independently across non RFC4122 UUIDs - Version() int - - // Variant returns the UUID Variant - // This will be one of the constants: - // ReservedRFC4122, - // ReservedMicrosoft, - // ReservedFuture, - // ReservedNCS. - // This may behave differently across non RFC4122 UUIDs - Variant() byte - - // UUID can be used as a Name within a namespace - // Is simply just a String() string method - // Returns a formatted version of the UUID. - String() string -} - -// New creates a UUID from a slice of bytes. -// Truncates any bytes past the default length of 16 -// Will panic if data slice is too small. -func New(pData []byte) UUID { - o := new(Array) - o.Unmarshal(pData[:length]) - return o -} - - -// Creates a UUID from a hex string -// Will panic if hex string is invalid - will panic even with hyphens and brackets -// Expects a clean string use Parse otherwise. -func NewHex(pUuid string) UUID { - bytes, err := hex.DecodeString(pUuid) - if err != nil { - panic(err) - } - return New(bytes) -} - -// Parse creates a UUID from a valid string representation. -// Accepts UUID string in following formats: -// 6ba7b8149dad11d180b400c04fd430c8 -// 6ba7b814-9dad-11d1-80b4-00c04fd430c8 -// {6ba7b814-9dad-11d1-80b4-00c04fd430c8} -// urn:uuid:6ba7b814-9dad-11d1-80b4-00c04fd430c8 -// [6ba7b814-9dad-11d1-80b4-00c04fd430c8] -// -func Parse(pUUID string) (UUID, error) { - md := parseUUIDRegex.FindStringSubmatch(pUUID) - if md == nil { - return nil, errors.New("uuid.Parse: invalid string") - } - return NewHex(md[2] + md[3] + md[4] + md[5] + md[6]), nil -} - -// Digest a namespace UUID and a UniqueName, which then marshals to -// a new UUID -func Digest(o, pNs UUID, pName UniqueName, pHash hash.Hash) { - // Hash writer never returns an error - pHash.Write(pNs.Bytes()) - pHash.Write([]byte(pName.String())) - o.Unmarshal(pHash.Sum(nil)[:o.Size()]) -} - -// Function provides a safe way to unmarshal bytes into an -// existing UUID. -// Checks for length. -func UnmarshalBinary(o UUID, pData []byte) error { - if len(pData) != o.Size() { - return errors.New("uuid.UnmarshalBinary: invalid length") - } - o.Unmarshal(pData) - return nil -} - -// ********************************************** UUID Names - -// A UUID Name is a simple string which implements UniqueName -// which satisfies the Stringer interface. -type Name string - -// Returns the name as a string. Satisfies the Stringer interface. -func (o Name) String() string { - return string(o) -} - -// NewName will create a unique name from several sources -func NewName(salt string, pNames ...UniqueName) UniqueName { - var s string - for _, s2 := range pNames { - s += s2.String() - } - return Name(s + salt) -} - -// UniqueName is a Stinger interface -// Made for easy passing of IPs, URLs, the several Address types, -// Buffers and any other type which implements Stringer -// string, []byte types and Hash sums will need to be cast to -// the Name type or some other type which implements -// Stringer or UniqueName -type UniqueName interface { - - // Many go types implement this method for use with printing - // Will convert the current type to its native string format - String() string -} - -// ********************************************** UUID Printing - -// A Format is a pattern used by the stringer interface with which to print -// the UUID. -type Format string - -const ( - Clean Format = "%x%x%x%x%x%x" - Curly Format = "{%x%x%x%x%x%x}" - Bracket Format = "(%x%x%x%x%x%x)" - - // This is the default format. - CleanHyphen Format = "%x-%x-%x-%x%x-%x" - - CurlyHyphen Format = "{%x-%x-%x-%x%x-%x}" - BracketHyphen Format = "(%x-%x-%x-%x%x-%x)" - GoIdFormat Format = "[%X-%X-%x-%X%X-%x]" -) - -// Gets the current default format pattern -func GetFormat() string { - return format -} - -// Switches the default printing format for ALL UUID strings -// A valid format will have 6 groups if the supplied Format does not -func SwitchFormat(pFormat Format) { - form := string(pFormat) - if strings.Count(form, "%") != 6 { - panic(errors.New("uuid.switchFormat: invalid formatting")) - } - format = form -} - -// Same as SwitchFormat but will make it uppercase -func SwitchFormatUpperCase(pFormat Format) { - form := strings.ToUpper(string(pFormat)) - SwitchFormat(Format(form)) -} - -// Compares whether each UUID is the same -func Equal(p1 UUID, p2 UUID) bool { - return bytes.Equal(p1.Bytes(), p2.Bytes()) -} - -// Format a UUID into a human readable string which matches the given Format -// Use this for one time formatting when setting the default using SwitchFormat -// is overkill. -func Formatter(pUUID UUID, pFormat Format) string { - form := string(pFormat) - if strings.Count(form, "%") != 6 { - panic(errors.New("uuid.Formatter: invalid formatting")) - } - return formatter(pUUID, form) -} - -// ********************************************** UUID Versions - -type UUIDVersion int - -const ( - NONE UUIDVersion = iota - RFC4122v1 - DunnoYetv2 - RFC4122v3 - RFC4122v4 - RFC4122v5 -) - -// *************************************************** Helpers - -// Retrieves the variant from the given byte -func variant(pVariant byte) byte { - switch pVariant & variantGet { - case ReservedRFC4122, 0xA0: - return ReservedRFC4122 - case ReservedMicrosoft: - return ReservedMicrosoft - case ReservedFuture: - return ReservedFuture - } - return ReservedNCS -} - -// not strictly required -func setVariant(pByte *byte, pVariant byte) { - switch pVariant { - case ReservedRFC4122: - *pByte &= variantSet - case ReservedFuture, ReservedMicrosoft: - *pByte &= 0x1F - case ReservedNCS: - *pByte &= 0x7F - default: - panic(errors.New("uuid.setVariant: invalid variant mask")) - } - *pByte |= pVariant -} - -// format a UUID into a human readable string -func formatter(pUUID UUID, pFormat string) string { - b := pUUID.Bytes() - return fmt.Sprintf(pFormat, b[0:4], b[4:6], b[6:8], b[8:9], b[9:10], b[10:pUUID.Size()]) -} - diff --git a/vendor/github.com/ugorji/go/LICENSE b/vendor/github.com/ugorji/go/LICENSE deleted file mode 100644 index 95a0f0541..000000000 --- a/vendor/github.com/ugorji/go/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012-2015 Ugorji Nwoke. -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/ugorji/go/codec/0doc.go b/vendor/github.com/ugorji/go/codec/0doc.go deleted file mode 100644 index bd7361c87..000000000 --- a/vendor/github.com/ugorji/go/codec/0doc.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -/* -High Performance, Feature-Rich Idiomatic Go codec/encoding library for -binc, msgpack, cbor, json. - -Supported Serialization formats are: - - - msgpack: https://github.com/msgpack/msgpack - - binc: http://github.com/ugorji/binc - - cbor: http://cbor.io http://tools.ietf.org/html/rfc7049 - - json: http://json.org http://tools.ietf.org/html/rfc7159 - - simple: - -To install: - - go get github.com/ugorji/go/codec - -This package understands the 'unsafe' tag, to allow using unsafe semantics: - - - When decoding into a struct, you need to read the field name as a string - so you can find the struct field it is mapped to. - Using `unsafe` will bypass the allocation and copying overhead of []byte->string conversion. - -To install using unsafe, pass the 'unsafe' tag: - - go get -tags=unsafe github.com/ugorji/go/codec - -For detailed usage information, read the primer at http://ugorji.net/blog/go-codec-primer . - -The idiomatic Go support is as seen in other encoding packages in -the standard library (ie json, xml, gob, etc). - -Rich Feature Set includes: - - - Simple but extremely powerful and feature-rich API - - Very High Performance. - Our extensive benchmarks show us outperforming Gob, Json, Bson, etc by 2-4X. - - Multiple conversions: - Package coerces types where appropriate - e.g. decode an int in the stream into a float, etc. - - Corner Cases: - Overflows, nil maps/slices, nil values in streams are handled correctly - - Standard field renaming via tags - - Support for omitting empty fields during an encoding - - Encoding from any value and decoding into pointer to any value - (struct, slice, map, primitives, pointers, interface{}, etc) - - Extensions to support efficient encoding/decoding of any named types - - Support encoding.(Binary|Text)(M|Unm)arshaler interfaces - - Decoding without a schema (into a interface{}). - Includes Options to configure what specific map or slice type to use - when decoding an encoded list or map into a nil interface{} - - Encode a struct as an array, and decode struct from an array in the data stream - - Comprehensive support for anonymous fields - - Fast (no-reflection) encoding/decoding of common maps and slices - - Code-generation for faster performance. - - Support binary (e.g. messagepack, cbor) and text (e.g. json) formats - - Support indefinite-length formats to enable true streaming - (for formats which support it e.g. json, cbor) - - Support canonical encoding, where a value is ALWAYS encoded as same sequence of bytes. - This mostly applies to maps, where iteration order is non-deterministic. - - NIL in data stream decoded as zero value - - Never silently skip data when decoding. - User decides whether to return an error or silently skip data when keys or indexes - in the data stream do not map to fields in the struct. - - Detect and error when encoding a cyclic reference (instead of stack overflow shutdown) - - Encode/Decode from/to chan types (for iterative streaming support) - - Drop-in replacement for encoding/json. `json:` key in struct tag supported. - - Provides a RPC Server and Client Codec for net/rpc communication protocol. - - Handle unique idiosynchracies of codecs e.g. - - For messagepack, configure how ambiguities in handling raw bytes are resolved - - For messagepack, provide rpc server/client codec to support - msgpack-rpc protocol defined at: - https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md - -Extension Support - -Users can register a function to handle the encoding or decoding of -their custom types. - -There are no restrictions on what the custom type can be. Some examples: - - type BisSet []int - type BitSet64 uint64 - type UUID string - type MyStructWithUnexportedFields struct { a int; b bool; c []int; } - type GifImage struct { ... } - -As an illustration, MyStructWithUnexportedFields would normally be -encoded as an empty map because it has no exported fields, while UUID -would be encoded as a string. However, with extension support, you can -encode any of these however you like. - -RPC - -RPC Client and Server Codecs are implemented, so the codecs can be used -with the standard net/rpc package. - -Usage - -The Handle is SAFE for concurrent READ, but NOT SAFE for concurrent modification. - -The Encoder and Decoder are NOT safe for concurrent use. - -Consequently, the usage model is basically: - - - Create and initialize the Handle before any use. - Once created, DO NOT modify it. - - Multiple Encoders or Decoders can now use the Handle concurrently. - They only read information off the Handle (never write). - - However, each Encoder or Decoder MUST not be used concurrently - - To re-use an Encoder/Decoder, call Reset(...) on it first. - This allows you use state maintained on the Encoder/Decoder. - -Sample usage model: - - // create and configure Handle - var ( - bh codec.BincHandle - mh codec.MsgpackHandle - ch codec.CborHandle - ) - - mh.MapType = reflect.TypeOf(map[string]interface{}(nil)) - - // configure extensions - // e.g. for msgpack, define functions and enable Time support for tag 1 - // mh.SetExt(reflect.TypeOf(time.Time{}), 1, myExt) - - // create and use decoder/encoder - var ( - r io.Reader - w io.Writer - b []byte - h = &bh // or mh to use msgpack - ) - - dec = codec.NewDecoder(r, h) - dec = codec.NewDecoderBytes(b, h) - err = dec.Decode(&v) - - enc = codec.NewEncoder(w, h) - enc = codec.NewEncoderBytes(&b, h) - err = enc.Encode(v) - - //RPC Server - go func() { - for { - conn, err := listener.Accept() - rpcCodec := codec.GoRpc.ServerCodec(conn, h) - //OR rpcCodec := codec.MsgpackSpecRpc.ServerCodec(conn, h) - rpc.ServeCodec(rpcCodec) - } - }() - - //RPC Communication (client side) - conn, err = net.Dial("tcp", "localhost:5555") - rpcCodec := codec.GoRpc.ClientCodec(conn, h) - //OR rpcCodec := codec.MsgpackSpecRpc.ClientCodec(conn, h) - client := rpc.NewClientWithCodec(rpcCodec) - -*/ -package codec - -// Benefits of go-codec: -// -// - encoding/json always reads whole file into memory first. -// This makes it unsuitable for parsing very large files. -// - encoding/xml cannot parse into a map[string]interface{} -// I found this out on reading https://github.com/clbanning/mxj - -// TODO: -// -// - optimization for codecgen: -// if len of entity is <= 3 words, then support a value receiver for encode. -// - (En|De)coder should store an error when it occurs. -// Until reset, subsequent calls return that error that was stored. -// This means that free panics must go away. -// All errors must be raised through errorf method. -// - Decoding using a chan is good, but incurs concurrency costs. -// This is because there's no fast way to use a channel without it -// having to switch goroutines constantly. -// Callback pattern is still the best. Maybe cnsider supporting something like: -// type X struct { -// Name string -// Ys []Y -// Ys chan <- Y -// Ys func(Y) -> call this function for each entry -// } -// - Consider adding a isZeroer interface { isZero() bool } -// It is used within isEmpty, for omitEmpty support. -// - Consider making Handle used AS-IS within the encoding/decoding session. -// This means that we don't cache Handle information within the (En|De)coder, -// except we really need it at Reset(...) -// - Consider adding math/big support -// - Consider reducing the size of the generated functions: -// Maybe use one loop, and put the conditionals in the loop. -// for ... { if cLen > 0 { if j == cLen { break } } else if dd.CheckBreak() { break } } diff --git a/vendor/github.com/ugorji/go/codec/binc.go b/vendor/github.com/ugorji/go/codec/binc.go deleted file mode 100644 index 766d26cf6..000000000 --- a/vendor/github.com/ugorji/go/codec/binc.go +++ /dev/null @@ -1,922 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "math" - "reflect" - "time" -) - -const bincDoPrune = true // No longer needed. Needed before as C lib did not support pruning. - -// vd as low 4 bits (there are 16 slots) -const ( - bincVdSpecial byte = iota - bincVdPosInt - bincVdNegInt - bincVdFloat - - bincVdString - bincVdByteArray - bincVdArray - bincVdMap - - bincVdTimestamp - bincVdSmallInt - bincVdUnicodeOther - bincVdSymbol - - bincVdDecimal - _ // open slot - _ // open slot - bincVdCustomExt = 0x0f -) - -const ( - bincSpNil byte = iota - bincSpFalse - bincSpTrue - bincSpNan - bincSpPosInf - bincSpNegInf - bincSpZeroFloat - bincSpZero - bincSpNegOne -) - -const ( - bincFlBin16 byte = iota - bincFlBin32 - _ // bincFlBin32e - bincFlBin64 - _ // bincFlBin64e - // others not currently supported -) - -type bincEncDriver struct { - e *Encoder - w encWriter - m map[string]uint16 // symbols - b [scratchByteArrayLen]byte - s uint16 // symbols sequencer - encNoSeparator -} - -func (e *bincEncDriver) IsBuiltinType(rt uintptr) bool { - return rt == timeTypId -} - -func (e *bincEncDriver) EncodeBuiltin(rt uintptr, v interface{}) { - if rt == timeTypId { - var bs []byte - switch x := v.(type) { - case time.Time: - bs = encodeTime(x) - case *time.Time: - bs = encodeTime(*x) - default: - e.e.errorf("binc error encoding builtin: expect time.Time, received %T", v) - } - e.w.writen1(bincVdTimestamp<<4 | uint8(len(bs))) - e.w.writeb(bs) - } -} - -func (e *bincEncDriver) EncodeNil() { - e.w.writen1(bincVdSpecial<<4 | bincSpNil) -} - -func (e *bincEncDriver) EncodeBool(b bool) { - if b { - e.w.writen1(bincVdSpecial<<4 | bincSpTrue) - } else { - e.w.writen1(bincVdSpecial<<4 | bincSpFalse) - } -} - -func (e *bincEncDriver) EncodeFloat32(f float32) { - if f == 0 { - e.w.writen1(bincVdSpecial<<4 | bincSpZeroFloat) - return - } - e.w.writen1(bincVdFloat<<4 | bincFlBin32) - bigenHelper{e.b[:4], e.w}.writeUint32(math.Float32bits(f)) -} - -func (e *bincEncDriver) EncodeFloat64(f float64) { - if f == 0 { - e.w.writen1(bincVdSpecial<<4 | bincSpZeroFloat) - return - } - bigen.PutUint64(e.b[:8], math.Float64bits(f)) - if bincDoPrune { - i := 7 - for ; i >= 0 && (e.b[i] == 0); i-- { - } - i++ - if i <= 6 { - e.w.writen1(bincVdFloat<<4 | 0x8 | bincFlBin64) - e.w.writen1(byte(i)) - e.w.writeb(e.b[:i]) - return - } - } - e.w.writen1(bincVdFloat<<4 | bincFlBin64) - e.w.writeb(e.b[:8]) -} - -func (e *bincEncDriver) encIntegerPrune(bd byte, pos bool, v uint64, lim uint8) { - if lim == 4 { - bigen.PutUint32(e.b[:lim], uint32(v)) - } else { - bigen.PutUint64(e.b[:lim], v) - } - if bincDoPrune { - i := pruneSignExt(e.b[:lim], pos) - e.w.writen1(bd | lim - 1 - byte(i)) - e.w.writeb(e.b[i:lim]) - } else { - e.w.writen1(bd | lim - 1) - e.w.writeb(e.b[:lim]) - } -} - -func (e *bincEncDriver) EncodeInt(v int64) { - const nbd byte = bincVdNegInt << 4 - if v >= 0 { - e.encUint(bincVdPosInt<<4, true, uint64(v)) - } else if v == -1 { - e.w.writen1(bincVdSpecial<<4 | bincSpNegOne) - } else { - e.encUint(bincVdNegInt<<4, false, uint64(-v)) - } -} - -func (e *bincEncDriver) EncodeUint(v uint64) { - e.encUint(bincVdPosInt<<4, true, v) -} - -func (e *bincEncDriver) encUint(bd byte, pos bool, v uint64) { - if v == 0 { - e.w.writen1(bincVdSpecial<<4 | bincSpZero) - } else if pos && v >= 1 && v <= 16 { - e.w.writen1(bincVdSmallInt<<4 | byte(v-1)) - } else if v <= math.MaxUint8 { - e.w.writen2(bd|0x0, byte(v)) - } else if v <= math.MaxUint16 { - e.w.writen1(bd | 0x01) - bigenHelper{e.b[:2], e.w}.writeUint16(uint16(v)) - } else if v <= math.MaxUint32 { - e.encIntegerPrune(bd, pos, v, 4) - } else { - e.encIntegerPrune(bd, pos, v, 8) - } -} - -func (e *bincEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, _ *Encoder) { - bs := ext.WriteExt(rv) - if bs == nil { - e.EncodeNil() - return - } - e.encodeExtPreamble(uint8(xtag), len(bs)) - e.w.writeb(bs) -} - -func (e *bincEncDriver) EncodeRawExt(re *RawExt, _ *Encoder) { - e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) - e.w.writeb(re.Data) -} - -func (e *bincEncDriver) encodeExtPreamble(xtag byte, length int) { - e.encLen(bincVdCustomExt<<4, uint64(length)) - e.w.writen1(xtag) -} - -func (e *bincEncDriver) EncodeArrayStart(length int) { - e.encLen(bincVdArray<<4, uint64(length)) -} - -func (e *bincEncDriver) EncodeMapStart(length int) { - e.encLen(bincVdMap<<4, uint64(length)) -} - -func (e *bincEncDriver) EncodeString(c charEncoding, v string) { - l := uint64(len(v)) - e.encBytesLen(c, l) - if l > 0 { - e.w.writestr(v) - } -} - -func (e *bincEncDriver) EncodeSymbol(v string) { - // if WriteSymbolsNoRefs { - // e.encodeString(c_UTF8, v) - // return - // } - - //symbols only offer benefit when string length > 1. - //This is because strings with length 1 take only 2 bytes to store - //(bd with embedded length, and single byte for string val). - - l := len(v) - if l == 0 { - e.encBytesLen(c_UTF8, 0) - return - } else if l == 1 { - e.encBytesLen(c_UTF8, 1) - e.w.writen1(v[0]) - return - } - if e.m == nil { - e.m = make(map[string]uint16, 16) - } - ui, ok := e.m[v] - if ok { - if ui <= math.MaxUint8 { - e.w.writen2(bincVdSymbol<<4, byte(ui)) - } else { - e.w.writen1(bincVdSymbol<<4 | 0x8) - bigenHelper{e.b[:2], e.w}.writeUint16(ui) - } - } else { - e.s++ - ui = e.s - //ui = uint16(atomic.AddUint32(&e.s, 1)) - e.m[v] = ui - var lenprec uint8 - if l <= math.MaxUint8 { - // lenprec = 0 - } else if l <= math.MaxUint16 { - lenprec = 1 - } else if int64(l) <= math.MaxUint32 { - lenprec = 2 - } else { - lenprec = 3 - } - if ui <= math.MaxUint8 { - e.w.writen2(bincVdSymbol<<4|0x0|0x4|lenprec, byte(ui)) - } else { - e.w.writen1(bincVdSymbol<<4 | 0x8 | 0x4 | lenprec) - bigenHelper{e.b[:2], e.w}.writeUint16(ui) - } - if lenprec == 0 { - e.w.writen1(byte(l)) - } else if lenprec == 1 { - bigenHelper{e.b[:2], e.w}.writeUint16(uint16(l)) - } else if lenprec == 2 { - bigenHelper{e.b[:4], e.w}.writeUint32(uint32(l)) - } else { - bigenHelper{e.b[:8], e.w}.writeUint64(uint64(l)) - } - e.w.writestr(v) - } -} - -func (e *bincEncDriver) EncodeStringBytes(c charEncoding, v []byte) { - l := uint64(len(v)) - e.encBytesLen(c, l) - if l > 0 { - e.w.writeb(v) - } -} - -func (e *bincEncDriver) encBytesLen(c charEncoding, length uint64) { - //TODO: support bincUnicodeOther (for now, just use string or bytearray) - if c == c_RAW { - e.encLen(bincVdByteArray<<4, length) - } else { - e.encLen(bincVdString<<4, length) - } -} - -func (e *bincEncDriver) encLen(bd byte, l uint64) { - if l < 12 { - e.w.writen1(bd | uint8(l+4)) - } else { - e.encLenNumber(bd, l) - } -} - -func (e *bincEncDriver) encLenNumber(bd byte, v uint64) { - if v <= math.MaxUint8 { - e.w.writen2(bd, byte(v)) - } else if v <= math.MaxUint16 { - e.w.writen1(bd | 0x01) - bigenHelper{e.b[:2], e.w}.writeUint16(uint16(v)) - } else if v <= math.MaxUint32 { - e.w.writen1(bd | 0x02) - bigenHelper{e.b[:4], e.w}.writeUint32(uint32(v)) - } else { - e.w.writen1(bd | 0x03) - bigenHelper{e.b[:8], e.w}.writeUint64(uint64(v)) - } -} - -//------------------------------------ - -type bincDecSymbol struct { - s string - b []byte - i uint16 -} - -type bincDecDriver struct { - d *Decoder - h *BincHandle - r decReader - br bool // bytes reader - bdRead bool - bd byte - vd byte - vs byte - noStreamingCodec - decNoSeparator - b [scratchByteArrayLen]byte - - // linear searching on this slice is ok, - // because we typically expect < 32 symbols in each stream. - s []bincDecSymbol -} - -func (d *bincDecDriver) readNextBd() { - d.bd = d.r.readn1() - d.vd = d.bd >> 4 - d.vs = d.bd & 0x0f - d.bdRead = true -} - -func (d *bincDecDriver) ContainerType() (vt valueType) { - if d.vd == bincVdSpecial && d.vs == bincSpNil { - return valueTypeNil - } else if d.vd == bincVdByteArray { - return valueTypeBytes - } else if d.vd == bincVdString { - return valueTypeString - } else if d.vd == bincVdArray { - return valueTypeArray - } else if d.vd == bincVdMap { - return valueTypeMap - } else { - // d.d.errorf("isContainerType: unsupported parameter: %v", vt) - } - return valueTypeUnset -} - -func (d *bincDecDriver) TryDecodeAsNil() bool { - if !d.bdRead { - d.readNextBd() - } - if d.bd == bincVdSpecial<<4|bincSpNil { - d.bdRead = false - return true - } - return false -} - -func (d *bincDecDriver) IsBuiltinType(rt uintptr) bool { - return rt == timeTypId -} - -func (d *bincDecDriver) DecodeBuiltin(rt uintptr, v interface{}) { - if !d.bdRead { - d.readNextBd() - } - if rt == timeTypId { - if d.vd != bincVdTimestamp { - d.d.errorf("Invalid d.vd. Expecting 0x%x. Received: 0x%x", bincVdTimestamp, d.vd) - return - } - tt, err := decodeTime(d.r.readx(int(d.vs))) - if err != nil { - panic(err) - } - var vt *time.Time = v.(*time.Time) - *vt = tt - d.bdRead = false - } -} - -func (d *bincDecDriver) decFloatPre(vs, defaultLen byte) { - if vs&0x8 == 0 { - d.r.readb(d.b[0:defaultLen]) - } else { - l := d.r.readn1() - if l > 8 { - d.d.errorf("At most 8 bytes used to represent float. Received: %v bytes", l) - return - } - for i := l; i < 8; i++ { - d.b[i] = 0 - } - d.r.readb(d.b[0:l]) - } -} - -func (d *bincDecDriver) decFloat() (f float64) { - //if true { f = math.Float64frombits(bigen.Uint64(d.r.readx(8))); break; } - if x := d.vs & 0x7; x == bincFlBin32 { - d.decFloatPre(d.vs, 4) - f = float64(math.Float32frombits(bigen.Uint32(d.b[0:4]))) - } else if x == bincFlBin64 { - d.decFloatPre(d.vs, 8) - f = math.Float64frombits(bigen.Uint64(d.b[0:8])) - } else { - d.d.errorf("only float32 and float64 are supported. d.vd: 0x%x, d.vs: 0x%x", d.vd, d.vs) - return - } - return -} - -func (d *bincDecDriver) decUint() (v uint64) { - // need to inline the code (interface conversion and type assertion expensive) - switch d.vs { - case 0: - v = uint64(d.r.readn1()) - case 1: - d.r.readb(d.b[6:8]) - v = uint64(bigen.Uint16(d.b[6:8])) - case 2: - d.b[4] = 0 - d.r.readb(d.b[5:8]) - v = uint64(bigen.Uint32(d.b[4:8])) - case 3: - d.r.readb(d.b[4:8]) - v = uint64(bigen.Uint32(d.b[4:8])) - case 4, 5, 6: - lim := int(7 - d.vs) - d.r.readb(d.b[lim:8]) - for i := 0; i < lim; i++ { - d.b[i] = 0 - } - v = uint64(bigen.Uint64(d.b[:8])) - case 7: - d.r.readb(d.b[:8]) - v = uint64(bigen.Uint64(d.b[:8])) - default: - d.d.errorf("unsigned integers with greater than 64 bits of precision not supported") - return - } - return -} - -func (d *bincDecDriver) decCheckInteger() (ui uint64, neg bool) { - if !d.bdRead { - d.readNextBd() - } - vd, vs := d.vd, d.vs - if vd == bincVdPosInt { - ui = d.decUint() - } else if vd == bincVdNegInt { - ui = d.decUint() - neg = true - } else if vd == bincVdSmallInt { - ui = uint64(d.vs) + 1 - } else if vd == bincVdSpecial { - if vs == bincSpZero { - //i = 0 - } else if vs == bincSpNegOne { - neg = true - ui = 1 - } else { - d.d.errorf("numeric decode fails for special value: d.vs: 0x%x", d.vs) - return - } - } else { - d.d.errorf("number can only be decoded from uint or int values. d.bd: 0x%x, d.vd: 0x%x", d.bd, d.vd) - return - } - return -} - -func (d *bincDecDriver) DecodeInt(bitsize uint8) (i int64) { - ui, neg := d.decCheckInteger() - i, overflow := chkOvf.SignedInt(ui) - if overflow { - d.d.errorf("simple: overflow converting %v to signed integer", ui) - return - } - if neg { - i = -i - } - if chkOvf.Int(i, bitsize) { - d.d.errorf("binc: overflow integer: %v", i) - return - } - d.bdRead = false - return -} - -func (d *bincDecDriver) DecodeUint(bitsize uint8) (ui uint64) { - ui, neg := d.decCheckInteger() - if neg { - d.d.errorf("Assigning negative signed value to unsigned type") - return - } - if chkOvf.Uint(ui, bitsize) { - d.d.errorf("binc: overflow integer: %v", ui) - return - } - d.bdRead = false - return -} - -func (d *bincDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) { - if !d.bdRead { - d.readNextBd() - } - vd, vs := d.vd, d.vs - if vd == bincVdSpecial { - d.bdRead = false - if vs == bincSpNan { - return math.NaN() - } else if vs == bincSpPosInf { - return math.Inf(1) - } else if vs == bincSpZeroFloat || vs == bincSpZero { - return - } else if vs == bincSpNegInf { - return math.Inf(-1) - } else { - d.d.errorf("Invalid d.vs decoding float where d.vd=bincVdSpecial: %v", d.vs) - return - } - } else if vd == bincVdFloat { - f = d.decFloat() - } else { - f = float64(d.DecodeInt(64)) - } - if chkOverflow32 && chkOvf.Float32(f) { - d.d.errorf("binc: float32 overflow: %v", f) - return - } - d.bdRead = false - return -} - -// bool can be decoded from bool only (single byte). -func (d *bincDecDriver) DecodeBool() (b bool) { - if !d.bdRead { - d.readNextBd() - } - if bd := d.bd; bd == (bincVdSpecial | bincSpFalse) { - // b = false - } else if bd == (bincVdSpecial | bincSpTrue) { - b = true - } else { - d.d.errorf("Invalid single-byte value for bool: %s: %x", msgBadDesc, d.bd) - return - } - d.bdRead = false - return -} - -func (d *bincDecDriver) ReadMapStart() (length int) { - if d.vd != bincVdMap { - d.d.errorf("Invalid d.vd for map. Expecting 0x%x. Got: 0x%x", bincVdMap, d.vd) - return - } - length = d.decLen() - d.bdRead = false - return -} - -func (d *bincDecDriver) ReadArrayStart() (length int) { - if d.vd != bincVdArray { - d.d.errorf("Invalid d.vd for array. Expecting 0x%x. Got: 0x%x", bincVdArray, d.vd) - return - } - length = d.decLen() - d.bdRead = false - return -} - -func (d *bincDecDriver) decLen() int { - if d.vs > 3 { - return int(d.vs - 4) - } - return int(d.decLenNumber()) -} - -func (d *bincDecDriver) decLenNumber() (v uint64) { - if x := d.vs; x == 0 { - v = uint64(d.r.readn1()) - } else if x == 1 { - d.r.readb(d.b[6:8]) - v = uint64(bigen.Uint16(d.b[6:8])) - } else if x == 2 { - d.r.readb(d.b[4:8]) - v = uint64(bigen.Uint32(d.b[4:8])) - } else { - d.r.readb(d.b[:8]) - v = bigen.Uint64(d.b[:8]) - } - return -} - -func (d *bincDecDriver) decStringAndBytes(bs []byte, withString, zerocopy bool) (bs2 []byte, s string) { - if !d.bdRead { - d.readNextBd() - } - if d.bd == bincVdSpecial<<4|bincSpNil { - d.bdRead = false - return - } - var slen int = -1 - // var ok bool - switch d.vd { - case bincVdString, bincVdByteArray: - slen = d.decLen() - if zerocopy { - if d.br { - bs2 = d.r.readx(slen) - } else if len(bs) == 0 { - bs2 = decByteSlice(d.r, slen, d.b[:]) - } else { - bs2 = decByteSlice(d.r, slen, bs) - } - } else { - bs2 = decByteSlice(d.r, slen, bs) - } - if withString { - s = string(bs2) - } - case bincVdSymbol: - // zerocopy doesn't apply for symbols, - // as the values must be stored in a table for later use. - // - //from vs: extract numSymbolBytes, containsStringVal, strLenPrecision, - //extract symbol - //if containsStringVal, read it and put in map - //else look in map for string value - var symbol uint16 - vs := d.vs - if vs&0x8 == 0 { - symbol = uint16(d.r.readn1()) - } else { - symbol = uint16(bigen.Uint16(d.r.readx(2))) - } - if d.s == nil { - d.s = make([]bincDecSymbol, 0, 16) - } - - if vs&0x4 == 0 { - for i := range d.s { - j := &d.s[i] - if j.i == symbol { - bs2 = j.b - if withString { - if j.s == "" && bs2 != nil { - j.s = string(bs2) - } - s = j.s - } - break - } - } - } else { - switch vs & 0x3 { - case 0: - slen = int(d.r.readn1()) - case 1: - slen = int(bigen.Uint16(d.r.readx(2))) - case 2: - slen = int(bigen.Uint32(d.r.readx(4))) - case 3: - slen = int(bigen.Uint64(d.r.readx(8))) - } - // since using symbols, do not store any part of - // the parameter bs in the map, as it might be a shared buffer. - // bs2 = decByteSlice(d.r, slen, bs) - bs2 = decByteSlice(d.r, slen, nil) - if withString { - s = string(bs2) - } - d.s = append(d.s, bincDecSymbol{i: symbol, s: s, b: bs2}) - } - default: - d.d.errorf("Invalid d.vd. Expecting string:0x%x, bytearray:0x%x or symbol: 0x%x. Got: 0x%x", - bincVdString, bincVdByteArray, bincVdSymbol, d.vd) - return - } - d.bdRead = false - return -} - -func (d *bincDecDriver) DecodeString() (s string) { - // DecodeBytes does not accomodate symbols, whose impl stores string version in map. - // Use decStringAndBytes directly. - // return string(d.DecodeBytes(d.b[:], true, true)) - _, s = d.decStringAndBytes(d.b[:], true, true) - return -} - -func (d *bincDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) { - if isstring { - bsOut, _ = d.decStringAndBytes(bs, false, zerocopy) - return - } - if !d.bdRead { - d.readNextBd() - } - if d.bd == bincVdSpecial<<4|bincSpNil { - d.bdRead = false - return nil - } - var clen int - if d.vd == bincVdString || d.vd == bincVdByteArray { - clen = d.decLen() - } else { - d.d.errorf("Invalid d.vd for bytes. Expecting string:0x%x or bytearray:0x%x. Got: 0x%x", - bincVdString, bincVdByteArray, d.vd) - return - } - d.bdRead = false - if zerocopy { - if d.br { - return d.r.readx(clen) - } else if len(bs) == 0 { - bs = d.b[:] - } - } - return decByteSlice(d.r, clen, bs) -} - -func (d *bincDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) { - if xtag > 0xff { - d.d.errorf("decodeExt: tag must be <= 0xff; got: %v", xtag) - return - } - realxtag1, xbs := d.decodeExtV(ext != nil, uint8(xtag)) - realxtag = uint64(realxtag1) - if ext == nil { - re := rv.(*RawExt) - re.Tag = realxtag - re.Data = detachZeroCopyBytes(d.br, re.Data, xbs) - } else { - ext.ReadExt(rv, xbs) - } - return -} - -func (d *bincDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs []byte) { - if !d.bdRead { - d.readNextBd() - } - if d.vd == bincVdCustomExt { - l := d.decLen() - xtag = d.r.readn1() - if verifyTag && xtag != tag { - d.d.errorf("Wrong extension tag. Got %b. Expecting: %v", xtag, tag) - return - } - xbs = d.r.readx(l) - } else if d.vd == bincVdByteArray { - xbs = d.DecodeBytes(nil, false, true) - } else { - d.d.errorf("Invalid d.vd for extensions (Expecting extensions or byte array). Got: 0x%x", d.vd) - return - } - d.bdRead = false - return -} - -func (d *bincDecDriver) DecodeNaked() { - if !d.bdRead { - d.readNextBd() - } - - n := &d.d.n - var decodeFurther bool - - switch d.vd { - case bincVdSpecial: - switch d.vs { - case bincSpNil: - n.v = valueTypeNil - case bincSpFalse: - n.v = valueTypeBool - n.b = false - case bincSpTrue: - n.v = valueTypeBool - n.b = true - case bincSpNan: - n.v = valueTypeFloat - n.f = math.NaN() - case bincSpPosInf: - n.v = valueTypeFloat - n.f = math.Inf(1) - case bincSpNegInf: - n.v = valueTypeFloat - n.f = math.Inf(-1) - case bincSpZeroFloat: - n.v = valueTypeFloat - n.f = float64(0) - case bincSpZero: - n.v = valueTypeUint - n.u = uint64(0) // int8(0) - case bincSpNegOne: - n.v = valueTypeInt - n.i = int64(-1) // int8(-1) - default: - d.d.errorf("decodeNaked: Unrecognized special value 0x%x", d.vs) - } - case bincVdSmallInt: - n.v = valueTypeUint - n.u = uint64(int8(d.vs)) + 1 // int8(d.vs) + 1 - case bincVdPosInt: - n.v = valueTypeUint - n.u = d.decUint() - case bincVdNegInt: - n.v = valueTypeInt - n.i = -(int64(d.decUint())) - case bincVdFloat: - n.v = valueTypeFloat - n.f = d.decFloat() - case bincVdSymbol: - n.v = valueTypeSymbol - n.s = d.DecodeString() - case bincVdString: - n.v = valueTypeString - n.s = d.DecodeString() - case bincVdByteArray: - n.v = valueTypeBytes - n.l = d.DecodeBytes(nil, false, false) - case bincVdTimestamp: - n.v = valueTypeTimestamp - tt, err := decodeTime(d.r.readx(int(d.vs))) - if err != nil { - panic(err) - } - n.t = tt - case bincVdCustomExt: - n.v = valueTypeExt - l := d.decLen() - n.u = uint64(d.r.readn1()) - n.l = d.r.readx(l) - case bincVdArray: - n.v = valueTypeArray - decodeFurther = true - case bincVdMap: - n.v = valueTypeMap - decodeFurther = true - default: - d.d.errorf("decodeNaked: Unrecognized d.vd: 0x%x", d.vd) - } - - if !decodeFurther { - d.bdRead = false - } - if n.v == valueTypeUint && d.h.SignedInteger { - n.v = valueTypeInt - n.i = int64(n.u) - } - return -} - -//------------------------------------ - -//BincHandle is a Handle for the Binc Schema-Free Encoding Format -//defined at https://github.com/ugorji/binc . -// -//BincHandle currently supports all Binc features with the following EXCEPTIONS: -// - only integers up to 64 bits of precision are supported. -// big integers are unsupported. -// - Only IEEE 754 binary32 and binary64 floats are supported (ie Go float32 and float64 types). -// extended precision and decimal IEEE 754 floats are unsupported. -// - Only UTF-8 strings supported. -// Unicode_Other Binc types (UTF16, UTF32) are currently unsupported. -// -//Note that these EXCEPTIONS are temporary and full support is possible and may happen soon. -type BincHandle struct { - BasicHandle - binaryEncodingType -} - -func (h *BincHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { - return h.SetExt(rt, tag, &setExtWrapper{b: ext}) -} - -func (h *BincHandle) newEncDriver(e *Encoder) encDriver { - return &bincEncDriver{e: e, w: e.w} -} - -func (h *BincHandle) newDecDriver(d *Decoder) decDriver { - return &bincDecDriver{d: d, r: d.r, h: h, br: d.bytes} -} - -func (e *bincEncDriver) reset() { - e.w = e.e.w - e.s = 0 - e.m = nil -} - -func (d *bincDecDriver) reset() { - d.r = d.d.r - d.s = nil - d.bd, d.bdRead, d.vd, d.vs = 0, false, 0, 0 -} - -var _ decDriver = (*bincDecDriver)(nil) -var _ encDriver = (*bincEncDriver)(nil) diff --git a/vendor/github.com/ugorji/go/codec/cbor.go b/vendor/github.com/ugorji/go/codec/cbor.go deleted file mode 100644 index a224cd3a7..000000000 --- a/vendor/github.com/ugorji/go/codec/cbor.go +++ /dev/null @@ -1,585 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "math" - "reflect" -) - -const ( - cborMajorUint byte = iota - cborMajorNegInt - cborMajorBytes - cborMajorText - cborMajorArray - cborMajorMap - cborMajorTag - cborMajorOther -) - -const ( - cborBdFalse byte = 0xf4 + iota - cborBdTrue - cborBdNil - cborBdUndefined - cborBdExt - cborBdFloat16 - cborBdFloat32 - cborBdFloat64 -) - -const ( - cborBdIndefiniteBytes byte = 0x5f - cborBdIndefiniteString = 0x7f - cborBdIndefiniteArray = 0x9f - cborBdIndefiniteMap = 0xbf - cborBdBreak = 0xff -) - -const ( - CborStreamBytes byte = 0x5f - CborStreamString = 0x7f - CborStreamArray = 0x9f - CborStreamMap = 0xbf - CborStreamBreak = 0xff -) - -const ( - cborBaseUint byte = 0x00 - cborBaseNegInt = 0x20 - cborBaseBytes = 0x40 - cborBaseString = 0x60 - cborBaseArray = 0x80 - cborBaseMap = 0xa0 - cborBaseTag = 0xc0 - cborBaseSimple = 0xe0 -) - -// ------------------- - -type cborEncDriver struct { - noBuiltInTypes - encNoSeparator - e *Encoder - w encWriter - h *CborHandle - x [8]byte -} - -func (e *cborEncDriver) EncodeNil() { - e.w.writen1(cborBdNil) -} - -func (e *cborEncDriver) EncodeBool(b bool) { - if b { - e.w.writen1(cborBdTrue) - } else { - e.w.writen1(cborBdFalse) - } -} - -func (e *cborEncDriver) EncodeFloat32(f float32) { - e.w.writen1(cborBdFloat32) - bigenHelper{e.x[:4], e.w}.writeUint32(math.Float32bits(f)) -} - -func (e *cborEncDriver) EncodeFloat64(f float64) { - e.w.writen1(cborBdFloat64) - bigenHelper{e.x[:8], e.w}.writeUint64(math.Float64bits(f)) -} - -func (e *cborEncDriver) encUint(v uint64, bd byte) { - if v <= 0x17 { - e.w.writen1(byte(v) + bd) - } else if v <= math.MaxUint8 { - e.w.writen2(bd+0x18, uint8(v)) - } else if v <= math.MaxUint16 { - e.w.writen1(bd + 0x19) - bigenHelper{e.x[:2], e.w}.writeUint16(uint16(v)) - } else if v <= math.MaxUint32 { - e.w.writen1(bd + 0x1a) - bigenHelper{e.x[:4], e.w}.writeUint32(uint32(v)) - } else { // if v <= math.MaxUint64 { - e.w.writen1(bd + 0x1b) - bigenHelper{e.x[:8], e.w}.writeUint64(v) - } -} - -func (e *cborEncDriver) EncodeInt(v int64) { - if v < 0 { - e.encUint(uint64(-1-v), cborBaseNegInt) - } else { - e.encUint(uint64(v), cborBaseUint) - } -} - -func (e *cborEncDriver) EncodeUint(v uint64) { - e.encUint(v, cborBaseUint) -} - -func (e *cborEncDriver) encLen(bd byte, length int) { - e.encUint(uint64(length), bd) -} - -func (e *cborEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, en *Encoder) { - e.encUint(uint64(xtag), cborBaseTag) - if v := ext.ConvertExt(rv); v == nil { - e.EncodeNil() - } else { - en.encode(v) - } -} - -func (e *cborEncDriver) EncodeRawExt(re *RawExt, en *Encoder) { - e.encUint(uint64(re.Tag), cborBaseTag) - if re.Data != nil { - en.encode(re.Data) - } else if re.Value == nil { - e.EncodeNil() - } else { - en.encode(re.Value) - } -} - -func (e *cborEncDriver) EncodeArrayStart(length int) { - e.encLen(cborBaseArray, length) -} - -func (e *cborEncDriver) EncodeMapStart(length int) { - e.encLen(cborBaseMap, length) -} - -func (e *cborEncDriver) EncodeString(c charEncoding, v string) { - e.encLen(cborBaseString, len(v)) - e.w.writestr(v) -} - -func (e *cborEncDriver) EncodeSymbol(v string) { - e.EncodeString(c_UTF8, v) -} - -func (e *cborEncDriver) EncodeStringBytes(c charEncoding, v []byte) { - if c == c_RAW { - e.encLen(cborBaseBytes, len(v)) - } else { - e.encLen(cborBaseString, len(v)) - } - e.w.writeb(v) -} - -// ---------------------- - -type cborDecDriver struct { - d *Decoder - h *CborHandle - r decReader - b [scratchByteArrayLen]byte - br bool // bytes reader - bdRead bool - bd byte - noBuiltInTypes - decNoSeparator -} - -func (d *cborDecDriver) readNextBd() { - d.bd = d.r.readn1() - d.bdRead = true -} - -func (d *cborDecDriver) ContainerType() (vt valueType) { - if d.bd == cborBdNil { - return valueTypeNil - } else if d.bd == cborBdIndefiniteBytes || (d.bd >= cborBaseBytes && d.bd < cborBaseString) { - return valueTypeBytes - } else if d.bd == cborBdIndefiniteString || (d.bd >= cborBaseString && d.bd < cborBaseArray) { - return valueTypeString - } else if d.bd == cborBdIndefiniteArray || (d.bd >= cborBaseArray && d.bd < cborBaseMap) { - return valueTypeArray - } else if d.bd == cborBdIndefiniteMap || (d.bd >= cborBaseMap && d.bd < cborBaseTag) { - return valueTypeMap - } else { - // d.d.errorf("isContainerType: unsupported parameter: %v", vt) - } - return valueTypeUnset -} - -func (d *cborDecDriver) TryDecodeAsNil() bool { - if !d.bdRead { - d.readNextBd() - } - // treat Nil and Undefined as nil values - if d.bd == cborBdNil || d.bd == cborBdUndefined { - d.bdRead = false - return true - } - return false -} - -func (d *cborDecDriver) CheckBreak() bool { - if !d.bdRead { - d.readNextBd() - } - if d.bd == cborBdBreak { - d.bdRead = false - return true - } - return false -} - -func (d *cborDecDriver) decUint() (ui uint64) { - v := d.bd & 0x1f - if v <= 0x17 { - ui = uint64(v) - } else { - if v == 0x18 { - ui = uint64(d.r.readn1()) - } else if v == 0x19 { - ui = uint64(bigen.Uint16(d.r.readx(2))) - } else if v == 0x1a { - ui = uint64(bigen.Uint32(d.r.readx(4))) - } else if v == 0x1b { - ui = uint64(bigen.Uint64(d.r.readx(8))) - } else { - d.d.errorf("decUint: Invalid descriptor: %v", d.bd) - return - } - } - return -} - -func (d *cborDecDriver) decCheckInteger() (neg bool) { - if !d.bdRead { - d.readNextBd() - } - major := d.bd >> 5 - if major == cborMajorUint { - } else if major == cborMajorNegInt { - neg = true - } else { - d.d.errorf("invalid major: %v (bd: %v)", major, d.bd) - return - } - return -} - -func (d *cborDecDriver) DecodeInt(bitsize uint8) (i int64) { - neg := d.decCheckInteger() - ui := d.decUint() - // check if this number can be converted to an int without overflow - var overflow bool - if neg { - if i, overflow = chkOvf.SignedInt(ui + 1); overflow { - d.d.errorf("cbor: overflow converting %v to signed integer", ui+1) - return - } - i = -i - } else { - if i, overflow = chkOvf.SignedInt(ui); overflow { - d.d.errorf("cbor: overflow converting %v to signed integer", ui) - return - } - } - if chkOvf.Int(i, bitsize) { - d.d.errorf("cbor: overflow integer: %v", i) - return - } - d.bdRead = false - return -} - -func (d *cborDecDriver) DecodeUint(bitsize uint8) (ui uint64) { - if d.decCheckInteger() { - d.d.errorf("Assigning negative signed value to unsigned type") - return - } - ui = d.decUint() - if chkOvf.Uint(ui, bitsize) { - d.d.errorf("cbor: overflow integer: %v", ui) - return - } - d.bdRead = false - return -} - -func (d *cborDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) { - if !d.bdRead { - d.readNextBd() - } - if bd := d.bd; bd == cborBdFloat16 { - f = float64(math.Float32frombits(halfFloatToFloatBits(bigen.Uint16(d.r.readx(2))))) - } else if bd == cborBdFloat32 { - f = float64(math.Float32frombits(bigen.Uint32(d.r.readx(4)))) - } else if bd == cborBdFloat64 { - f = math.Float64frombits(bigen.Uint64(d.r.readx(8))) - } else if bd >= cborBaseUint && bd < cborBaseBytes { - f = float64(d.DecodeInt(64)) - } else { - d.d.errorf("Float only valid from float16/32/64: Invalid descriptor: %v", bd) - return - } - if chkOverflow32 && chkOvf.Float32(f) { - d.d.errorf("cbor: float32 overflow: %v", f) - return - } - d.bdRead = false - return -} - -// bool can be decoded from bool only (single byte). -func (d *cborDecDriver) DecodeBool() (b bool) { - if !d.bdRead { - d.readNextBd() - } - if bd := d.bd; bd == cborBdTrue { - b = true - } else if bd == cborBdFalse { - } else { - d.d.errorf("Invalid single-byte value for bool: %s: %x", msgBadDesc, d.bd) - return - } - d.bdRead = false - return -} - -func (d *cborDecDriver) ReadMapStart() (length int) { - d.bdRead = false - if d.bd == cborBdIndefiniteMap { - return -1 - } - return d.decLen() -} - -func (d *cborDecDriver) ReadArrayStart() (length int) { - d.bdRead = false - if d.bd == cborBdIndefiniteArray { - return -1 - } - return d.decLen() -} - -func (d *cborDecDriver) decLen() int { - return int(d.decUint()) -} - -func (d *cborDecDriver) decAppendIndefiniteBytes(bs []byte) []byte { - d.bdRead = false - for { - if d.CheckBreak() { - break - } - if major := d.bd >> 5; major != cborMajorBytes && major != cborMajorText { - d.d.errorf("cbor: expect bytes or string major type in indefinite string/bytes; got: %v, byte: %v", major, d.bd) - return nil - } - n := d.decLen() - oldLen := len(bs) - newLen := oldLen + n - if newLen > cap(bs) { - bs2 := make([]byte, newLen, 2*cap(bs)+n) - copy(bs2, bs) - bs = bs2 - } else { - bs = bs[:newLen] - } - d.r.readb(bs[oldLen:newLen]) - // bs = append(bs, d.r.readn()...) - d.bdRead = false - } - d.bdRead = false - return bs -} - -func (d *cborDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) { - if !d.bdRead { - d.readNextBd() - } - if d.bd == cborBdNil || d.bd == cborBdUndefined { - d.bdRead = false - return nil - } - if d.bd == cborBdIndefiniteBytes || d.bd == cborBdIndefiniteString { - if bs == nil { - return d.decAppendIndefiniteBytes(nil) - } - return d.decAppendIndefiniteBytes(bs[:0]) - } - clen := d.decLen() - d.bdRead = false - if zerocopy { - if d.br { - return d.r.readx(clen) - } else if len(bs) == 0 { - bs = d.b[:] - } - } - return decByteSlice(d.r, clen, bs) -} - -func (d *cborDecDriver) DecodeString() (s string) { - return string(d.DecodeBytes(d.b[:], true, true)) -} - -func (d *cborDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) { - if !d.bdRead { - d.readNextBd() - } - u := d.decUint() - d.bdRead = false - realxtag = u - if ext == nil { - re := rv.(*RawExt) - re.Tag = realxtag - d.d.decode(&re.Value) - } else if xtag != realxtag { - d.d.errorf("Wrong extension tag. Got %b. Expecting: %v", realxtag, xtag) - return - } else { - var v interface{} - d.d.decode(&v) - ext.UpdateExt(rv, v) - } - d.bdRead = false - return -} - -func (d *cborDecDriver) DecodeNaked() { - if !d.bdRead { - d.readNextBd() - } - - n := &d.d.n - var decodeFurther bool - - switch d.bd { - case cborBdNil: - n.v = valueTypeNil - case cborBdFalse: - n.v = valueTypeBool - n.b = false - case cborBdTrue: - n.v = valueTypeBool - n.b = true - case cborBdFloat16, cborBdFloat32: - n.v = valueTypeFloat - n.f = d.DecodeFloat(true) - case cborBdFloat64: - n.v = valueTypeFloat - n.f = d.DecodeFloat(false) - case cborBdIndefiniteBytes: - n.v = valueTypeBytes - n.l = d.DecodeBytes(nil, false, false) - case cborBdIndefiniteString: - n.v = valueTypeString - n.s = d.DecodeString() - case cborBdIndefiniteArray: - n.v = valueTypeArray - decodeFurther = true - case cborBdIndefiniteMap: - n.v = valueTypeMap - decodeFurther = true - default: - switch { - case d.bd >= cborBaseUint && d.bd < cborBaseNegInt: - if d.h.SignedInteger { - n.v = valueTypeInt - n.i = d.DecodeInt(64) - } else { - n.v = valueTypeUint - n.u = d.DecodeUint(64) - } - case d.bd >= cborBaseNegInt && d.bd < cborBaseBytes: - n.v = valueTypeInt - n.i = d.DecodeInt(64) - case d.bd >= cborBaseBytes && d.bd < cborBaseString: - n.v = valueTypeBytes - n.l = d.DecodeBytes(nil, false, false) - case d.bd >= cborBaseString && d.bd < cborBaseArray: - n.v = valueTypeString - n.s = d.DecodeString() - case d.bd >= cborBaseArray && d.bd < cborBaseMap: - n.v = valueTypeArray - decodeFurther = true - case d.bd >= cborBaseMap && d.bd < cborBaseTag: - n.v = valueTypeMap - decodeFurther = true - case d.bd >= cborBaseTag && d.bd < cborBaseSimple: - n.v = valueTypeExt - n.u = d.decUint() - n.l = nil - // d.bdRead = false - // d.d.decode(&re.Value) // handled by decode itself. - // decodeFurther = true - default: - d.d.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) - return - } - } - - if !decodeFurther { - d.bdRead = false - } - return -} - -// ------------------------- - -// CborHandle is a Handle for the CBOR encoding format, -// defined at http://tools.ietf.org/html/rfc7049 and documented further at http://cbor.io . -// -// CBOR is comprehensively supported, including support for: -// - indefinite-length arrays/maps/bytes/strings -// - (extension) tags in range 0..0xffff (0 .. 65535) -// - half, single and double-precision floats -// - all numbers (1, 2, 4 and 8-byte signed and unsigned integers) -// - nil, true, false, ... -// - arrays and maps, bytes and text strings -// -// None of the optional extensions (with tags) defined in the spec are supported out-of-the-box. -// Users can implement them as needed (using SetExt), including spec-documented ones: -// - timestamp, BigNum, BigFloat, Decimals, Encoded Text (e.g. URL, regexp, base64, MIME Message), etc. -// -// To encode with indefinite lengths (streaming), users will use -// (Must)Encode methods of *Encoder, along with writing CborStreamXXX constants. -// -// For example, to encode "one-byte" as an indefinite length string: -// var buf bytes.Buffer -// e := NewEncoder(&buf, new(CborHandle)) -// buf.WriteByte(CborStreamString) -// e.MustEncode("one-") -// e.MustEncode("byte") -// buf.WriteByte(CborStreamBreak) -// encodedBytes := buf.Bytes() -// var vv interface{} -// NewDecoderBytes(buf.Bytes(), new(CborHandle)).MustDecode(&vv) -// // Now, vv contains the same string "one-byte" -// -type CborHandle struct { - binaryEncodingType - BasicHandle -} - -func (h *CborHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) { - return h.SetExt(rt, tag, &setExtWrapper{i: ext}) -} - -func (h *CborHandle) newEncDriver(e *Encoder) encDriver { - return &cborEncDriver{e: e, w: e.w, h: h} -} - -func (h *CborHandle) newDecDriver(d *Decoder) decDriver { - return &cborDecDriver{d: d, r: d.r, h: h, br: d.bytes} -} - -func (e *cborEncDriver) reset() { - e.w = e.e.w -} - -func (d *cborDecDriver) reset() { - d.r = d.d.r - d.bd, d.bdRead = 0, false -} - -var _ decDriver = (*cborDecDriver)(nil) -var _ encDriver = (*cborEncDriver)(nil) diff --git a/vendor/github.com/ugorji/go/codec/decode.go b/vendor/github.com/ugorji/go/codec/decode.go deleted file mode 100644 index b87ea630e..000000000 --- a/vendor/github.com/ugorji/go/codec/decode.go +++ /dev/null @@ -1,2019 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "encoding" - "errors" - "fmt" - "io" - "reflect" - "time" -) - -// Some tagging information for error messages. -const ( - msgBadDesc = "Unrecognized descriptor byte" - msgDecCannotExpandArr = "cannot expand go array from %v to stream length: %v" -) - -var ( - onlyMapOrArrayCanDecodeIntoStructErr = errors.New("only encoded map or array can be decoded into a struct") - cannotDecodeIntoNilErr = errors.New("cannot decode into nil") -) - -// decReader abstracts the reading source, allowing implementations that can -// read from an io.Reader or directly off a byte slice with zero-copying. -type decReader interface { - unreadn1() - - // readx will use the implementation scratch buffer if possible i.e. n < len(scratchbuf), OR - // just return a view of the []byte being decoded from. - // Ensure you call detachZeroCopyBytes later if this needs to be sent outside codec control. - readx(n int) []byte - readb([]byte) - readn1() uint8 - readn1eof() (v uint8, eof bool) - numread() int // number of bytes read - track() - stopTrack() []byte -} - -type decReaderByteScanner interface { - io.Reader - io.ByteScanner -} - -type decDriver interface { - // this will check if the next token is a break. - CheckBreak() bool - TryDecodeAsNil() bool - // vt is one of: Bytes, String, Nil, Slice or Map. Return unSet if not known. - ContainerType() (vt valueType) - IsBuiltinType(rt uintptr) bool - DecodeBuiltin(rt uintptr, v interface{}) - - // DecodeNaked will decode primitives (number, bool, string, []byte) and RawExt. - // For maps and arrays, it will not do the decoding in-band, but will signal - // the decoder, so that is done later, by setting the decNaked.valueType field. - // - // Note: Numbers are decoded as int64, uint64, float64 only (no smaller sized number types). - // for extensions, DecodeNaked must read the tag and the []byte if it exists. - // if the []byte is not read, then kInterfaceNaked will treat it as a Handle - // that stores the subsequent value in-band, and complete reading the RawExt. - // - // extensions should also use readx to decode them, for efficiency. - // kInterface will extract the detached byte slice if it has to pass it outside its realm. - DecodeNaked() - DecodeInt(bitsize uint8) (i int64) - DecodeUint(bitsize uint8) (ui uint64) - DecodeFloat(chkOverflow32 bool) (f float64) - DecodeBool() (b bool) - // DecodeString can also decode symbols. - // It looks redundant as DecodeBytes is available. - // However, some codecs (e.g. binc) support symbols and can - // return a pre-stored string value, meaning that it can bypass - // the cost of []byte->string conversion. - DecodeString() (s string) - - // DecodeBytes may be called directly, without going through reflection. - // Consequently, it must be designed to handle possible nil. - DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) - - // decodeExt will decode into a *RawExt or into an extension. - DecodeExt(v interface{}, xtag uint64, ext Ext) (realxtag uint64) - // decodeExt(verifyTag bool, tag byte) (xtag byte, xbs []byte) - ReadMapStart() int - ReadArrayStart() int - - reset() - uncacheRead() -} - -type decNoSeparator struct{} - -func (_ decNoSeparator) ReadEnd() {} -func (_ decNoSeparator) uncacheRead() {} - -type DecodeOptions struct { - // MapType specifies type to use during schema-less decoding of a map in the stream. - // If nil, we use map[interface{}]interface{} - MapType reflect.Type - - // SliceType specifies type to use during schema-less decoding of an array in the stream. - // If nil, we use []interface{} - SliceType reflect.Type - - // MaxInitLen defines the initial length that we "make" a collection (slice, chan or map) with. - // If 0 or negative, we default to a sensible value based on the size of an element in the collection. - // - // For example, when decoding, a stream may say that it has MAX_UINT elements. - // We should not auto-matically provision a slice of that length, to prevent Out-Of-Memory crash. - // Instead, we provision up to MaxInitLen, fill that up, and start appending after that. - MaxInitLen int - - // If ErrorIfNoField, return an error when decoding a map - // from a codec stream into a struct, and no matching struct field is found. - ErrorIfNoField bool - - // If ErrorIfNoArrayExpand, return an error when decoding a slice/array that cannot be expanded. - // For example, the stream contains an array of 8 items, but you are decoding into a [4]T array, - // or you are decoding into a slice of length 4 which is non-addressable (and so cannot be set). - ErrorIfNoArrayExpand bool - - // If SignedInteger, use the int64 during schema-less decoding of unsigned values (not uint64). - SignedInteger bool - - // MapValueReset controls how we decode into a map value. - // - // By default, we MAY retrieve the mapping for a key, and then decode into that. - // However, especially with big maps, that retrieval may be expensive and unnecessary - // if the stream already contains all that is necessary to recreate the value. - // - // If true, we will never retrieve the previous mapping, - // but rather decode into a new value and set that in the map. - // - // If false, we will retrieve the previous mapping if necessary e.g. - // the previous mapping is a pointer, or is a struct or array with pre-set state, - // or is an interface. - MapValueReset bool - - // InterfaceReset controls how we decode into an interface. - // - // By default, when we see a field that is an interface{...}, - // or a map with interface{...} value, we will attempt decoding into the - // "contained" value. - // - // However, this prevents us from reading a string into an interface{} - // that formerly contained a number. - // - // If true, we will decode into a new "blank" value, and set that in the interface. - // If false, we will decode into whatever is contained in the interface. - InterfaceReset bool - - // InternString controls interning of strings during decoding. - // - // Some handles, e.g. json, typically will read map keys as strings. - // If the set of keys are finite, it may help reduce allocation to - // look them up from a map (than to allocate them afresh). - // - // Note: Handles will be smart when using the intern functionality. - // So everything will not be interned. - InternString bool -} - -// ------------------------------------ - -// ioDecByteScanner implements Read(), ReadByte(...), UnreadByte(...) methods -// of io.Reader, io.ByteScanner. -type ioDecByteScanner struct { - r io.Reader - l byte // last byte - ls byte // last byte status. 0: init-canDoNothing, 1: canRead, 2: canUnread - b [1]byte // tiny buffer for reading single bytes -} - -func (z *ioDecByteScanner) Read(p []byte) (n int, err error) { - var firstByte bool - if z.ls == 1 { - z.ls = 2 - p[0] = z.l - if len(p) == 1 { - n = 1 - return - } - firstByte = true - p = p[1:] - } - n, err = z.r.Read(p) - if n > 0 { - if err == io.EOF && n == len(p) { - err = nil // read was successful, so postpone EOF (till next time) - } - z.l = p[n-1] - z.ls = 2 - } - if firstByte { - n++ - } - return -} - -func (z *ioDecByteScanner) ReadByte() (c byte, err error) { - n, err := z.Read(z.b[:]) - if n == 1 { - c = z.b[0] - if err == io.EOF { - err = nil // read was successful, so postpone EOF (till next time) - } - } - return -} - -func (z *ioDecByteScanner) UnreadByte() (err error) { - x := z.ls - if x == 0 { - err = errors.New("cannot unread - nothing has been read") - } else if x == 1 { - err = errors.New("cannot unread - last byte has not been read") - } else if x == 2 { - z.ls = 1 - } - return -} - -// ioDecReader is a decReader that reads off an io.Reader -type ioDecReader struct { - br decReaderByteScanner - // temp byte array re-used internally for efficiency during read. - // shares buffer with Decoder, so we keep size of struct within 8 words. - x *[scratchByteArrayLen]byte - bs ioDecByteScanner - n int // num read - tr []byte // tracking bytes read - trb bool -} - -func (z *ioDecReader) numread() int { - return z.n -} - -func (z *ioDecReader) readx(n int) (bs []byte) { - if n <= 0 { - return - } - if n < len(z.x) { - bs = z.x[:n] - } else { - bs = make([]byte, n) - } - if _, err := io.ReadAtLeast(z.br, bs, n); err != nil { - panic(err) - } - z.n += len(bs) - if z.trb { - z.tr = append(z.tr, bs...) - } - return -} - -func (z *ioDecReader) readb(bs []byte) { - if len(bs) == 0 { - return - } - n, err := io.ReadAtLeast(z.br, bs, len(bs)) - z.n += n - if err != nil { - panic(err) - } - if z.trb { - z.tr = append(z.tr, bs...) - } -} - -func (z *ioDecReader) readn1() (b uint8) { - b, err := z.br.ReadByte() - if err != nil { - panic(err) - } - z.n++ - if z.trb { - z.tr = append(z.tr, b) - } - return b -} - -func (z *ioDecReader) readn1eof() (b uint8, eof bool) { - b, err := z.br.ReadByte() - if err == nil { - z.n++ - if z.trb { - z.tr = append(z.tr, b) - } - } else if err == io.EOF { - eof = true - } else { - panic(err) - } - return -} - -func (z *ioDecReader) unreadn1() { - err := z.br.UnreadByte() - if err != nil { - panic(err) - } - z.n-- - if z.trb { - if l := len(z.tr) - 1; l >= 0 { - z.tr = z.tr[:l] - } - } -} - -func (z *ioDecReader) track() { - if z.tr != nil { - z.tr = z.tr[:0] - } - z.trb = true -} - -func (z *ioDecReader) stopTrack() (bs []byte) { - z.trb = false - return z.tr -} - -// ------------------------------------ - -var bytesDecReaderCannotUnreadErr = errors.New("cannot unread last byte read") - -// bytesDecReader is a decReader that reads off a byte slice with zero copying -type bytesDecReader struct { - b []byte // data - c int // cursor - a int // available - t int // track start -} - -func (z *bytesDecReader) reset(in []byte) { - z.b = in - z.a = len(in) - z.c = 0 - z.t = 0 -} - -func (z *bytesDecReader) numread() int { - return z.c -} - -func (z *bytesDecReader) unreadn1() { - if z.c == 0 || len(z.b) == 0 { - panic(bytesDecReaderCannotUnreadErr) - } - z.c-- - z.a++ - return -} - -func (z *bytesDecReader) readx(n int) (bs []byte) { - // slicing from a non-constant start position is more expensive, - // as more computation is required to decipher the pointer start position. - // However, we do it only once, and it's better than reslicing both z.b and return value. - - if n <= 0 { - } else if z.a == 0 { - panic(io.EOF) - } else if n > z.a { - panic(io.ErrUnexpectedEOF) - } else { - c0 := z.c - z.c = c0 + n - z.a = z.a - n - bs = z.b[c0:z.c] - } - return -} - -func (z *bytesDecReader) readn1() (v uint8) { - if z.a == 0 { - panic(io.EOF) - } - v = z.b[z.c] - z.c++ - z.a-- - return -} - -func (z *bytesDecReader) readn1eof() (v uint8, eof bool) { - if z.a == 0 { - eof = true - return - } - v = z.b[z.c] - z.c++ - z.a-- - return -} - -func (z *bytesDecReader) readb(bs []byte) { - copy(bs, z.readx(len(bs))) -} - -func (z *bytesDecReader) track() { - z.t = z.c -} - -func (z *bytesDecReader) stopTrack() (bs []byte) { - return z.b[z.t:z.c] -} - -// ------------------------------------ - -type decFnInfo struct { - d *Decoder - ti *typeInfo - xfFn Ext - xfTag uint64 - seq seqType -} - -// ---------------------------------------- - -type decFn struct { - i decFnInfo - f func(*decFnInfo, reflect.Value) -} - -func (f *decFnInfo) builtin(rv reflect.Value) { - f.d.d.DecodeBuiltin(f.ti.rtid, rv.Addr().Interface()) -} - -func (f *decFnInfo) rawExt(rv reflect.Value) { - f.d.d.DecodeExt(rv.Addr().Interface(), 0, nil) -} - -func (f *decFnInfo) ext(rv reflect.Value) { - f.d.d.DecodeExt(rv.Addr().Interface(), f.xfTag, f.xfFn) -} - -func (f *decFnInfo) getValueForUnmarshalInterface(rv reflect.Value, indir int8) (v interface{}) { - if indir == -1 { - v = rv.Addr().Interface() - } else if indir == 0 { - v = rv.Interface() - } else { - for j := int8(0); j < indir; j++ { - if rv.IsNil() { - rv.Set(reflect.New(rv.Type().Elem())) - } - rv = rv.Elem() - } - v = rv.Interface() - } - return -} - -func (f *decFnInfo) selferUnmarshal(rv reflect.Value) { - f.getValueForUnmarshalInterface(rv, f.ti.csIndir).(Selfer).CodecDecodeSelf(f.d) -} - -func (f *decFnInfo) binaryUnmarshal(rv reflect.Value) { - bm := f.getValueForUnmarshalInterface(rv, f.ti.bunmIndir).(encoding.BinaryUnmarshaler) - xbs := f.d.d.DecodeBytes(nil, false, true) - if fnerr := bm.UnmarshalBinary(xbs); fnerr != nil { - panic(fnerr) - } -} - -func (f *decFnInfo) textUnmarshal(rv reflect.Value) { - tm := f.getValueForUnmarshalInterface(rv, f.ti.tunmIndir).(encoding.TextUnmarshaler) - fnerr := tm.UnmarshalText(f.d.d.DecodeBytes(f.d.b[:], true, true)) - if fnerr != nil { - panic(fnerr) - } -} - -func (f *decFnInfo) jsonUnmarshal(rv reflect.Value) { - tm := f.getValueForUnmarshalInterface(rv, f.ti.junmIndir).(jsonUnmarshaler) - // bs := f.d.d.DecodeBytes(f.d.b[:], true, true) - // grab the bytes to be read, as UnmarshalJSON needs the full JSON so as to unmarshal it itself. - fnerr := tm.UnmarshalJSON(f.d.nextValueBytes()) - if fnerr != nil { - panic(fnerr) - } -} - -func (f *decFnInfo) kErr(rv reflect.Value) { - f.d.errorf("no decoding function defined for kind %v", rv.Kind()) -} - -func (f *decFnInfo) kString(rv reflect.Value) { - rv.SetString(f.d.d.DecodeString()) -} - -func (f *decFnInfo) kBool(rv reflect.Value) { - rv.SetBool(f.d.d.DecodeBool()) -} - -func (f *decFnInfo) kInt(rv reflect.Value) { - rv.SetInt(f.d.d.DecodeInt(intBitsize)) -} - -func (f *decFnInfo) kInt64(rv reflect.Value) { - rv.SetInt(f.d.d.DecodeInt(64)) -} - -func (f *decFnInfo) kInt32(rv reflect.Value) { - rv.SetInt(f.d.d.DecodeInt(32)) -} - -func (f *decFnInfo) kInt8(rv reflect.Value) { - rv.SetInt(f.d.d.DecodeInt(8)) -} - -func (f *decFnInfo) kInt16(rv reflect.Value) { - rv.SetInt(f.d.d.DecodeInt(16)) -} - -func (f *decFnInfo) kFloat32(rv reflect.Value) { - rv.SetFloat(f.d.d.DecodeFloat(true)) -} - -func (f *decFnInfo) kFloat64(rv reflect.Value) { - rv.SetFloat(f.d.d.DecodeFloat(false)) -} - -func (f *decFnInfo) kUint8(rv reflect.Value) { - rv.SetUint(f.d.d.DecodeUint(8)) -} - -func (f *decFnInfo) kUint64(rv reflect.Value) { - rv.SetUint(f.d.d.DecodeUint(64)) -} - -func (f *decFnInfo) kUint(rv reflect.Value) { - rv.SetUint(f.d.d.DecodeUint(uintBitsize)) -} - -func (f *decFnInfo) kUintptr(rv reflect.Value) { - rv.SetUint(f.d.d.DecodeUint(uintBitsize)) -} - -func (f *decFnInfo) kUint32(rv reflect.Value) { - rv.SetUint(f.d.d.DecodeUint(32)) -} - -func (f *decFnInfo) kUint16(rv reflect.Value) { - rv.SetUint(f.d.d.DecodeUint(16)) -} - -// func (f *decFnInfo) kPtr(rv reflect.Value) { -// debugf(">>>>>>> ??? decode kPtr called - shouldn't get called") -// if rv.IsNil() { -// rv.Set(reflect.New(rv.Type().Elem())) -// } -// f.d.decodeValue(rv.Elem()) -// } - -// var kIntfCtr uint64 - -func (f *decFnInfo) kInterfaceNaked() (rvn reflect.Value) { - // nil interface: - // use some hieristics to decode it appropriately - // based on the detected next value in the stream. - d := f.d - d.d.DecodeNaked() - n := &d.n - if n.v == valueTypeNil { - return - } - // We cannot decode non-nil stream value into nil interface with methods (e.g. io.Reader). - // if num := f.ti.rt.NumMethod(); num > 0 { - if f.ti.numMeth > 0 { - d.errorf("cannot decode non-nil codec value into nil %v (%v methods)", f.ti.rt, f.ti.numMeth) - return - } - // var useRvn bool - switch n.v { - case valueTypeMap: - // if d.h.MapType == nil || d.h.MapType == mapIntfIntfTyp { - // } else if d.h.MapType == mapStrIntfTyp { // for json performance - // } - if d.mtid == 0 || d.mtid == mapIntfIntfTypId { - l := len(n.ms) - n.ms = append(n.ms, nil) - var v2 interface{} = &n.ms[l] - d.decode(v2) - rvn = reflect.ValueOf(v2).Elem() - n.ms = n.ms[:l] - } else if d.mtid == mapStrIntfTypId { // for json performance - l := len(n.ns) - n.ns = append(n.ns, nil) - var v2 interface{} = &n.ns[l] - d.decode(v2) - rvn = reflect.ValueOf(v2).Elem() - n.ns = n.ns[:l] - } else { - rvn = reflect.New(d.h.MapType).Elem() - d.decodeValue(rvn, nil) - } - case valueTypeArray: - // if d.h.SliceType == nil || d.h.SliceType == intfSliceTyp { - if d.stid == 0 || d.stid == intfSliceTypId { - l := len(n.ss) - n.ss = append(n.ss, nil) - var v2 interface{} = &n.ss[l] - d.decode(v2) - rvn = reflect.ValueOf(v2).Elem() - n.ss = n.ss[:l] - } else { - rvn = reflect.New(d.h.SliceType).Elem() - d.decodeValue(rvn, nil) - } - case valueTypeExt: - var v interface{} - tag, bytes := n.u, n.l // calling decode below might taint the values - if bytes == nil { - l := len(n.is) - n.is = append(n.is, nil) - v2 := &n.is[l] - d.decode(v2) - v = *v2 - n.is = n.is[:l] - } - bfn := d.h.getExtForTag(tag) - if bfn == nil { - var re RawExt - re.Tag = tag - re.Data = detachZeroCopyBytes(d.bytes, nil, bytes) - rvn = reflect.ValueOf(re) - } else { - rvnA := reflect.New(bfn.rt) - rvn = rvnA.Elem() - if bytes != nil { - bfn.ext.ReadExt(rvnA.Interface(), bytes) - } else { - bfn.ext.UpdateExt(rvnA.Interface(), v) - } - } - case valueTypeNil: - // no-op - case valueTypeInt: - rvn = reflect.ValueOf(&n.i).Elem() - case valueTypeUint: - rvn = reflect.ValueOf(&n.u).Elem() - case valueTypeFloat: - rvn = reflect.ValueOf(&n.f).Elem() - case valueTypeBool: - rvn = reflect.ValueOf(&n.b).Elem() - case valueTypeString, valueTypeSymbol: - rvn = reflect.ValueOf(&n.s).Elem() - case valueTypeBytes: - rvn = reflect.ValueOf(&n.l).Elem() - case valueTypeTimestamp: - rvn = reflect.ValueOf(&n.t).Elem() - default: - panic(fmt.Errorf("kInterfaceNaked: unexpected valueType: %d", n.v)) - } - return -} - -func (f *decFnInfo) kInterface(rv reflect.Value) { - // debugf("\t===> kInterface") - - // Note: - // A consequence of how kInterface works, is that - // if an interface already contains something, we try - // to decode into what was there before. - // We do not replace with a generic value (as got from decodeNaked). - - var rvn reflect.Value - if rv.IsNil() { - rvn = f.kInterfaceNaked() - if rvn.IsValid() { - rv.Set(rvn) - } - } else if f.d.h.InterfaceReset { - rvn = f.kInterfaceNaked() - if rvn.IsValid() { - rv.Set(rvn) - } else { - // reset to zero value based on current type in there. - rv.Set(reflect.Zero(rv.Elem().Type())) - } - } else { - rvn = rv.Elem() - // Note: interface{} is settable, but underlying type may not be. - // Consequently, we have to set the reflect.Value directly. - // if underlying type is settable (e.g. ptr or interface), - // we just decode into it. - // Else we create a settable value, decode into it, and set on the interface. - if rvn.CanSet() { - f.d.decodeValue(rvn, nil) - } else { - rvn2 := reflect.New(rvn.Type()).Elem() - rvn2.Set(rvn) - f.d.decodeValue(rvn2, nil) - rv.Set(rvn2) - } - } -} - -func (f *decFnInfo) kStruct(rv reflect.Value) { - fti := f.ti - d := f.d - dd := d.d - cr := d.cr - ctyp := dd.ContainerType() - if ctyp == valueTypeMap { - containerLen := dd.ReadMapStart() - if containerLen == 0 { - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return - } - tisfi := fti.sfi - hasLen := containerLen >= 0 - if hasLen { - for j := 0; j < containerLen; j++ { - // rvkencname := dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapKey) - } - rvkencname := stringView(dd.DecodeBytes(f.d.b[:], true, true)) - // rvksi := ti.getForEncName(rvkencname) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if k := fti.indexForEncName(rvkencname); k > -1 { - si := tisfi[k] - if dd.TryDecodeAsNil() { - si.setToZeroValue(rv) - } else { - d.decodeValue(si.field(rv, true), nil) - } - } else { - d.structFieldNotFound(-1, rvkencname) - } - } - } else { - for j := 0; !dd.CheckBreak(); j++ { - // rvkencname := dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapKey) - } - rvkencname := stringView(dd.DecodeBytes(f.d.b[:], true, true)) - // rvksi := ti.getForEncName(rvkencname) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if k := fti.indexForEncName(rvkencname); k > -1 { - si := tisfi[k] - if dd.TryDecodeAsNil() { - si.setToZeroValue(rv) - } else { - d.decodeValue(si.field(rv, true), nil) - } - } else { - d.structFieldNotFound(-1, rvkencname) - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - } else if ctyp == valueTypeArray { - containerLen := dd.ReadArrayStart() - if containerLen == 0 { - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } - return - } - // Not much gain from doing it two ways for array. - // Arrays are not used as much for structs. - hasLen := containerLen >= 0 - for j, si := range fti.sfip { - if hasLen { - if j == containerLen { - break - } - } else if dd.CheckBreak() { - break - } - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - if dd.TryDecodeAsNil() { - si.setToZeroValue(rv) - } else { - d.decodeValue(si.field(rv, true), nil) - } - } - if containerLen > len(fti.sfip) { - // read remaining values and throw away - for j := len(fti.sfip); j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - d.structFieldNotFound(j, "") - } - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } - } else { - f.d.error(onlyMapOrArrayCanDecodeIntoStructErr) - return - } -} - -func (f *decFnInfo) kSlice(rv reflect.Value) { - // A slice can be set from a map or array in stream. - // This way, the order can be kept (as order is lost with map). - ti := f.ti - d := f.d - dd := d.d - rtelem0 := ti.rt.Elem() - ctyp := dd.ContainerType() - if ctyp == valueTypeBytes || ctyp == valueTypeString { - // you can only decode bytes or string in the stream into a slice or array of bytes - if !(ti.rtid == uint8SliceTypId || rtelem0.Kind() == reflect.Uint8) { - f.d.errorf("bytes or string in the stream must be decoded into a slice or array of bytes, not %v", ti.rt) - } - if f.seq == seqTypeChan { - bs2 := dd.DecodeBytes(nil, false, true) - ch := rv.Interface().(chan<- byte) - for _, b := range bs2 { - ch <- b - } - } else { - rvbs := rv.Bytes() - bs2 := dd.DecodeBytes(rvbs, false, false) - if rvbs == nil && bs2 != nil || rvbs != nil && bs2 == nil || len(bs2) != len(rvbs) { - if rv.CanSet() { - rv.SetBytes(bs2) - } else { - copy(rvbs, bs2) - } - } - } - return - } - - // array := f.seq == seqTypeChan - - slh, containerLenS := d.decSliceHelperStart() // only expects valueType(Array|Map) - - // // an array can never return a nil slice. so no need to check f.array here. - if containerLenS == 0 { - if f.seq == seqTypeSlice { - if rv.IsNil() { - rv.Set(reflect.MakeSlice(ti.rt, 0, 0)) - } else { - rv.SetLen(0) - } - } else if f.seq == seqTypeChan { - if rv.IsNil() { - rv.Set(reflect.MakeChan(ti.rt, 0)) - } - } - slh.End() - return - } - - rtelem := rtelem0 - for rtelem.Kind() == reflect.Ptr { - rtelem = rtelem.Elem() - } - fn := d.getDecFn(rtelem, true, true) - - var rv0, rv9 reflect.Value - rv0 = rv - rvChanged := false - - // for j := 0; j < containerLenS; j++ { - var rvlen int - if containerLenS > 0 { // hasLen - if f.seq == seqTypeChan { - if rv.IsNil() { - rvlen, _ = decInferLen(containerLenS, f.d.h.MaxInitLen, int(rtelem0.Size())) - rv.Set(reflect.MakeChan(ti.rt, rvlen)) - } - // handle chan specially: - for j := 0; j < containerLenS; j++ { - rv9 = reflect.New(rtelem0).Elem() - slh.ElemContainerState(j) - d.decodeValue(rv9, fn) - rv.Send(rv9) - } - } else { // slice or array - var truncated bool // says len of sequence is not same as expected number of elements - numToRead := containerLenS // if truncated, reset numToRead - - rvcap := rv.Cap() - rvlen = rv.Len() - if containerLenS > rvcap { - if f.seq == seqTypeArray { - d.arrayCannotExpand(rvlen, containerLenS) - } else { - oldRvlenGtZero := rvlen > 0 - rvlen, truncated = decInferLen(containerLenS, f.d.h.MaxInitLen, int(rtelem0.Size())) - if truncated { - if rvlen <= rvcap { - rv.SetLen(rvlen) - } else { - rv = reflect.MakeSlice(ti.rt, rvlen, rvlen) - rvChanged = true - } - } else { - rv = reflect.MakeSlice(ti.rt, rvlen, rvlen) - rvChanged = true - } - if rvChanged && oldRvlenGtZero && !isImmutableKind(rtelem0.Kind()) { - reflect.Copy(rv, rv0) // only copy up to length NOT cap i.e. rv0.Slice(0, rvcap) - } - rvcap = rvlen - } - numToRead = rvlen - } else if containerLenS != rvlen { - if f.seq == seqTypeSlice { - rv.SetLen(containerLenS) - rvlen = containerLenS - } - } - j := 0 - // we read up to the numToRead - for ; j < numToRead; j++ { - slh.ElemContainerState(j) - d.decodeValue(rv.Index(j), fn) - } - - // if slice, expand and read up to containerLenS (or EOF) iff truncated - // if array, swallow all the rest. - - if f.seq == seqTypeArray { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } else if truncated { // slice was truncated, as chan NOT in this block - for ; j < containerLenS; j++ { - rv = expandSliceValue(rv, 1) - rv9 = rv.Index(j) - if resetSliceElemToZeroValue { - rv9.Set(reflect.Zero(rtelem0)) - } - slh.ElemContainerState(j) - d.decodeValue(rv9, fn) - } - } - } - } else { - rvlen = rv.Len() - j := 0 - for ; !dd.CheckBreak(); j++ { - if f.seq == seqTypeChan { - slh.ElemContainerState(j) - rv9 = reflect.New(rtelem0).Elem() - d.decodeValue(rv9, fn) - rv.Send(rv9) - } else { - // if indefinite, etc, then expand the slice if necessary - var decodeIntoBlank bool - if j >= rvlen { - if f.seq == seqTypeArray { - d.arrayCannotExpand(rvlen, j+1) - decodeIntoBlank = true - } else { // if f.seq == seqTypeSlice - // rv = reflect.Append(rv, reflect.Zero(rtelem0)) // uses append logic, plus varargs - rv = expandSliceValue(rv, 1) - rv9 = rv.Index(j) - // rv.Index(rv.Len() - 1).Set(reflect.Zero(rtelem0)) - if resetSliceElemToZeroValue { - rv9.Set(reflect.Zero(rtelem0)) - } - rvlen++ - rvChanged = true - } - } else { // slice or array - rv9 = rv.Index(j) - } - slh.ElemContainerState(j) - if decodeIntoBlank { - d.swallow() - } else { // seqTypeSlice - d.decodeValue(rv9, fn) - } - } - } - if f.seq == seqTypeSlice { - if j < rvlen { - rv.SetLen(j) - } else if j == 0 && rv.IsNil() { - rv = reflect.MakeSlice(ti.rt, 0, 0) - rvChanged = true - } - } - } - slh.End() - - if rvChanged { - rv0.Set(rv) - } -} - -func (f *decFnInfo) kArray(rv reflect.Value) { - // f.d.decodeValue(rv.Slice(0, rv.Len())) - f.kSlice(rv.Slice(0, rv.Len())) -} - -func (f *decFnInfo) kMap(rv reflect.Value) { - d := f.d - dd := d.d - containerLen := dd.ReadMapStart() - cr := d.cr - ti := f.ti - if rv.IsNil() { - rv.Set(reflect.MakeMap(ti.rt)) - } - - if containerLen == 0 { - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return - } - - ktype, vtype := ti.rt.Key(), ti.rt.Elem() - ktypeId := reflect.ValueOf(ktype).Pointer() - vtypeKind := vtype.Kind() - var keyFn, valFn *decFn - var xtyp reflect.Type - for xtyp = ktype; xtyp.Kind() == reflect.Ptr; xtyp = xtyp.Elem() { - } - keyFn = d.getDecFn(xtyp, true, true) - for xtyp = vtype; xtyp.Kind() == reflect.Ptr; xtyp = xtyp.Elem() { - } - valFn = d.getDecFn(xtyp, true, true) - var mapGet, mapSet bool - if !f.d.h.MapValueReset { - // if pointer, mapGet = true - // if interface, mapGet = true if !DecodeNakedAlways (else false) - // if builtin, mapGet = false - // else mapGet = true - if vtypeKind == reflect.Ptr { - mapGet = true - } else if vtypeKind == reflect.Interface { - if !f.d.h.InterfaceReset { - mapGet = true - } - } else if !isImmutableKind(vtypeKind) { - mapGet = true - } - } - - var rvk, rvv, rvz reflect.Value - - // for j := 0; j < containerLen; j++ { - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - rvk = reflect.New(ktype).Elem() - if cr != nil { - cr.sendContainerState(containerMapKey) - } - d.decodeValue(rvk, keyFn) - - // special case if a byte array. - if ktypeId == intfTypId { - rvk = rvk.Elem() - if rvk.Type() == uint8SliceTyp { - rvk = reflect.ValueOf(d.string(rvk.Bytes())) - } - } - mapSet = true // set to false if u do a get, and its a pointer, and exists - if mapGet { - rvv = rv.MapIndex(rvk) - if rvv.IsValid() { - if vtypeKind == reflect.Ptr { - mapSet = false - } - } else { - if rvz.IsValid() { - rvz.Set(reflect.Zero(vtype)) - } else { - rvz = reflect.New(vtype).Elem() - } - rvv = rvz - } - } else { - if rvz.IsValid() { - rvz.Set(reflect.Zero(vtype)) - } else { - rvz = reflect.New(vtype).Elem() - } - rvv = rvz - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - d.decodeValue(rvv, valFn) - if mapSet { - rv.SetMapIndex(rvk, rvv) - } - } - } else { - for j := 0; !dd.CheckBreak(); j++ { - rvk = reflect.New(ktype).Elem() - if cr != nil { - cr.sendContainerState(containerMapKey) - } - d.decodeValue(rvk, keyFn) - - // special case if a byte array. - if ktypeId == intfTypId { - rvk = rvk.Elem() - if rvk.Type() == uint8SliceTyp { - rvk = reflect.ValueOf(d.string(rvk.Bytes())) - } - } - mapSet = true // set to false if u do a get, and its a pointer, and exists - if mapGet { - rvv = rv.MapIndex(rvk) - if rvv.IsValid() { - if vtypeKind == reflect.Ptr { - mapSet = false - } - } else { - if rvz.IsValid() { - rvz.Set(reflect.Zero(vtype)) - } else { - rvz = reflect.New(vtype).Elem() - } - rvv = rvz - } - } else { - if rvz.IsValid() { - rvz.Set(reflect.Zero(vtype)) - } else { - rvz = reflect.New(vtype).Elem() - } - rvv = rvz - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - d.decodeValue(rvv, valFn) - if mapSet { - rv.SetMapIndex(rvk, rvv) - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -type decRtidFn struct { - rtid uintptr - fn decFn -} - -// decNaked is used to keep track of the primitives decoded. -// Without it, we would have to decode each primitive and wrap it -// in an interface{}, causing an allocation. -// In this model, the primitives are decoded in a "pseudo-atomic" fashion, -// so we can rest assured that no other decoding happens while these -// primitives are being decoded. -// -// maps and arrays are not handled by this mechanism. -// However, RawExt is, and we accomodate for extensions that decode -// RawExt from DecodeNaked, but need to decode the value subsequently. -// kInterfaceNaked and swallow, which call DecodeNaked, handle this caveat. -// -// However, decNaked also keeps some arrays of default maps and slices -// used in DecodeNaked. This way, we can get a pointer to it -// without causing a new heap allocation. -// -// kInterfaceNaked will ensure that there is no allocation for the common -// uses. -type decNaked struct { - // r RawExt // used for RawExt, uint, []byte. - u uint64 - i int64 - f float64 - l []byte - s string - t time.Time - b bool - v valueType - - // stacks for reducing allocation - is []interface{} - ms []map[interface{}]interface{} - ns []map[string]interface{} - ss [][]interface{} - // rs []RawExt - - // keep arrays at the bottom? Chance is that they are not used much. - ia [4]interface{} - ma [4]map[interface{}]interface{} - na [4]map[string]interface{} - sa [4][]interface{} - // ra [2]RawExt -} - -func (n *decNaked) reset() { - if n.ss != nil { - n.ss = n.ss[:0] - } - if n.is != nil { - n.is = n.is[:0] - } - if n.ms != nil { - n.ms = n.ms[:0] - } - if n.ns != nil { - n.ns = n.ns[:0] - } -} - -// A Decoder reads and decodes an object from an input stream in the codec format. -type Decoder struct { - // hopefully, reduce derefencing cost by laying the decReader inside the Decoder. - // Try to put things that go together to fit within a cache line (8 words). - - d decDriver - // NOTE: Decoder shouldn't call it's read methods, - // as the handler MAY need to do some coordination. - r decReader - // sa [initCollectionCap]decRtidFn - h *BasicHandle - hh Handle - - be bool // is binary encoding - bytes bool // is bytes reader - js bool // is json handle - - rb bytesDecReader - ri ioDecReader - cr containerStateRecv - - s []decRtidFn - f map[uintptr]*decFn - - // _ uintptr // for alignment purposes, so next one starts from a cache line - - // cache the mapTypeId and sliceTypeId for faster comparisons - mtid uintptr - stid uintptr - - n decNaked - b [scratchByteArrayLen]byte - is map[string]string // used for interning strings -} - -// NewDecoder returns a Decoder for decoding a stream of bytes from an io.Reader. -// -// For efficiency, Users are encouraged to pass in a memory buffered reader -// (eg bufio.Reader, bytes.Buffer). -func NewDecoder(r io.Reader, h Handle) *Decoder { - d := newDecoder(h) - d.Reset(r) - return d -} - -// NewDecoderBytes returns a Decoder which efficiently decodes directly -// from a byte slice with zero copying. -func NewDecoderBytes(in []byte, h Handle) *Decoder { - d := newDecoder(h) - d.ResetBytes(in) - return d -} - -func newDecoder(h Handle) *Decoder { - d := &Decoder{hh: h, h: h.getBasicHandle(), be: h.isBinary()} - n := &d.n - // n.rs = n.ra[:0] - n.ms = n.ma[:0] - n.is = n.ia[:0] - n.ns = n.na[:0] - n.ss = n.sa[:0] - _, d.js = h.(*JsonHandle) - if d.h.InternString { - d.is = make(map[string]string, 32) - } - d.d = h.newDecDriver(d) - d.cr, _ = d.d.(containerStateRecv) - // d.d = h.newDecDriver(decReaderT{true, &d.rb, &d.ri}) - return d -} - -func (d *Decoder) resetCommon() { - d.n.reset() - d.d.reset() - // reset all things which were cached from the Handle, - // but could be changed. - d.mtid, d.stid = 0, 0 - if d.h.MapType != nil { - d.mtid = reflect.ValueOf(d.h.MapType).Pointer() - } - if d.h.SliceType != nil { - d.stid = reflect.ValueOf(d.h.SliceType).Pointer() - } -} - -func (d *Decoder) Reset(r io.Reader) { - d.ri.x = &d.b - // d.s = d.sa[:0] - d.ri.bs.r = r - var ok bool - d.ri.br, ok = r.(decReaderByteScanner) - if !ok { - d.ri.br = &d.ri.bs - } - d.r = &d.ri - d.resetCommon() -} - -func (d *Decoder) ResetBytes(in []byte) { - // d.s = d.sa[:0] - d.rb.reset(in) - d.r = &d.rb - d.resetCommon() -} - -// func (d *Decoder) sendContainerState(c containerState) { -// if d.cr != nil { -// d.cr.sendContainerState(c) -// } -// } - -// Decode decodes the stream from reader and stores the result in the -// value pointed to by v. v cannot be a nil pointer. v can also be -// a reflect.Value of a pointer. -// -// Note that a pointer to a nil interface is not a nil pointer. -// If you do not know what type of stream it is, pass in a pointer to a nil interface. -// We will decode and store a value in that nil interface. -// -// Sample usages: -// // Decoding into a non-nil typed value -// var f float32 -// err = codec.NewDecoder(r, handle).Decode(&f) -// -// // Decoding into nil interface -// var v interface{} -// dec := codec.NewDecoder(r, handle) -// err = dec.Decode(&v) -// -// When decoding into a nil interface{}, we will decode into an appropriate value based -// on the contents of the stream: -// - Numbers are decoded as float64, int64 or uint64. -// - Other values are decoded appropriately depending on the type: -// bool, string, []byte, time.Time, etc -// - Extensions are decoded as RawExt (if no ext function registered for the tag) -// Configurations exist on the Handle to override defaults -// (e.g. for MapType, SliceType and how to decode raw bytes). -// -// When decoding into a non-nil interface{} value, the mode of encoding is based on the -// type of the value. When a value is seen: -// - If an extension is registered for it, call that extension function -// - If it implements BinaryUnmarshaler, call its UnmarshalBinary(data []byte) error -// - Else decode it based on its reflect.Kind -// -// There are some special rules when decoding into containers (slice/array/map/struct). -// Decode will typically use the stream contents to UPDATE the container. -// - A map can be decoded from a stream map, by updating matching keys. -// - A slice can be decoded from a stream array, -// by updating the first n elements, where n is length of the stream. -// - A slice can be decoded from a stream map, by decoding as if -// it contains a sequence of key-value pairs. -// - A struct can be decoded from a stream map, by updating matching fields. -// - A struct can be decoded from a stream array, -// by updating fields as they occur in the struct (by index). -// -// When decoding a stream map or array with length of 0 into a nil map or slice, -// we reset the destination map or slice to a zero-length value. -// -// However, when decoding a stream nil, we reset the destination container -// to its "zero" value (e.g. nil for slice/map, etc). -// -func (d *Decoder) Decode(v interface{}) (err error) { - defer panicToErr(&err) - d.decode(v) - return -} - -// this is not a smart swallow, as it allocates objects and does unnecessary work. -func (d *Decoder) swallowViaHammer() { - var blank interface{} - d.decodeValue(reflect.ValueOf(&blank).Elem(), nil) -} - -func (d *Decoder) swallow() { - // smarter decode that just swallows the content - dd := d.d - if dd.TryDecodeAsNil() { - return - } - cr := d.cr - switch dd.ContainerType() { - case valueTypeMap: - containerLen := dd.ReadMapStart() - clenGtEqualZero := containerLen >= 0 - for j := 0; ; j++ { - if clenGtEqualZero { - if j >= containerLen { - break - } - } else if dd.CheckBreak() { - break - } - if cr != nil { - cr.sendContainerState(containerMapKey) - } - d.swallow() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - d.swallow() - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - case valueTypeArray: - containerLenS := dd.ReadArrayStart() - clenGtEqualZero := containerLenS >= 0 - for j := 0; ; j++ { - if clenGtEqualZero { - if j >= containerLenS { - break - } - } else if dd.CheckBreak() { - break - } - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - d.swallow() - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } - case valueTypeBytes: - dd.DecodeBytes(d.b[:], false, true) - case valueTypeString: - dd.DecodeBytes(d.b[:], true, true) - // dd.DecodeStringAsBytes(d.b[:]) - default: - // these are all primitives, which we can get from decodeNaked - // if RawExt using Value, complete the processing. - dd.DecodeNaked() - if n := &d.n; n.v == valueTypeExt && n.l == nil { - l := len(n.is) - n.is = append(n.is, nil) - v2 := &n.is[l] - d.decode(v2) - n.is = n.is[:l] - } - } -} - -// MustDecode is like Decode, but panics if unable to Decode. -// This provides insight to the code location that triggered the error. -func (d *Decoder) MustDecode(v interface{}) { - d.decode(v) -} - -func (d *Decoder) decode(iv interface{}) { - // if ics, ok := iv.(Selfer); ok { - // ics.CodecDecodeSelf(d) - // return - // } - - if d.d.TryDecodeAsNil() { - switch v := iv.(type) { - case nil: - case *string: - *v = "" - case *bool: - *v = false - case *int: - *v = 0 - case *int8: - *v = 0 - case *int16: - *v = 0 - case *int32: - *v = 0 - case *int64: - *v = 0 - case *uint: - *v = 0 - case *uint8: - *v = 0 - case *uint16: - *v = 0 - case *uint32: - *v = 0 - case *uint64: - *v = 0 - case *float32: - *v = 0 - case *float64: - *v = 0 - case *[]uint8: - *v = nil - case reflect.Value: - if v.Kind() != reflect.Ptr || v.IsNil() { - d.errNotValidPtrValue(v) - } - // d.chkPtrValue(v) - v = v.Elem() - if v.IsValid() { - v.Set(reflect.Zero(v.Type())) - } - default: - rv := reflect.ValueOf(iv) - if rv.Kind() != reflect.Ptr || rv.IsNil() { - d.errNotValidPtrValue(rv) - } - // d.chkPtrValue(rv) - rv = rv.Elem() - if rv.IsValid() { - rv.Set(reflect.Zero(rv.Type())) - } - } - return - } - - switch v := iv.(type) { - case nil: - d.error(cannotDecodeIntoNilErr) - return - - case Selfer: - v.CodecDecodeSelf(d) - - case reflect.Value: - if v.Kind() != reflect.Ptr || v.IsNil() { - d.errNotValidPtrValue(v) - } - // d.chkPtrValue(v) - d.decodeValueNotNil(v.Elem(), nil) - - case *string: - *v = d.d.DecodeString() - case *bool: - *v = d.d.DecodeBool() - case *int: - *v = int(d.d.DecodeInt(intBitsize)) - case *int8: - *v = int8(d.d.DecodeInt(8)) - case *int16: - *v = int16(d.d.DecodeInt(16)) - case *int32: - *v = int32(d.d.DecodeInt(32)) - case *int64: - *v = d.d.DecodeInt(64) - case *uint: - *v = uint(d.d.DecodeUint(uintBitsize)) - case *uint8: - *v = uint8(d.d.DecodeUint(8)) - case *uint16: - *v = uint16(d.d.DecodeUint(16)) - case *uint32: - *v = uint32(d.d.DecodeUint(32)) - case *uint64: - *v = d.d.DecodeUint(64) - case *float32: - *v = float32(d.d.DecodeFloat(true)) - case *float64: - *v = d.d.DecodeFloat(false) - case *[]uint8: - *v = d.d.DecodeBytes(*v, false, false) - - case *interface{}: - d.decodeValueNotNil(reflect.ValueOf(iv).Elem(), nil) - - default: - if !fastpathDecodeTypeSwitch(iv, d) { - d.decodeI(iv, true, false, false, false) - } - } -} - -func (d *Decoder) preDecodeValue(rv reflect.Value, tryNil bool) (rv2 reflect.Value, proceed bool) { - if tryNil && d.d.TryDecodeAsNil() { - // No need to check if a ptr, recursively, to determine - // whether to set value to nil. - // Just always set value to its zero type. - if rv.IsValid() { // rv.CanSet() // always settable, except it's invalid - rv.Set(reflect.Zero(rv.Type())) - } - return - } - - // If stream is not containing a nil value, then we can deref to the base - // non-pointer value, and decode into that. - for rv.Kind() == reflect.Ptr { - if rv.IsNil() { - rv.Set(reflect.New(rv.Type().Elem())) - } - rv = rv.Elem() - } - return rv, true -} - -func (d *Decoder) decodeI(iv interface{}, checkPtr, tryNil, checkFastpath, checkCodecSelfer bool) { - rv := reflect.ValueOf(iv) - if checkPtr { - if rv.Kind() != reflect.Ptr || rv.IsNil() { - d.errNotValidPtrValue(rv) - } - // d.chkPtrValue(rv) - } - rv, proceed := d.preDecodeValue(rv, tryNil) - if proceed { - fn := d.getDecFn(rv.Type(), checkFastpath, checkCodecSelfer) - fn.f(&fn.i, rv) - } -} - -func (d *Decoder) decodeValue(rv reflect.Value, fn *decFn) { - if rv, proceed := d.preDecodeValue(rv, true); proceed { - if fn == nil { - fn = d.getDecFn(rv.Type(), true, true) - } - fn.f(&fn.i, rv) - } -} - -func (d *Decoder) decodeValueNotNil(rv reflect.Value, fn *decFn) { - if rv, proceed := d.preDecodeValue(rv, false); proceed { - if fn == nil { - fn = d.getDecFn(rv.Type(), true, true) - } - fn.f(&fn.i, rv) - } -} - -func (d *Decoder) getDecFn(rt reflect.Type, checkFastpath, checkCodecSelfer bool) (fn *decFn) { - rtid := reflect.ValueOf(rt).Pointer() - - // retrieve or register a focus'ed function for this type - // to eliminate need to do the retrieval multiple times - - // if d.f == nil && d.s == nil { debugf("---->Creating new dec f map for type: %v\n", rt) } - var ok bool - if useMapForCodecCache { - fn, ok = d.f[rtid] - } else { - for i := range d.s { - v := &(d.s[i]) - if v.rtid == rtid { - fn, ok = &(v.fn), true - break - } - } - } - if ok { - return - } - - if useMapForCodecCache { - if d.f == nil { - d.f = make(map[uintptr]*decFn, initCollectionCap) - } - fn = new(decFn) - d.f[rtid] = fn - } else { - if d.s == nil { - d.s = make([]decRtidFn, 0, initCollectionCap) - } - d.s = append(d.s, decRtidFn{rtid: rtid}) - fn = &(d.s[len(d.s)-1]).fn - } - - // debugf("\tCreating new dec fn for type: %v\n", rt) - ti := d.h.getTypeInfo(rtid, rt) - fi := &(fn.i) - fi.d = d - fi.ti = ti - - // An extension can be registered for any type, regardless of the Kind - // (e.g. type BitSet int64, type MyStruct { / * unexported fields * / }, type X []int, etc. - // - // We can't check if it's an extension byte here first, because the user may have - // registered a pointer or non-pointer type, meaning we may have to recurse first - // before matching a mapped type, even though the extension byte is already detected. - // - // NOTE: if decoding into a nil interface{}, we return a non-nil - // value except even if the container registers a length of 0. - if checkCodecSelfer && ti.cs { - fn.f = (*decFnInfo).selferUnmarshal - } else if rtid == rawExtTypId { - fn.f = (*decFnInfo).rawExt - } else if d.d.IsBuiltinType(rtid) { - fn.f = (*decFnInfo).builtin - } else if xfFn := d.h.getExt(rtid); xfFn != nil { - fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext - fn.f = (*decFnInfo).ext - } else if supportMarshalInterfaces && d.be && ti.bunm { - fn.f = (*decFnInfo).binaryUnmarshal - } else if supportMarshalInterfaces && !d.be && d.js && ti.junm { - //If JSON, we should check JSONUnmarshal before textUnmarshal - fn.f = (*decFnInfo).jsonUnmarshal - } else if supportMarshalInterfaces && !d.be && ti.tunm { - fn.f = (*decFnInfo).textUnmarshal - } else { - rk := rt.Kind() - if fastpathEnabled && checkFastpath && (rk == reflect.Map || rk == reflect.Slice) { - if rt.PkgPath() == "" { - if idx := fastpathAV.index(rtid); idx != -1 { - fn.f = fastpathAV[idx].decfn - } - } else { - // use mapping for underlying type if there - ok = false - var rtu reflect.Type - if rk == reflect.Map { - rtu = reflect.MapOf(rt.Key(), rt.Elem()) - } else { - rtu = reflect.SliceOf(rt.Elem()) - } - rtuid := reflect.ValueOf(rtu).Pointer() - if idx := fastpathAV.index(rtuid); idx != -1 { - xfnf := fastpathAV[idx].decfn - xrt := fastpathAV[idx].rt - fn.f = func(xf *decFnInfo, xrv reflect.Value) { - // xfnf(xf, xrv.Convert(xrt)) - xfnf(xf, xrv.Addr().Convert(reflect.PtrTo(xrt)).Elem()) - } - } - } - } - if fn.f == nil { - switch rk { - case reflect.String: - fn.f = (*decFnInfo).kString - case reflect.Bool: - fn.f = (*decFnInfo).kBool - case reflect.Int: - fn.f = (*decFnInfo).kInt - case reflect.Int64: - fn.f = (*decFnInfo).kInt64 - case reflect.Int32: - fn.f = (*decFnInfo).kInt32 - case reflect.Int8: - fn.f = (*decFnInfo).kInt8 - case reflect.Int16: - fn.f = (*decFnInfo).kInt16 - case reflect.Float32: - fn.f = (*decFnInfo).kFloat32 - case reflect.Float64: - fn.f = (*decFnInfo).kFloat64 - case reflect.Uint8: - fn.f = (*decFnInfo).kUint8 - case reflect.Uint64: - fn.f = (*decFnInfo).kUint64 - case reflect.Uint: - fn.f = (*decFnInfo).kUint - case reflect.Uint32: - fn.f = (*decFnInfo).kUint32 - case reflect.Uint16: - fn.f = (*decFnInfo).kUint16 - // case reflect.Ptr: - // fn.f = (*decFnInfo).kPtr - case reflect.Uintptr: - fn.f = (*decFnInfo).kUintptr - case reflect.Interface: - fn.f = (*decFnInfo).kInterface - case reflect.Struct: - fn.f = (*decFnInfo).kStruct - case reflect.Chan: - fi.seq = seqTypeChan - fn.f = (*decFnInfo).kSlice - case reflect.Slice: - fi.seq = seqTypeSlice - fn.f = (*decFnInfo).kSlice - case reflect.Array: - fi.seq = seqTypeArray - fn.f = (*decFnInfo).kArray - case reflect.Map: - fn.f = (*decFnInfo).kMap - default: - fn.f = (*decFnInfo).kErr - } - } - } - - return -} - -func (d *Decoder) structFieldNotFound(index int, rvkencname string) { - // NOTE: rvkencname may be a stringView, so don't pass it to another function. - if d.h.ErrorIfNoField { - if index >= 0 { - d.errorf("no matching struct field found when decoding stream array at index %v", index) - return - } else if rvkencname != "" { - d.errorf("no matching struct field found when decoding stream map with key " + rvkencname) - return - } - } - d.swallow() -} - -func (d *Decoder) arrayCannotExpand(sliceLen, streamLen int) { - if d.h.ErrorIfNoArrayExpand { - d.errorf("cannot expand array len during decode from %v to %v", sliceLen, streamLen) - } -} - -func (d *Decoder) chkPtrValue(rv reflect.Value) { - // We can only decode into a non-nil pointer - if rv.Kind() == reflect.Ptr && !rv.IsNil() { - return - } - d.errNotValidPtrValue(rv) -} - -func (d *Decoder) errNotValidPtrValue(rv reflect.Value) { - if !rv.IsValid() { - d.error(cannotDecodeIntoNilErr) - return - } - if !rv.CanInterface() { - d.errorf("cannot decode into a value without an interface: %v", rv) - return - } - rvi := rv.Interface() - d.errorf("cannot decode into non-pointer or nil pointer. Got: %v, %T, %v", rv.Kind(), rvi, rvi) -} - -func (d *Decoder) error(err error) { - panic(err) -} - -func (d *Decoder) errorf(format string, params ...interface{}) { - params2 := make([]interface{}, len(params)+1) - params2[0] = d.r.numread() - copy(params2[1:], params) - err := fmt.Errorf("[pos %d]: "+format, params2...) - panic(err) -} - -func (d *Decoder) string(v []byte) (s string) { - if d.is != nil { - s, ok := d.is[string(v)] // no allocation here. - if !ok { - s = string(v) - d.is[s] = s - } - return s - } - return string(v) // don't return stringView, as we need a real string here. -} - -func (d *Decoder) intern(s string) { - if d.is != nil { - d.is[s] = s - } -} - -// nextValueBytes returns the next value in the stream as a set of bytes. -func (d *Decoder) nextValueBytes() []byte { - d.d.uncacheRead() - d.r.track() - d.swallow() - return d.r.stopTrack() -} - -// -------------------------------------------------- - -// decSliceHelper assists when decoding into a slice, from a map or an array in the stream. -// A slice can be set from a map or array in stream. This supports the MapBySlice interface. -type decSliceHelper struct { - d *Decoder - // ct valueType - array bool -} - -func (d *Decoder) decSliceHelperStart() (x decSliceHelper, clen int) { - dd := d.d - ctyp := dd.ContainerType() - if ctyp == valueTypeArray { - x.array = true - clen = dd.ReadArrayStart() - } else if ctyp == valueTypeMap { - clen = dd.ReadMapStart() * 2 - } else { - d.errorf("only encoded map or array can be decoded into a slice (%d)", ctyp) - } - // x.ct = ctyp - x.d = d - return -} - -func (x decSliceHelper) End() { - cr := x.d.cr - if cr == nil { - return - } - if x.array { - cr.sendContainerState(containerArrayEnd) - } else { - cr.sendContainerState(containerMapEnd) - } -} - -func (x decSliceHelper) ElemContainerState(index int) { - cr := x.d.cr - if cr == nil { - return - } - if x.array { - cr.sendContainerState(containerArrayElem) - } else { - if index%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } -} - -func decByteSlice(r decReader, clen int, bs []byte) (bsOut []byte) { - if clen == 0 { - return zeroByteSlice - } - if len(bs) == clen { - bsOut = bs - } else if cap(bs) >= clen { - bsOut = bs[:clen] - } else { - bsOut = make([]byte, clen) - } - r.readb(bsOut) - return -} - -func detachZeroCopyBytes(isBytesReader bool, dest []byte, in []byte) (out []byte) { - if xlen := len(in); xlen > 0 { - if isBytesReader || xlen <= scratchByteArrayLen { - if cap(dest) >= xlen { - out = dest[:xlen] - } else { - out = make([]byte, xlen) - } - copy(out, in) - return - } - } - return in -} - -// decInferLen will infer a sensible length, given the following: -// - clen: length wanted. -// - maxlen: max length to be returned. -// if <= 0, it is unset, and we infer it based on the unit size -// - unit: number of bytes for each element of the collection -func decInferLen(clen, maxlen, unit int) (rvlen int, truncated bool) { - // handle when maxlen is not set i.e. <= 0 - if clen <= 0 { - return - } - if maxlen <= 0 { - // no maxlen defined. Use maximum of 256K memory, with a floor of 4K items. - // maxlen = 256 * 1024 / unit - // if maxlen < (4 * 1024) { - // maxlen = 4 * 1024 - // } - if unit < (256 / 4) { - maxlen = 256 * 1024 / unit - } else { - maxlen = 4 * 1024 - } - } - if clen > maxlen { - rvlen = maxlen - truncated = true - } else { - rvlen = clen - } - return - // if clen <= 0 { - // rvlen = 0 - // } else if maxlen > 0 && clen > maxlen { - // rvlen = maxlen - // truncated = true - // } else { - // rvlen = clen - // } - // return -} - -// // implement overall decReader wrapping both, for possible use inline: -// type decReaderT struct { -// bytes bool -// rb *bytesDecReader -// ri *ioDecReader -// } -// -// // implement *Decoder as a decReader. -// // Using decReaderT (defined just above) caused performance degradation -// // possibly because of constant copying the value, -// // and some value->interface conversion causing allocation. -// func (d *Decoder) unreadn1() { -// if d.bytes { -// d.rb.unreadn1() -// } else { -// d.ri.unreadn1() -// } -// } -// ... for other methods of decReader. -// Testing showed that performance improvement was negligible. diff --git a/vendor/github.com/ugorji/go/codec/encode.go b/vendor/github.com/ugorji/go/codec/encode.go deleted file mode 100644 index a60daa236..000000000 --- a/vendor/github.com/ugorji/go/codec/encode.go +++ /dev/null @@ -1,1422 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "encoding" - "fmt" - "io" - "reflect" - "sort" - "sync" -) - -const ( - defEncByteBufSize = 1 << 6 // 4:16, 6:64, 8:256, 10:1024 -) - -// AsSymbolFlag defines what should be encoded as symbols. -type AsSymbolFlag uint8 - -const ( - // AsSymbolDefault is default. - // Currently, this means only encode struct field names as symbols. - // The default is subject to change. - AsSymbolDefault AsSymbolFlag = iota - - // AsSymbolAll means encode anything which could be a symbol as a symbol. - AsSymbolAll = 0xfe - - // AsSymbolNone means do not encode anything as a symbol. - AsSymbolNone = 1 << iota - - // AsSymbolMapStringKeys means encode keys in map[string]XXX as symbols. - AsSymbolMapStringKeysFlag - - // AsSymbolStructFieldName means encode struct field names as symbols. - AsSymbolStructFieldNameFlag -) - -// encWriter abstracts writing to a byte array or to an io.Writer. -type encWriter interface { - writeb([]byte) - writestr(string) - writen1(byte) - writen2(byte, byte) - atEndOfEncode() -} - -// encDriver abstracts the actual codec (binc vs msgpack, etc) -type encDriver interface { - IsBuiltinType(rt uintptr) bool - EncodeBuiltin(rt uintptr, v interface{}) - EncodeNil() - EncodeInt(i int64) - EncodeUint(i uint64) - EncodeBool(b bool) - EncodeFloat32(f float32) - EncodeFloat64(f float64) - // encodeExtPreamble(xtag byte, length int) - EncodeRawExt(re *RawExt, e *Encoder) - EncodeExt(v interface{}, xtag uint64, ext Ext, e *Encoder) - EncodeArrayStart(length int) - EncodeMapStart(length int) - EncodeString(c charEncoding, v string) - EncodeSymbol(v string) - EncodeStringBytes(c charEncoding, v []byte) - //TODO - //encBignum(f *big.Int) - //encStringRunes(c charEncoding, v []rune) - - reset() -} - -type encDriverAsis interface { - EncodeAsis(v []byte) -} - -type encNoSeparator struct{} - -func (_ encNoSeparator) EncodeEnd() {} - -type ioEncWriterWriter interface { - WriteByte(c byte) error - WriteString(s string) (n int, err error) - Write(p []byte) (n int, err error) -} - -type ioEncStringWriter interface { - WriteString(s string) (n int, err error) -} - -type EncodeOptions struct { - // Encode a struct as an array, and not as a map - StructToArray bool - - // Canonical representation means that encoding a value will always result in the same - // sequence of bytes. - // - // This only affects maps, as the iteration order for maps is random. - // - // The implementation MAY use the natural sort order for the map keys if possible: - // - // - If there is a natural sort order (ie for number, bool, string or []byte keys), - // then the map keys are first sorted in natural order and then written - // with corresponding map values to the strema. - // - If there is no natural sort order, then the map keys will first be - // encoded into []byte, and then sorted, - // before writing the sorted keys and the corresponding map values to the stream. - // - Canonical bool - - // CheckCircularRef controls whether we check for circular references - // and error fast during an encode. - // - // If enabled, an error is received if a pointer to a struct - // references itself either directly or through one of its fields (iteratively). - // - // This is opt-in, as there may be a performance hit to checking circular references. - CheckCircularRef bool - - // AsSymbols defines what should be encoded as symbols. - // - // Encoding as symbols can reduce the encoded size significantly. - // - // However, during decoding, each string to be encoded as a symbol must - // be checked to see if it has been seen before. Consequently, encoding time - // will increase if using symbols, because string comparisons has a clear cost. - // - // Sample values: - // AsSymbolNone - // AsSymbolAll - // AsSymbolMapStringKeys - // AsSymbolMapStringKeysFlag | AsSymbolStructFieldNameFlag - AsSymbols AsSymbolFlag -} - -// --------------------------------------------- - -type simpleIoEncWriterWriter struct { - w io.Writer - bw io.ByteWriter - sw ioEncStringWriter - bs [1]byte -} - -func (o *simpleIoEncWriterWriter) WriteByte(c byte) (err error) { - if o.bw != nil { - return o.bw.WriteByte(c) - } - // _, err = o.w.Write([]byte{c}) - o.bs[0] = c - _, err = o.w.Write(o.bs[:]) - return -} - -func (o *simpleIoEncWriterWriter) WriteString(s string) (n int, err error) { - if o.sw != nil { - return o.sw.WriteString(s) - } - // return o.w.Write([]byte(s)) - return o.w.Write(bytesView(s)) -} - -func (o *simpleIoEncWriterWriter) Write(p []byte) (n int, err error) { - return o.w.Write(p) -} - -// ---------------------------------------- - -// ioEncWriter implements encWriter and can write to an io.Writer implementation -type ioEncWriter struct { - w ioEncWriterWriter - s simpleIoEncWriterWriter - // x [8]byte // temp byte array re-used internally for efficiency -} - -func (z *ioEncWriter) writeb(bs []byte) { - if len(bs) == 0 { - return - } - n, err := z.w.Write(bs) - if err != nil { - panic(err) - } - if n != len(bs) { - panic(fmt.Errorf("incorrect num bytes written. Expecting: %v, Wrote: %v", len(bs), n)) - } -} - -func (z *ioEncWriter) writestr(s string) { - n, err := z.w.WriteString(s) - if err != nil { - panic(err) - } - if n != len(s) { - panic(fmt.Errorf("incorrect num bytes written. Expecting: %v, Wrote: %v", len(s), n)) - } -} - -func (z *ioEncWriter) writen1(b byte) { - if err := z.w.WriteByte(b); err != nil { - panic(err) - } -} - -func (z *ioEncWriter) writen2(b1 byte, b2 byte) { - z.writen1(b1) - z.writen1(b2) -} - -func (z *ioEncWriter) atEndOfEncode() {} - -// ---------------------------------------- - -// bytesEncWriter implements encWriter and can write to an byte slice. -// It is used by Marshal function. -type bytesEncWriter struct { - b []byte - c int // cursor - out *[]byte // write out on atEndOfEncode -} - -func (z *bytesEncWriter) writeb(s []byte) { - if len(s) > 0 { - c := z.grow(len(s)) - copy(z.b[c:], s) - } -} - -func (z *bytesEncWriter) writestr(s string) { - if len(s) > 0 { - c := z.grow(len(s)) - copy(z.b[c:], s) - } -} - -func (z *bytesEncWriter) writen1(b1 byte) { - c := z.grow(1) - z.b[c] = b1 -} - -func (z *bytesEncWriter) writen2(b1 byte, b2 byte) { - c := z.grow(2) - z.b[c] = b1 - z.b[c+1] = b2 -} - -func (z *bytesEncWriter) atEndOfEncode() { - *(z.out) = z.b[:z.c] -} - -func (z *bytesEncWriter) grow(n int) (oldcursor int) { - oldcursor = z.c - z.c = oldcursor + n - if z.c > len(z.b) { - if z.c > cap(z.b) { - // appendslice logic (if cap < 1024, *2, else *1.25): more expensive. many copy calls. - // bytes.Buffer model (2*cap + n): much better - // bs := make([]byte, 2*cap(z.b)+n) - bs := make([]byte, growCap(cap(z.b), 1, n)) - copy(bs, z.b[:oldcursor]) - z.b = bs - } else { - z.b = z.b[:cap(z.b)] - } - } - return -} - -// --------------------------------------------- - -type encFnInfo struct { - e *Encoder - ti *typeInfo - xfFn Ext - xfTag uint64 - seq seqType -} - -func (f *encFnInfo) builtin(rv reflect.Value) { - f.e.e.EncodeBuiltin(f.ti.rtid, rv.Interface()) -} - -func (f *encFnInfo) rawExt(rv reflect.Value) { - // rev := rv.Interface().(RawExt) - // f.e.e.EncodeRawExt(&rev, f.e) - var re *RawExt - if rv.CanAddr() { - re = rv.Addr().Interface().(*RawExt) - } else { - rev := rv.Interface().(RawExt) - re = &rev - } - f.e.e.EncodeRawExt(re, f.e) -} - -func (f *encFnInfo) ext(rv reflect.Value) { - // if this is a struct|array and it was addressable, then pass the address directly (not the value) - if k := rv.Kind(); (k == reflect.Struct || k == reflect.Array) && rv.CanAddr() { - rv = rv.Addr() - } - f.e.e.EncodeExt(rv.Interface(), f.xfTag, f.xfFn, f.e) -} - -func (f *encFnInfo) getValueForMarshalInterface(rv reflect.Value, indir int8) (v interface{}, proceed bool) { - if indir == 0 { - v = rv.Interface() - } else if indir == -1 { - // If a non-pointer was passed to Encode(), then that value is not addressable. - // Take addr if addresable, else copy value to an addressable value. - if rv.CanAddr() { - v = rv.Addr().Interface() - } else { - rv2 := reflect.New(rv.Type()) - rv2.Elem().Set(rv) - v = rv2.Interface() - // fmt.Printf("rv.Type: %v, rv2.Type: %v, v: %v\n", rv.Type(), rv2.Type(), v) - } - } else { - for j := int8(0); j < indir; j++ { - if rv.IsNil() { - f.e.e.EncodeNil() - return - } - rv = rv.Elem() - } - v = rv.Interface() - } - return v, true -} - -func (f *encFnInfo) selferMarshal(rv reflect.Value) { - if v, proceed := f.getValueForMarshalInterface(rv, f.ti.csIndir); proceed { - v.(Selfer).CodecEncodeSelf(f.e) - } -} - -func (f *encFnInfo) binaryMarshal(rv reflect.Value) { - if v, proceed := f.getValueForMarshalInterface(rv, f.ti.bmIndir); proceed { - bs, fnerr := v.(encoding.BinaryMarshaler).MarshalBinary() - f.e.marshal(bs, fnerr, false, c_RAW) - } -} - -func (f *encFnInfo) textMarshal(rv reflect.Value) { - if v, proceed := f.getValueForMarshalInterface(rv, f.ti.tmIndir); proceed { - // debugf(">>>> encoding.TextMarshaler: %T", rv.Interface()) - bs, fnerr := v.(encoding.TextMarshaler).MarshalText() - f.e.marshal(bs, fnerr, false, c_UTF8) - } -} - -func (f *encFnInfo) jsonMarshal(rv reflect.Value) { - if v, proceed := f.getValueForMarshalInterface(rv, f.ti.jmIndir); proceed { - bs, fnerr := v.(jsonMarshaler).MarshalJSON() - f.e.marshal(bs, fnerr, true, c_UTF8) - } -} - -func (f *encFnInfo) kBool(rv reflect.Value) { - f.e.e.EncodeBool(rv.Bool()) -} - -func (f *encFnInfo) kString(rv reflect.Value) { - f.e.e.EncodeString(c_UTF8, rv.String()) -} - -func (f *encFnInfo) kFloat64(rv reflect.Value) { - f.e.e.EncodeFloat64(rv.Float()) -} - -func (f *encFnInfo) kFloat32(rv reflect.Value) { - f.e.e.EncodeFloat32(float32(rv.Float())) -} - -func (f *encFnInfo) kInt(rv reflect.Value) { - f.e.e.EncodeInt(rv.Int()) -} - -func (f *encFnInfo) kUint(rv reflect.Value) { - f.e.e.EncodeUint(rv.Uint()) -} - -func (f *encFnInfo) kInvalid(rv reflect.Value) { - f.e.e.EncodeNil() -} - -func (f *encFnInfo) kErr(rv reflect.Value) { - f.e.errorf("unsupported kind %s, for %#v", rv.Kind(), rv) -} - -func (f *encFnInfo) kSlice(rv reflect.Value) { - ti := f.ti - // array may be non-addressable, so we have to manage with care - // (don't call rv.Bytes, rv.Slice, etc). - // E.g. type struct S{B [2]byte}; - // Encode(S{}) will bomb on "panic: slice of unaddressable array". - e := f.e - if f.seq != seqTypeArray { - if rv.IsNil() { - e.e.EncodeNil() - return - } - // If in this method, then there was no extension function defined. - // So it's okay to treat as []byte. - if ti.rtid == uint8SliceTypId { - e.e.EncodeStringBytes(c_RAW, rv.Bytes()) - return - } - } - cr := e.cr - rtelem := ti.rt.Elem() - l := rv.Len() - if ti.rtid == uint8SliceTypId || rtelem.Kind() == reflect.Uint8 { - switch f.seq { - case seqTypeArray: - // if l == 0 { e.e.encodeStringBytes(c_RAW, nil) } else - if rv.CanAddr() { - e.e.EncodeStringBytes(c_RAW, rv.Slice(0, l).Bytes()) - } else { - var bs []byte - if l <= cap(e.b) { - bs = e.b[:l] - } else { - bs = make([]byte, l) - } - reflect.Copy(reflect.ValueOf(bs), rv) - // TODO: Test that reflect.Copy works instead of manual one-by-one - // for i := 0; i < l; i++ { - // bs[i] = byte(rv.Index(i).Uint()) - // } - e.e.EncodeStringBytes(c_RAW, bs) - } - case seqTypeSlice: - e.e.EncodeStringBytes(c_RAW, rv.Bytes()) - case seqTypeChan: - bs := e.b[:0] - // do not use range, so that the number of elements encoded - // does not change, and encoding does not hang waiting on someone to close chan. - // for b := range rv.Interface().(<-chan byte) { - // bs = append(bs, b) - // } - ch := rv.Interface().(<-chan byte) - for i := 0; i < l; i++ { - bs = append(bs, <-ch) - } - e.e.EncodeStringBytes(c_RAW, bs) - } - return - } - - if ti.mbs { - if l%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", l) - return - } - e.e.EncodeMapStart(l / 2) - } else { - e.e.EncodeArrayStart(l) - } - - if l > 0 { - for rtelem.Kind() == reflect.Ptr { - rtelem = rtelem.Elem() - } - // if kind is reflect.Interface, do not pre-determine the - // encoding type, because preEncodeValue may break it down to - // a concrete type and kInterface will bomb. - var fn *encFn - if rtelem.Kind() != reflect.Interface { - rtelemid := reflect.ValueOf(rtelem).Pointer() - fn = e.getEncFn(rtelemid, rtelem, true, true) - } - // TODO: Consider perf implication of encoding odd index values as symbols if type is string - for j := 0; j < l; j++ { - if cr != nil { - if ti.mbs { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } else { - cr.sendContainerState(containerArrayElem) - } - } - if f.seq == seqTypeChan { - if rv2, ok2 := rv.Recv(); ok2 { - e.encodeValue(rv2, fn) - } else { - e.encode(nil) // WE HAVE TO DO SOMETHING, so nil if nothing received. - } - } else { - e.encodeValue(rv.Index(j), fn) - } - } - } - - if cr != nil { - if ti.mbs { - cr.sendContainerState(containerMapEnd) - } else { - cr.sendContainerState(containerArrayEnd) - } - } -} - -func (f *encFnInfo) kStruct(rv reflect.Value) { - fti := f.ti - e := f.e - cr := e.cr - tisfi := fti.sfip - toMap := !(fti.toArray || e.h.StructToArray) - newlen := len(fti.sfi) - - // Use sync.Pool to reduce allocating slices unnecessarily. - // The cost of sync.Pool is less than the cost of new allocation. - pool, poolv, fkvs := encStructPoolGet(newlen) - - // if toMap, use the sorted array. If toArray, use unsorted array (to match sequence in struct) - if toMap { - tisfi = fti.sfi - } - newlen = 0 - var kv stringRv - for _, si := range tisfi { - kv.r = si.field(rv, false) - if toMap { - if si.omitEmpty && isEmptyValue(kv.r) { - continue - } - kv.v = si.encName - } else { - // use the zero value. - // if a reference or struct, set to nil (so you do not output too much) - if si.omitEmpty && isEmptyValue(kv.r) { - switch kv.r.Kind() { - case reflect.Struct, reflect.Interface, reflect.Ptr, reflect.Array, - reflect.Map, reflect.Slice: - kv.r = reflect.Value{} //encode as nil - } - } - } - fkvs[newlen] = kv - newlen++ - } - - // debugf(">>>> kStruct: newlen: %v", newlen) - // sep := !e.be - ee := e.e //don't dereference everytime - - if toMap { - ee.EncodeMapStart(newlen) - // asSymbols := e.h.AsSymbols&AsSymbolStructFieldNameFlag != 0 - asSymbols := e.h.AsSymbols == AsSymbolDefault || e.h.AsSymbols&AsSymbolStructFieldNameFlag != 0 - for j := 0; j < newlen; j++ { - kv = fkvs[j] - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(kv.v) - } else { - ee.EncodeString(c_UTF8, kv.v) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(kv.r, nil) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - } else { - ee.EncodeArrayStart(newlen) - for j := 0; j < newlen; j++ { - kv = fkvs[j] - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - e.encodeValue(kv.r, nil) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } - } - - // do not use defer. Instead, use explicit pool return at end of function. - // defer has a cost we are trying to avoid. - // If there is a panic and these slices are not returned, it is ok. - if pool != nil { - pool.Put(poolv) - } -} - -// func (f *encFnInfo) kPtr(rv reflect.Value) { -// debugf(">>>>>>> ??? encode kPtr called - shouldn't get called") -// if rv.IsNil() { -// f.e.e.encodeNil() -// return -// } -// f.e.encodeValue(rv.Elem()) -// } - -// func (f *encFnInfo) kInterface(rv reflect.Value) { -// println("kInterface called") -// debug.PrintStack() -// if rv.IsNil() { -// f.e.e.EncodeNil() -// return -// } -// f.e.encodeValue(rv.Elem(), nil) -// } - -func (f *encFnInfo) kMap(rv reflect.Value) { - ee := f.e.e - if rv.IsNil() { - ee.EncodeNil() - return - } - - l := rv.Len() - ee.EncodeMapStart(l) - e := f.e - cr := e.cr - if l == 0 { - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return - } - var asSymbols bool - // determine the underlying key and val encFn's for the map. - // This eliminates some work which is done for each loop iteration i.e. - // rv.Type(), ref.ValueOf(rt).Pointer(), then check map/list for fn. - // - // However, if kind is reflect.Interface, do not pre-determine the - // encoding type, because preEncodeValue may break it down to - // a concrete type and kInterface will bomb. - var keyFn, valFn *encFn - ti := f.ti - rtkey := ti.rt.Key() - rtval := ti.rt.Elem() - rtkeyid := reflect.ValueOf(rtkey).Pointer() - // keyTypeIsString := f.ti.rt.Key().Kind() == reflect.String - var keyTypeIsString = rtkeyid == stringTypId - if keyTypeIsString { - asSymbols = e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - } else { - for rtkey.Kind() == reflect.Ptr { - rtkey = rtkey.Elem() - } - if rtkey.Kind() != reflect.Interface { - rtkeyid = reflect.ValueOf(rtkey).Pointer() - keyFn = e.getEncFn(rtkeyid, rtkey, true, true) - } - } - for rtval.Kind() == reflect.Ptr { - rtval = rtval.Elem() - } - if rtval.Kind() != reflect.Interface { - rtvalid := reflect.ValueOf(rtval).Pointer() - valFn = e.getEncFn(rtvalid, rtval, true, true) - } - mks := rv.MapKeys() - // for j, lmks := 0, len(mks); j < lmks; j++ { - - if e.h.Canonical { - e.kMapCanonical(rtkeyid, rtkey, rv, mks, valFn, asSymbols) - } else { - for j := range mks { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if keyTypeIsString { - if asSymbols { - ee.EncodeSymbol(mks[j].String()) - } else { - ee.EncodeString(c_UTF8, mks[j].String()) - } - } else { - e.encodeValue(mks[j], keyFn) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mks[j]), valFn) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (e *Encoder) kMapCanonical(rtkeyid uintptr, rtkey reflect.Type, rv reflect.Value, mks []reflect.Value, valFn *encFn, asSymbols bool) { - ee := e.e - cr := e.cr - // we previously did out-of-band if an extension was registered. - // This is not necessary, as the natural kind is sufficient for ordering. - - if rtkeyid == uint8SliceTypId { - mksv := make([]bytesRv, len(mks)) - for i, k := range mks { - v := &mksv[i] - v.r = k - v.v = k.Bytes() - } - sort.Sort(bytesRvSlice(mksv)) - for i := range mksv { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeStringBytes(c_RAW, mksv[i].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mksv[i].r), valFn) - } - } else { - switch rtkey.Kind() { - case reflect.Bool: - mksv := make([]boolRv, len(mks)) - for i, k := range mks { - v := &mksv[i] - v.r = k - v.v = k.Bool() - } - sort.Sort(boolRvSlice(mksv)) - for i := range mksv { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(mksv[i].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mksv[i].r), valFn) - } - case reflect.String: - mksv := make([]stringRv, len(mks)) - for i, k := range mks { - v := &mksv[i] - v.r = k - v.v = k.String() - } - sort.Sort(stringRvSlice(mksv)) - for i := range mksv { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(mksv[i].v) - } else { - ee.EncodeString(c_UTF8, mksv[i].v) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mksv[i].r), valFn) - } - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr: - mksv := make([]uintRv, len(mks)) - for i, k := range mks { - v := &mksv[i] - v.r = k - v.v = k.Uint() - } - sort.Sort(uintRvSlice(mksv)) - for i := range mksv { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(mksv[i].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mksv[i].r), valFn) - } - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - mksv := make([]intRv, len(mks)) - for i, k := range mks { - v := &mksv[i] - v.r = k - v.v = k.Int() - } - sort.Sort(intRvSlice(mksv)) - for i := range mksv { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(mksv[i].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mksv[i].r), valFn) - } - case reflect.Float32: - mksv := make([]floatRv, len(mks)) - for i, k := range mks { - v := &mksv[i] - v.r = k - v.v = k.Float() - } - sort.Sort(floatRvSlice(mksv)) - for i := range mksv { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(mksv[i].v)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mksv[i].r), valFn) - } - case reflect.Float64: - mksv := make([]floatRv, len(mks)) - for i, k := range mks { - v := &mksv[i] - v.r = k - v.v = k.Float() - } - sort.Sort(floatRvSlice(mksv)) - for i := range mksv { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(mksv[i].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mksv[i].r), valFn) - } - default: - // out-of-band - // first encode each key to a []byte first, then sort them, then record - var mksv []byte = make([]byte, 0, len(mks)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - mksbv := make([]bytesRv, len(mks)) - for i, k := range mks { - v := &mksbv[i] - l := len(mksv) - e2.MustEncode(k) - v.r = k - v.v = mksv[l:] - // fmt.Printf(">>>>> %s\n", mksv[l:]) - } - sort.Sort(bytesRvSlice(mksbv)) - for j := range mksbv { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(mksbv[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encodeValue(rv.MapIndex(mksbv[j].r), valFn) - } - } - } -} - -// -------------------------------------------------- - -// encFn encapsulates the captured variables and the encode function. -// This way, we only do some calculations one times, and pass to the -// code block that should be called (encapsulated in a function) -// instead of executing the checks every time. -type encFn struct { - i encFnInfo - f func(*encFnInfo, reflect.Value) -} - -// -------------------------------------------------- - -type encRtidFn struct { - rtid uintptr - fn encFn -} - -// An Encoder writes an object to an output stream in the codec format. -type Encoder struct { - // hopefully, reduce derefencing cost by laying the encWriter inside the Encoder - e encDriver - // NOTE: Encoder shouldn't call it's write methods, - // as the handler MAY need to do some coordination. - w encWriter - s []encRtidFn - ci set - be bool // is binary encoding - js bool // is json handle - - wi ioEncWriter - wb bytesEncWriter - - h *BasicHandle - hh Handle - - cr containerStateRecv - as encDriverAsis - - f map[uintptr]*encFn - b [scratchByteArrayLen]byte -} - -// NewEncoder returns an Encoder for encoding into an io.Writer. -// -// For efficiency, Users are encouraged to pass in a memory buffered writer -// (eg bufio.Writer, bytes.Buffer). -func NewEncoder(w io.Writer, h Handle) *Encoder { - e := newEncoder(h) - e.Reset(w) - return e -} - -// NewEncoderBytes returns an encoder for encoding directly and efficiently -// into a byte slice, using zero-copying to temporary slices. -// -// It will potentially replace the output byte slice pointed to. -// After encoding, the out parameter contains the encoded contents. -func NewEncoderBytes(out *[]byte, h Handle) *Encoder { - e := newEncoder(h) - e.ResetBytes(out) - return e -} - -func newEncoder(h Handle) *Encoder { - e := &Encoder{hh: h, h: h.getBasicHandle(), be: h.isBinary()} - _, e.js = h.(*JsonHandle) - e.e = h.newEncDriver(e) - e.as, _ = e.e.(encDriverAsis) - e.cr, _ = e.e.(containerStateRecv) - return e -} - -// Reset the Encoder with a new output stream. -// -// This accomodates using the state of the Encoder, -// where it has "cached" information about sub-engines. -func (e *Encoder) Reset(w io.Writer) { - ww, ok := w.(ioEncWriterWriter) - if ok { - e.wi.w = ww - } else { - sww := &e.wi.s - sww.w = w - sww.bw, _ = w.(io.ByteWriter) - sww.sw, _ = w.(ioEncStringWriter) - e.wi.w = sww - //ww = bufio.NewWriterSize(w, defEncByteBufSize) - } - e.w = &e.wi - e.e.reset() -} - -func (e *Encoder) ResetBytes(out *[]byte) { - in := *out - if in == nil { - in = make([]byte, defEncByteBufSize) - } - e.wb.b, e.wb.out, e.wb.c = in, out, 0 - e.w = &e.wb - e.e.reset() -} - -// func (e *Encoder) sendContainerState(c containerState) { -// if e.cr != nil { -// e.cr.sendContainerState(c) -// } -// } - -// Encode writes an object into a stream. -// -// Encoding can be configured via the struct tag for the fields. -// The "codec" key in struct field's tag value is the key name, -// followed by an optional comma and options. -// Note that the "json" key is used in the absence of the "codec" key. -// -// To set an option on all fields (e.g. omitempty on all fields), you -// can create a field called _struct, and set flags on it. -// -// Struct values "usually" encode as maps. Each exported struct field is encoded unless: -// - the field's tag is "-", OR -// - the field is empty (empty or the zero value) and its tag specifies the "omitempty" option. -// -// When encoding as a map, the first string in the tag (before the comma) -// is the map key string to use when encoding. -// -// However, struct values may encode as arrays. This happens when: -// - StructToArray Encode option is set, OR -// - the tag on the _struct field sets the "toarray" option -// -// Values with types that implement MapBySlice are encoded as stream maps. -// -// The empty values (for omitempty option) are false, 0, any nil pointer -// or interface value, and any array, slice, map, or string of length zero. -// -// Anonymous fields are encoded inline except: -// - the struct tag specifies a replacement name (first value) -// - the field is of an interface type -// -// Examples: -// -// // NOTE: 'json:' can be used as struct tag key, in place 'codec:' below. -// type MyStruct struct { -// _struct bool `codec:",omitempty"` //set omitempty for every field -// Field1 string `codec:"-"` //skip this field -// Field2 int `codec:"myName"` //Use key "myName" in encode stream -// Field3 int32 `codec:",omitempty"` //use key "Field3". Omit if empty. -// Field4 bool `codec:"f4,omitempty"` //use key "f4". Omit if empty. -// io.Reader //use key "Reader". -// MyStruct `codec:"my1" //use key "my1". -// MyStruct //inline it -// ... -// } -// -// type MyStruct struct { -// _struct bool `codec:",omitempty,toarray"` //set omitempty for every field -// //and encode struct as an array -// } -// -// The mode of encoding is based on the type of the value. When a value is seen: -// - If a Selfer, call its CodecEncodeSelf method -// - If an extension is registered for it, call that extension function -// - If it implements encoding.(Binary|Text|JSON)Marshaler, call its Marshal(Binary|Text|JSON) method -// - Else encode it based on its reflect.Kind -// -// Note that struct field names and keys in map[string]XXX will be treated as symbols. -// Some formats support symbols (e.g. binc) and will properly encode the string -// only once in the stream, and use a tag to refer to it thereafter. -func (e *Encoder) Encode(v interface{}) (err error) { - defer panicToErr(&err) - e.encode(v) - e.w.atEndOfEncode() - return -} - -// MustEncode is like Encode, but panics if unable to Encode. -// This provides insight to the code location that triggered the error. -func (e *Encoder) MustEncode(v interface{}) { - e.encode(v) - e.w.atEndOfEncode() -} - -// comment out these (Must)Write methods. They were only put there to support cbor. -// However, users already have access to the streams, and can write directly. -// -// // Write allows users write to the Encoder stream directly. -// func (e *Encoder) Write(bs []byte) (err error) { -// defer panicToErr(&err) -// e.w.writeb(bs) -// return -// } -// // MustWrite is like write, but panics if unable to Write. -// func (e *Encoder) MustWrite(bs []byte) { -// e.w.writeb(bs) -// } - -func (e *Encoder) encode(iv interface{}) { - // if ics, ok := iv.(Selfer); ok { - // ics.CodecEncodeSelf(e) - // return - // } - - switch v := iv.(type) { - case nil: - e.e.EncodeNil() - case Selfer: - v.CodecEncodeSelf(e) - - case reflect.Value: - e.encodeValue(v, nil) - - case string: - e.e.EncodeString(c_UTF8, v) - case bool: - e.e.EncodeBool(v) - case int: - e.e.EncodeInt(int64(v)) - case int8: - e.e.EncodeInt(int64(v)) - case int16: - e.e.EncodeInt(int64(v)) - case int32: - e.e.EncodeInt(int64(v)) - case int64: - e.e.EncodeInt(v) - case uint: - e.e.EncodeUint(uint64(v)) - case uint8: - e.e.EncodeUint(uint64(v)) - case uint16: - e.e.EncodeUint(uint64(v)) - case uint32: - e.e.EncodeUint(uint64(v)) - case uint64: - e.e.EncodeUint(v) - case float32: - e.e.EncodeFloat32(v) - case float64: - e.e.EncodeFloat64(v) - - case []uint8: - e.e.EncodeStringBytes(c_RAW, v) - - case *string: - e.e.EncodeString(c_UTF8, *v) - case *bool: - e.e.EncodeBool(*v) - case *int: - e.e.EncodeInt(int64(*v)) - case *int8: - e.e.EncodeInt(int64(*v)) - case *int16: - e.e.EncodeInt(int64(*v)) - case *int32: - e.e.EncodeInt(int64(*v)) - case *int64: - e.e.EncodeInt(*v) - case *uint: - e.e.EncodeUint(uint64(*v)) - case *uint8: - e.e.EncodeUint(uint64(*v)) - case *uint16: - e.e.EncodeUint(uint64(*v)) - case *uint32: - e.e.EncodeUint(uint64(*v)) - case *uint64: - e.e.EncodeUint(*v) - case *float32: - e.e.EncodeFloat32(*v) - case *float64: - e.e.EncodeFloat64(*v) - - case *[]uint8: - e.e.EncodeStringBytes(c_RAW, *v) - - default: - const checkCodecSelfer1 = true // in case T is passed, where *T is a Selfer, still checkCodecSelfer - if !fastpathEncodeTypeSwitch(iv, e) { - e.encodeI(iv, false, checkCodecSelfer1) - } - } -} - -func (e *Encoder) preEncodeValue(rv reflect.Value) (rv2 reflect.Value, sptr uintptr, proceed bool) { - // use a goto statement instead of a recursive function for ptr/interface. -TOP: - switch rv.Kind() { - case reflect.Ptr: - if rv.IsNil() { - e.e.EncodeNil() - return - } - rv = rv.Elem() - if e.h.CheckCircularRef && rv.Kind() == reflect.Struct { - // TODO: Movable pointers will be an issue here. Future problem. - sptr = rv.UnsafeAddr() - break TOP - } - goto TOP - case reflect.Interface: - if rv.IsNil() { - e.e.EncodeNil() - return - } - rv = rv.Elem() - goto TOP - case reflect.Slice, reflect.Map: - if rv.IsNil() { - e.e.EncodeNil() - return - } - case reflect.Invalid, reflect.Func: - e.e.EncodeNil() - return - } - - proceed = true - rv2 = rv - return -} - -func (e *Encoder) doEncodeValue(rv reflect.Value, fn *encFn, sptr uintptr, - checkFastpath, checkCodecSelfer bool) { - if sptr != 0 { - if (&e.ci).add(sptr) { - e.errorf("circular reference found: # %d", sptr) - } - } - if fn == nil { - rt := rv.Type() - rtid := reflect.ValueOf(rt).Pointer() - // fn = e.getEncFn(rtid, rt, true, true) - fn = e.getEncFn(rtid, rt, checkFastpath, checkCodecSelfer) - } - fn.f(&fn.i, rv) - if sptr != 0 { - (&e.ci).remove(sptr) - } -} - -func (e *Encoder) encodeI(iv interface{}, checkFastpath, checkCodecSelfer bool) { - if rv, sptr, proceed := e.preEncodeValue(reflect.ValueOf(iv)); proceed { - e.doEncodeValue(rv, nil, sptr, checkFastpath, checkCodecSelfer) - } -} - -func (e *Encoder) encodeValue(rv reflect.Value, fn *encFn) { - // if a valid fn is passed, it MUST BE for the dereferenced type of rv - if rv, sptr, proceed := e.preEncodeValue(rv); proceed { - e.doEncodeValue(rv, fn, sptr, true, true) - } -} - -func (e *Encoder) getEncFn(rtid uintptr, rt reflect.Type, checkFastpath, checkCodecSelfer bool) (fn *encFn) { - // rtid := reflect.ValueOf(rt).Pointer() - var ok bool - if useMapForCodecCache { - fn, ok = e.f[rtid] - } else { - for i := range e.s { - v := &(e.s[i]) - if v.rtid == rtid { - fn, ok = &(v.fn), true - break - } - } - } - if ok { - return - } - - if useMapForCodecCache { - if e.f == nil { - e.f = make(map[uintptr]*encFn, initCollectionCap) - } - fn = new(encFn) - e.f[rtid] = fn - } else { - if e.s == nil { - e.s = make([]encRtidFn, 0, initCollectionCap) - } - e.s = append(e.s, encRtidFn{rtid: rtid}) - fn = &(e.s[len(e.s)-1]).fn - } - - ti := e.h.getTypeInfo(rtid, rt) - fi := &(fn.i) - fi.e = e - fi.ti = ti - - if checkCodecSelfer && ti.cs { - fn.f = (*encFnInfo).selferMarshal - } else if rtid == rawExtTypId { - fn.f = (*encFnInfo).rawExt - } else if e.e.IsBuiltinType(rtid) { - fn.f = (*encFnInfo).builtin - } else if xfFn := e.h.getExt(rtid); xfFn != nil { - fi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext - fn.f = (*encFnInfo).ext - } else if supportMarshalInterfaces && e.be && ti.bm { - fn.f = (*encFnInfo).binaryMarshal - } else if supportMarshalInterfaces && !e.be && e.js && ti.jm { - //If JSON, we should check JSONMarshal before textMarshal - fn.f = (*encFnInfo).jsonMarshal - } else if supportMarshalInterfaces && !e.be && ti.tm { - fn.f = (*encFnInfo).textMarshal - } else { - rk := rt.Kind() - if fastpathEnabled && checkFastpath && (rk == reflect.Map || rk == reflect.Slice) { - if rt.PkgPath() == "" { // un-named slice or map - if idx := fastpathAV.index(rtid); idx != -1 { - fn.f = fastpathAV[idx].encfn - } - } else { - ok = false - // use mapping for underlying type if there - var rtu reflect.Type - if rk == reflect.Map { - rtu = reflect.MapOf(rt.Key(), rt.Elem()) - } else { - rtu = reflect.SliceOf(rt.Elem()) - } - rtuid := reflect.ValueOf(rtu).Pointer() - if idx := fastpathAV.index(rtuid); idx != -1 { - xfnf := fastpathAV[idx].encfn - xrt := fastpathAV[idx].rt - fn.f = func(xf *encFnInfo, xrv reflect.Value) { - xfnf(xf, xrv.Convert(xrt)) - } - } - } - } - if fn.f == nil { - switch rk { - case reflect.Bool: - fn.f = (*encFnInfo).kBool - case reflect.String: - fn.f = (*encFnInfo).kString - case reflect.Float64: - fn.f = (*encFnInfo).kFloat64 - case reflect.Float32: - fn.f = (*encFnInfo).kFloat32 - case reflect.Int, reflect.Int8, reflect.Int64, reflect.Int32, reflect.Int16: - fn.f = (*encFnInfo).kInt - case reflect.Uint8, reflect.Uint64, reflect.Uint, reflect.Uint32, reflect.Uint16, reflect.Uintptr: - fn.f = (*encFnInfo).kUint - case reflect.Invalid: - fn.f = (*encFnInfo).kInvalid - case reflect.Chan: - fi.seq = seqTypeChan - fn.f = (*encFnInfo).kSlice - case reflect.Slice: - fi.seq = seqTypeSlice - fn.f = (*encFnInfo).kSlice - case reflect.Array: - fi.seq = seqTypeArray - fn.f = (*encFnInfo).kSlice - case reflect.Struct: - fn.f = (*encFnInfo).kStruct - // reflect.Ptr and reflect.Interface are handled already by preEncodeValue - // case reflect.Ptr: - // fn.f = (*encFnInfo).kPtr - // case reflect.Interface: - // fn.f = (*encFnInfo).kInterface - case reflect.Map: - fn.f = (*encFnInfo).kMap - default: - fn.f = (*encFnInfo).kErr - } - } - } - - return -} - -func (e *Encoder) marshal(bs []byte, fnerr error, asis bool, c charEncoding) { - if fnerr != nil { - panic(fnerr) - } - if bs == nil { - e.e.EncodeNil() - } else if asis { - e.asis(bs) - } else { - e.e.EncodeStringBytes(c, bs) - } -} - -func (e *Encoder) asis(v []byte) { - if e.as == nil { - e.w.writeb(v) - } else { - e.as.EncodeAsis(v) - } -} - -func (e *Encoder) errorf(format string, params ...interface{}) { - err := fmt.Errorf(format, params...) - panic(err) -} - -// ---------------------------------------- - -const encStructPoolLen = 5 - -// encStructPool is an array of sync.Pool. -// Each element of the array pools one of encStructPool(8|16|32|64). -// It allows the re-use of slices up to 64 in length. -// A performance cost of encoding structs was collecting -// which values were empty and should be omitted. -// We needed slices of reflect.Value and string to collect them. -// This shared pool reduces the amount of unnecessary creation we do. -// The cost is that of locking sometimes, but sync.Pool is efficient -// enough to reduce thread contention. -var encStructPool [encStructPoolLen]sync.Pool - -func init() { - encStructPool[0].New = func() interface{} { return new([8]stringRv) } - encStructPool[1].New = func() interface{} { return new([16]stringRv) } - encStructPool[2].New = func() interface{} { return new([32]stringRv) } - encStructPool[3].New = func() interface{} { return new([64]stringRv) } - encStructPool[4].New = func() interface{} { return new([128]stringRv) } -} - -func encStructPoolGet(newlen int) (p *sync.Pool, v interface{}, s []stringRv) { - // if encStructPoolLen != 5 { // constant chec, so removed at build time. - // panic(errors.New("encStructPoolLen must be equal to 4")) // defensive, in case it is changed - // } - // idxpool := newlen / 8 - if newlen <= 8 { - p = &encStructPool[0] - v = p.Get() - s = v.(*[8]stringRv)[:newlen] - } else if newlen <= 16 { - p = &encStructPool[1] - v = p.Get() - s = v.(*[16]stringRv)[:newlen] - } else if newlen <= 32 { - p = &encStructPool[2] - v = p.Get() - s = v.(*[32]stringRv)[:newlen] - } else if newlen <= 64 { - p = &encStructPool[3] - v = p.Get() - s = v.(*[64]stringRv)[:newlen] - } else if newlen <= 128 { - p = &encStructPool[4] - v = p.Get() - s = v.(*[128]stringRv)[:newlen] - } else { - s = make([]stringRv, newlen) - } - return -} - -// ---------------------------------------- - -// func encErr(format string, params ...interface{}) { -// doPanic(msgTagEnc, format, params...) -// } diff --git a/vendor/github.com/ugorji/go/codec/fast-path.generated.go b/vendor/github.com/ugorji/go/codec/fast-path.generated.go deleted file mode 100644 index cf6e00df2..000000000 --- a/vendor/github.com/ugorji/go/codec/fast-path.generated.go +++ /dev/null @@ -1,39365 +0,0 @@ -// +build !notfastpath - -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// ************************************************************ -// DO NOT EDIT. -// THIS FILE IS AUTO-GENERATED from fast-path.go.tmpl -// ************************************************************ - -package codec - -// Fast path functions try to create a fast path encode or decode implementation -// for common maps and slices. -// -// We define the functions and register then in this single file -// so as not to pollute the encode.go and decode.go, and create a dependency in there. -// This file can be omitted without causing a build failure. -// -// The advantage of fast paths is: -// - Many calls bypass reflection altogether -// -// Currently support -// - slice of all builtin types, -// - map of all builtin types to string or interface value -// - symetrical maps of all builtin types (e.g. str-str, uint8-uint8) -// This should provide adequate "typical" implementations. -// -// Note that fast track decode functions must handle values for which an address cannot be obtained. -// For example: -// m2 := map[string]int{} -// p2 := []interface{}{m2} -// // decoding into p2 will bomb if fast track functions do not treat like unaddressable. -// - -import ( - "reflect" - "sort" -) - -const fastpathCheckNilFalse = false // for reflect -const fastpathCheckNilTrue = true // for type switch - -type fastpathT struct{} - -var fastpathTV fastpathT - -type fastpathE struct { - rtid uintptr - rt reflect.Type - encfn func(*encFnInfo, reflect.Value) - decfn func(*decFnInfo, reflect.Value) -} - -type fastpathA [271]fastpathE - -func (x *fastpathA) index(rtid uintptr) int { - // use binary search to grab the index (adapted from sort/search.go) - h, i, j := 0, 0, 271 // len(x) - for i < j { - h = i + (j-i)/2 - if x[h].rtid < rtid { - i = h + 1 - } else { - j = h - } - } - if i < 271 && x[i].rtid == rtid { - return i - } - return -1 -} - -type fastpathAslice []fastpathE - -func (x fastpathAslice) Len() int { return len(x) } -func (x fastpathAslice) Less(i, j int) bool { return x[i].rtid < x[j].rtid } -func (x fastpathAslice) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - -var fastpathAV fastpathA - -// due to possible initialization loop error, make fastpath in an init() -func init() { - if !fastpathEnabled { - return - } - i := 0 - fn := func(v interface{}, fe func(*encFnInfo, reflect.Value), fd func(*decFnInfo, reflect.Value)) (f fastpathE) { - xrt := reflect.TypeOf(v) - xptr := reflect.ValueOf(xrt).Pointer() - fastpathAV[i] = fastpathE{xptr, xrt, fe, fd} - i++ - return - } - - fn([]interface{}(nil), (*encFnInfo).fastpathEncSliceIntfR, (*decFnInfo).fastpathDecSliceIntfR) - fn([]string(nil), (*encFnInfo).fastpathEncSliceStringR, (*decFnInfo).fastpathDecSliceStringR) - fn([]float32(nil), (*encFnInfo).fastpathEncSliceFloat32R, (*decFnInfo).fastpathDecSliceFloat32R) - fn([]float64(nil), (*encFnInfo).fastpathEncSliceFloat64R, (*decFnInfo).fastpathDecSliceFloat64R) - fn([]uint(nil), (*encFnInfo).fastpathEncSliceUintR, (*decFnInfo).fastpathDecSliceUintR) - fn([]uint16(nil), (*encFnInfo).fastpathEncSliceUint16R, (*decFnInfo).fastpathDecSliceUint16R) - fn([]uint32(nil), (*encFnInfo).fastpathEncSliceUint32R, (*decFnInfo).fastpathDecSliceUint32R) - fn([]uint64(nil), (*encFnInfo).fastpathEncSliceUint64R, (*decFnInfo).fastpathDecSliceUint64R) - fn([]uintptr(nil), (*encFnInfo).fastpathEncSliceUintptrR, (*decFnInfo).fastpathDecSliceUintptrR) - fn([]int(nil), (*encFnInfo).fastpathEncSliceIntR, (*decFnInfo).fastpathDecSliceIntR) - fn([]int8(nil), (*encFnInfo).fastpathEncSliceInt8R, (*decFnInfo).fastpathDecSliceInt8R) - fn([]int16(nil), (*encFnInfo).fastpathEncSliceInt16R, (*decFnInfo).fastpathDecSliceInt16R) - fn([]int32(nil), (*encFnInfo).fastpathEncSliceInt32R, (*decFnInfo).fastpathDecSliceInt32R) - fn([]int64(nil), (*encFnInfo).fastpathEncSliceInt64R, (*decFnInfo).fastpathDecSliceInt64R) - fn([]bool(nil), (*encFnInfo).fastpathEncSliceBoolR, (*decFnInfo).fastpathDecSliceBoolR) - - fn(map[interface{}]interface{}(nil), (*encFnInfo).fastpathEncMapIntfIntfR, (*decFnInfo).fastpathDecMapIntfIntfR) - fn(map[interface{}]string(nil), (*encFnInfo).fastpathEncMapIntfStringR, (*decFnInfo).fastpathDecMapIntfStringR) - fn(map[interface{}]uint(nil), (*encFnInfo).fastpathEncMapIntfUintR, (*decFnInfo).fastpathDecMapIntfUintR) - fn(map[interface{}]uint8(nil), (*encFnInfo).fastpathEncMapIntfUint8R, (*decFnInfo).fastpathDecMapIntfUint8R) - fn(map[interface{}]uint16(nil), (*encFnInfo).fastpathEncMapIntfUint16R, (*decFnInfo).fastpathDecMapIntfUint16R) - fn(map[interface{}]uint32(nil), (*encFnInfo).fastpathEncMapIntfUint32R, (*decFnInfo).fastpathDecMapIntfUint32R) - fn(map[interface{}]uint64(nil), (*encFnInfo).fastpathEncMapIntfUint64R, (*decFnInfo).fastpathDecMapIntfUint64R) - fn(map[interface{}]uintptr(nil), (*encFnInfo).fastpathEncMapIntfUintptrR, (*decFnInfo).fastpathDecMapIntfUintptrR) - fn(map[interface{}]int(nil), (*encFnInfo).fastpathEncMapIntfIntR, (*decFnInfo).fastpathDecMapIntfIntR) - fn(map[interface{}]int8(nil), (*encFnInfo).fastpathEncMapIntfInt8R, (*decFnInfo).fastpathDecMapIntfInt8R) - fn(map[interface{}]int16(nil), (*encFnInfo).fastpathEncMapIntfInt16R, (*decFnInfo).fastpathDecMapIntfInt16R) - fn(map[interface{}]int32(nil), (*encFnInfo).fastpathEncMapIntfInt32R, (*decFnInfo).fastpathDecMapIntfInt32R) - fn(map[interface{}]int64(nil), (*encFnInfo).fastpathEncMapIntfInt64R, (*decFnInfo).fastpathDecMapIntfInt64R) - fn(map[interface{}]float32(nil), (*encFnInfo).fastpathEncMapIntfFloat32R, (*decFnInfo).fastpathDecMapIntfFloat32R) - fn(map[interface{}]float64(nil), (*encFnInfo).fastpathEncMapIntfFloat64R, (*decFnInfo).fastpathDecMapIntfFloat64R) - fn(map[interface{}]bool(nil), (*encFnInfo).fastpathEncMapIntfBoolR, (*decFnInfo).fastpathDecMapIntfBoolR) - fn(map[string]interface{}(nil), (*encFnInfo).fastpathEncMapStringIntfR, (*decFnInfo).fastpathDecMapStringIntfR) - fn(map[string]string(nil), (*encFnInfo).fastpathEncMapStringStringR, (*decFnInfo).fastpathDecMapStringStringR) - fn(map[string]uint(nil), (*encFnInfo).fastpathEncMapStringUintR, (*decFnInfo).fastpathDecMapStringUintR) - fn(map[string]uint8(nil), (*encFnInfo).fastpathEncMapStringUint8R, (*decFnInfo).fastpathDecMapStringUint8R) - fn(map[string]uint16(nil), (*encFnInfo).fastpathEncMapStringUint16R, (*decFnInfo).fastpathDecMapStringUint16R) - fn(map[string]uint32(nil), (*encFnInfo).fastpathEncMapStringUint32R, (*decFnInfo).fastpathDecMapStringUint32R) - fn(map[string]uint64(nil), (*encFnInfo).fastpathEncMapStringUint64R, (*decFnInfo).fastpathDecMapStringUint64R) - fn(map[string]uintptr(nil), (*encFnInfo).fastpathEncMapStringUintptrR, (*decFnInfo).fastpathDecMapStringUintptrR) - fn(map[string]int(nil), (*encFnInfo).fastpathEncMapStringIntR, (*decFnInfo).fastpathDecMapStringIntR) - fn(map[string]int8(nil), (*encFnInfo).fastpathEncMapStringInt8R, (*decFnInfo).fastpathDecMapStringInt8R) - fn(map[string]int16(nil), (*encFnInfo).fastpathEncMapStringInt16R, (*decFnInfo).fastpathDecMapStringInt16R) - fn(map[string]int32(nil), (*encFnInfo).fastpathEncMapStringInt32R, (*decFnInfo).fastpathDecMapStringInt32R) - fn(map[string]int64(nil), (*encFnInfo).fastpathEncMapStringInt64R, (*decFnInfo).fastpathDecMapStringInt64R) - fn(map[string]float32(nil), (*encFnInfo).fastpathEncMapStringFloat32R, (*decFnInfo).fastpathDecMapStringFloat32R) - fn(map[string]float64(nil), (*encFnInfo).fastpathEncMapStringFloat64R, (*decFnInfo).fastpathDecMapStringFloat64R) - fn(map[string]bool(nil), (*encFnInfo).fastpathEncMapStringBoolR, (*decFnInfo).fastpathDecMapStringBoolR) - fn(map[float32]interface{}(nil), (*encFnInfo).fastpathEncMapFloat32IntfR, (*decFnInfo).fastpathDecMapFloat32IntfR) - fn(map[float32]string(nil), (*encFnInfo).fastpathEncMapFloat32StringR, (*decFnInfo).fastpathDecMapFloat32StringR) - fn(map[float32]uint(nil), (*encFnInfo).fastpathEncMapFloat32UintR, (*decFnInfo).fastpathDecMapFloat32UintR) - fn(map[float32]uint8(nil), (*encFnInfo).fastpathEncMapFloat32Uint8R, (*decFnInfo).fastpathDecMapFloat32Uint8R) - fn(map[float32]uint16(nil), (*encFnInfo).fastpathEncMapFloat32Uint16R, (*decFnInfo).fastpathDecMapFloat32Uint16R) - fn(map[float32]uint32(nil), (*encFnInfo).fastpathEncMapFloat32Uint32R, (*decFnInfo).fastpathDecMapFloat32Uint32R) - fn(map[float32]uint64(nil), (*encFnInfo).fastpathEncMapFloat32Uint64R, (*decFnInfo).fastpathDecMapFloat32Uint64R) - fn(map[float32]uintptr(nil), (*encFnInfo).fastpathEncMapFloat32UintptrR, (*decFnInfo).fastpathDecMapFloat32UintptrR) - fn(map[float32]int(nil), (*encFnInfo).fastpathEncMapFloat32IntR, (*decFnInfo).fastpathDecMapFloat32IntR) - fn(map[float32]int8(nil), (*encFnInfo).fastpathEncMapFloat32Int8R, (*decFnInfo).fastpathDecMapFloat32Int8R) - fn(map[float32]int16(nil), (*encFnInfo).fastpathEncMapFloat32Int16R, (*decFnInfo).fastpathDecMapFloat32Int16R) - fn(map[float32]int32(nil), (*encFnInfo).fastpathEncMapFloat32Int32R, (*decFnInfo).fastpathDecMapFloat32Int32R) - fn(map[float32]int64(nil), (*encFnInfo).fastpathEncMapFloat32Int64R, (*decFnInfo).fastpathDecMapFloat32Int64R) - fn(map[float32]float32(nil), (*encFnInfo).fastpathEncMapFloat32Float32R, (*decFnInfo).fastpathDecMapFloat32Float32R) - fn(map[float32]float64(nil), (*encFnInfo).fastpathEncMapFloat32Float64R, (*decFnInfo).fastpathDecMapFloat32Float64R) - fn(map[float32]bool(nil), (*encFnInfo).fastpathEncMapFloat32BoolR, (*decFnInfo).fastpathDecMapFloat32BoolR) - fn(map[float64]interface{}(nil), (*encFnInfo).fastpathEncMapFloat64IntfR, (*decFnInfo).fastpathDecMapFloat64IntfR) - fn(map[float64]string(nil), (*encFnInfo).fastpathEncMapFloat64StringR, (*decFnInfo).fastpathDecMapFloat64StringR) - fn(map[float64]uint(nil), (*encFnInfo).fastpathEncMapFloat64UintR, (*decFnInfo).fastpathDecMapFloat64UintR) - fn(map[float64]uint8(nil), (*encFnInfo).fastpathEncMapFloat64Uint8R, (*decFnInfo).fastpathDecMapFloat64Uint8R) - fn(map[float64]uint16(nil), (*encFnInfo).fastpathEncMapFloat64Uint16R, (*decFnInfo).fastpathDecMapFloat64Uint16R) - fn(map[float64]uint32(nil), (*encFnInfo).fastpathEncMapFloat64Uint32R, (*decFnInfo).fastpathDecMapFloat64Uint32R) - fn(map[float64]uint64(nil), (*encFnInfo).fastpathEncMapFloat64Uint64R, (*decFnInfo).fastpathDecMapFloat64Uint64R) - fn(map[float64]uintptr(nil), (*encFnInfo).fastpathEncMapFloat64UintptrR, (*decFnInfo).fastpathDecMapFloat64UintptrR) - fn(map[float64]int(nil), (*encFnInfo).fastpathEncMapFloat64IntR, (*decFnInfo).fastpathDecMapFloat64IntR) - fn(map[float64]int8(nil), (*encFnInfo).fastpathEncMapFloat64Int8R, (*decFnInfo).fastpathDecMapFloat64Int8R) - fn(map[float64]int16(nil), (*encFnInfo).fastpathEncMapFloat64Int16R, (*decFnInfo).fastpathDecMapFloat64Int16R) - fn(map[float64]int32(nil), (*encFnInfo).fastpathEncMapFloat64Int32R, (*decFnInfo).fastpathDecMapFloat64Int32R) - fn(map[float64]int64(nil), (*encFnInfo).fastpathEncMapFloat64Int64R, (*decFnInfo).fastpathDecMapFloat64Int64R) - fn(map[float64]float32(nil), (*encFnInfo).fastpathEncMapFloat64Float32R, (*decFnInfo).fastpathDecMapFloat64Float32R) - fn(map[float64]float64(nil), (*encFnInfo).fastpathEncMapFloat64Float64R, (*decFnInfo).fastpathDecMapFloat64Float64R) - fn(map[float64]bool(nil), (*encFnInfo).fastpathEncMapFloat64BoolR, (*decFnInfo).fastpathDecMapFloat64BoolR) - fn(map[uint]interface{}(nil), (*encFnInfo).fastpathEncMapUintIntfR, (*decFnInfo).fastpathDecMapUintIntfR) - fn(map[uint]string(nil), (*encFnInfo).fastpathEncMapUintStringR, (*decFnInfo).fastpathDecMapUintStringR) - fn(map[uint]uint(nil), (*encFnInfo).fastpathEncMapUintUintR, (*decFnInfo).fastpathDecMapUintUintR) - fn(map[uint]uint8(nil), (*encFnInfo).fastpathEncMapUintUint8R, (*decFnInfo).fastpathDecMapUintUint8R) - fn(map[uint]uint16(nil), (*encFnInfo).fastpathEncMapUintUint16R, (*decFnInfo).fastpathDecMapUintUint16R) - fn(map[uint]uint32(nil), (*encFnInfo).fastpathEncMapUintUint32R, (*decFnInfo).fastpathDecMapUintUint32R) - fn(map[uint]uint64(nil), (*encFnInfo).fastpathEncMapUintUint64R, (*decFnInfo).fastpathDecMapUintUint64R) - fn(map[uint]uintptr(nil), (*encFnInfo).fastpathEncMapUintUintptrR, (*decFnInfo).fastpathDecMapUintUintptrR) - fn(map[uint]int(nil), (*encFnInfo).fastpathEncMapUintIntR, (*decFnInfo).fastpathDecMapUintIntR) - fn(map[uint]int8(nil), (*encFnInfo).fastpathEncMapUintInt8R, (*decFnInfo).fastpathDecMapUintInt8R) - fn(map[uint]int16(nil), (*encFnInfo).fastpathEncMapUintInt16R, (*decFnInfo).fastpathDecMapUintInt16R) - fn(map[uint]int32(nil), (*encFnInfo).fastpathEncMapUintInt32R, (*decFnInfo).fastpathDecMapUintInt32R) - fn(map[uint]int64(nil), (*encFnInfo).fastpathEncMapUintInt64R, (*decFnInfo).fastpathDecMapUintInt64R) - fn(map[uint]float32(nil), (*encFnInfo).fastpathEncMapUintFloat32R, (*decFnInfo).fastpathDecMapUintFloat32R) - fn(map[uint]float64(nil), (*encFnInfo).fastpathEncMapUintFloat64R, (*decFnInfo).fastpathDecMapUintFloat64R) - fn(map[uint]bool(nil), (*encFnInfo).fastpathEncMapUintBoolR, (*decFnInfo).fastpathDecMapUintBoolR) - fn(map[uint8]interface{}(nil), (*encFnInfo).fastpathEncMapUint8IntfR, (*decFnInfo).fastpathDecMapUint8IntfR) - fn(map[uint8]string(nil), (*encFnInfo).fastpathEncMapUint8StringR, (*decFnInfo).fastpathDecMapUint8StringR) - fn(map[uint8]uint(nil), (*encFnInfo).fastpathEncMapUint8UintR, (*decFnInfo).fastpathDecMapUint8UintR) - fn(map[uint8]uint8(nil), (*encFnInfo).fastpathEncMapUint8Uint8R, (*decFnInfo).fastpathDecMapUint8Uint8R) - fn(map[uint8]uint16(nil), (*encFnInfo).fastpathEncMapUint8Uint16R, (*decFnInfo).fastpathDecMapUint8Uint16R) - fn(map[uint8]uint32(nil), (*encFnInfo).fastpathEncMapUint8Uint32R, (*decFnInfo).fastpathDecMapUint8Uint32R) - fn(map[uint8]uint64(nil), (*encFnInfo).fastpathEncMapUint8Uint64R, (*decFnInfo).fastpathDecMapUint8Uint64R) - fn(map[uint8]uintptr(nil), (*encFnInfo).fastpathEncMapUint8UintptrR, (*decFnInfo).fastpathDecMapUint8UintptrR) - fn(map[uint8]int(nil), (*encFnInfo).fastpathEncMapUint8IntR, (*decFnInfo).fastpathDecMapUint8IntR) - fn(map[uint8]int8(nil), (*encFnInfo).fastpathEncMapUint8Int8R, (*decFnInfo).fastpathDecMapUint8Int8R) - fn(map[uint8]int16(nil), (*encFnInfo).fastpathEncMapUint8Int16R, (*decFnInfo).fastpathDecMapUint8Int16R) - fn(map[uint8]int32(nil), (*encFnInfo).fastpathEncMapUint8Int32R, (*decFnInfo).fastpathDecMapUint8Int32R) - fn(map[uint8]int64(nil), (*encFnInfo).fastpathEncMapUint8Int64R, (*decFnInfo).fastpathDecMapUint8Int64R) - fn(map[uint8]float32(nil), (*encFnInfo).fastpathEncMapUint8Float32R, (*decFnInfo).fastpathDecMapUint8Float32R) - fn(map[uint8]float64(nil), (*encFnInfo).fastpathEncMapUint8Float64R, (*decFnInfo).fastpathDecMapUint8Float64R) - fn(map[uint8]bool(nil), (*encFnInfo).fastpathEncMapUint8BoolR, (*decFnInfo).fastpathDecMapUint8BoolR) - fn(map[uint16]interface{}(nil), (*encFnInfo).fastpathEncMapUint16IntfR, (*decFnInfo).fastpathDecMapUint16IntfR) - fn(map[uint16]string(nil), (*encFnInfo).fastpathEncMapUint16StringR, (*decFnInfo).fastpathDecMapUint16StringR) - fn(map[uint16]uint(nil), (*encFnInfo).fastpathEncMapUint16UintR, (*decFnInfo).fastpathDecMapUint16UintR) - fn(map[uint16]uint8(nil), (*encFnInfo).fastpathEncMapUint16Uint8R, (*decFnInfo).fastpathDecMapUint16Uint8R) - fn(map[uint16]uint16(nil), (*encFnInfo).fastpathEncMapUint16Uint16R, (*decFnInfo).fastpathDecMapUint16Uint16R) - fn(map[uint16]uint32(nil), (*encFnInfo).fastpathEncMapUint16Uint32R, (*decFnInfo).fastpathDecMapUint16Uint32R) - fn(map[uint16]uint64(nil), (*encFnInfo).fastpathEncMapUint16Uint64R, (*decFnInfo).fastpathDecMapUint16Uint64R) - fn(map[uint16]uintptr(nil), (*encFnInfo).fastpathEncMapUint16UintptrR, (*decFnInfo).fastpathDecMapUint16UintptrR) - fn(map[uint16]int(nil), (*encFnInfo).fastpathEncMapUint16IntR, (*decFnInfo).fastpathDecMapUint16IntR) - fn(map[uint16]int8(nil), (*encFnInfo).fastpathEncMapUint16Int8R, (*decFnInfo).fastpathDecMapUint16Int8R) - fn(map[uint16]int16(nil), (*encFnInfo).fastpathEncMapUint16Int16R, (*decFnInfo).fastpathDecMapUint16Int16R) - fn(map[uint16]int32(nil), (*encFnInfo).fastpathEncMapUint16Int32R, (*decFnInfo).fastpathDecMapUint16Int32R) - fn(map[uint16]int64(nil), (*encFnInfo).fastpathEncMapUint16Int64R, (*decFnInfo).fastpathDecMapUint16Int64R) - fn(map[uint16]float32(nil), (*encFnInfo).fastpathEncMapUint16Float32R, (*decFnInfo).fastpathDecMapUint16Float32R) - fn(map[uint16]float64(nil), (*encFnInfo).fastpathEncMapUint16Float64R, (*decFnInfo).fastpathDecMapUint16Float64R) - fn(map[uint16]bool(nil), (*encFnInfo).fastpathEncMapUint16BoolR, (*decFnInfo).fastpathDecMapUint16BoolR) - fn(map[uint32]interface{}(nil), (*encFnInfo).fastpathEncMapUint32IntfR, (*decFnInfo).fastpathDecMapUint32IntfR) - fn(map[uint32]string(nil), (*encFnInfo).fastpathEncMapUint32StringR, (*decFnInfo).fastpathDecMapUint32StringR) - fn(map[uint32]uint(nil), (*encFnInfo).fastpathEncMapUint32UintR, (*decFnInfo).fastpathDecMapUint32UintR) - fn(map[uint32]uint8(nil), (*encFnInfo).fastpathEncMapUint32Uint8R, (*decFnInfo).fastpathDecMapUint32Uint8R) - fn(map[uint32]uint16(nil), (*encFnInfo).fastpathEncMapUint32Uint16R, (*decFnInfo).fastpathDecMapUint32Uint16R) - fn(map[uint32]uint32(nil), (*encFnInfo).fastpathEncMapUint32Uint32R, (*decFnInfo).fastpathDecMapUint32Uint32R) - fn(map[uint32]uint64(nil), (*encFnInfo).fastpathEncMapUint32Uint64R, (*decFnInfo).fastpathDecMapUint32Uint64R) - fn(map[uint32]uintptr(nil), (*encFnInfo).fastpathEncMapUint32UintptrR, (*decFnInfo).fastpathDecMapUint32UintptrR) - fn(map[uint32]int(nil), (*encFnInfo).fastpathEncMapUint32IntR, (*decFnInfo).fastpathDecMapUint32IntR) - fn(map[uint32]int8(nil), (*encFnInfo).fastpathEncMapUint32Int8R, (*decFnInfo).fastpathDecMapUint32Int8R) - fn(map[uint32]int16(nil), (*encFnInfo).fastpathEncMapUint32Int16R, (*decFnInfo).fastpathDecMapUint32Int16R) - fn(map[uint32]int32(nil), (*encFnInfo).fastpathEncMapUint32Int32R, (*decFnInfo).fastpathDecMapUint32Int32R) - fn(map[uint32]int64(nil), (*encFnInfo).fastpathEncMapUint32Int64R, (*decFnInfo).fastpathDecMapUint32Int64R) - fn(map[uint32]float32(nil), (*encFnInfo).fastpathEncMapUint32Float32R, (*decFnInfo).fastpathDecMapUint32Float32R) - fn(map[uint32]float64(nil), (*encFnInfo).fastpathEncMapUint32Float64R, (*decFnInfo).fastpathDecMapUint32Float64R) - fn(map[uint32]bool(nil), (*encFnInfo).fastpathEncMapUint32BoolR, (*decFnInfo).fastpathDecMapUint32BoolR) - fn(map[uint64]interface{}(nil), (*encFnInfo).fastpathEncMapUint64IntfR, (*decFnInfo).fastpathDecMapUint64IntfR) - fn(map[uint64]string(nil), (*encFnInfo).fastpathEncMapUint64StringR, (*decFnInfo).fastpathDecMapUint64StringR) - fn(map[uint64]uint(nil), (*encFnInfo).fastpathEncMapUint64UintR, (*decFnInfo).fastpathDecMapUint64UintR) - fn(map[uint64]uint8(nil), (*encFnInfo).fastpathEncMapUint64Uint8R, (*decFnInfo).fastpathDecMapUint64Uint8R) - fn(map[uint64]uint16(nil), (*encFnInfo).fastpathEncMapUint64Uint16R, (*decFnInfo).fastpathDecMapUint64Uint16R) - fn(map[uint64]uint32(nil), (*encFnInfo).fastpathEncMapUint64Uint32R, (*decFnInfo).fastpathDecMapUint64Uint32R) - fn(map[uint64]uint64(nil), (*encFnInfo).fastpathEncMapUint64Uint64R, (*decFnInfo).fastpathDecMapUint64Uint64R) - fn(map[uint64]uintptr(nil), (*encFnInfo).fastpathEncMapUint64UintptrR, (*decFnInfo).fastpathDecMapUint64UintptrR) - fn(map[uint64]int(nil), (*encFnInfo).fastpathEncMapUint64IntR, (*decFnInfo).fastpathDecMapUint64IntR) - fn(map[uint64]int8(nil), (*encFnInfo).fastpathEncMapUint64Int8R, (*decFnInfo).fastpathDecMapUint64Int8R) - fn(map[uint64]int16(nil), (*encFnInfo).fastpathEncMapUint64Int16R, (*decFnInfo).fastpathDecMapUint64Int16R) - fn(map[uint64]int32(nil), (*encFnInfo).fastpathEncMapUint64Int32R, (*decFnInfo).fastpathDecMapUint64Int32R) - fn(map[uint64]int64(nil), (*encFnInfo).fastpathEncMapUint64Int64R, (*decFnInfo).fastpathDecMapUint64Int64R) - fn(map[uint64]float32(nil), (*encFnInfo).fastpathEncMapUint64Float32R, (*decFnInfo).fastpathDecMapUint64Float32R) - fn(map[uint64]float64(nil), (*encFnInfo).fastpathEncMapUint64Float64R, (*decFnInfo).fastpathDecMapUint64Float64R) - fn(map[uint64]bool(nil), (*encFnInfo).fastpathEncMapUint64BoolR, (*decFnInfo).fastpathDecMapUint64BoolR) - fn(map[uintptr]interface{}(nil), (*encFnInfo).fastpathEncMapUintptrIntfR, (*decFnInfo).fastpathDecMapUintptrIntfR) - fn(map[uintptr]string(nil), (*encFnInfo).fastpathEncMapUintptrStringR, (*decFnInfo).fastpathDecMapUintptrStringR) - fn(map[uintptr]uint(nil), (*encFnInfo).fastpathEncMapUintptrUintR, (*decFnInfo).fastpathDecMapUintptrUintR) - fn(map[uintptr]uint8(nil), (*encFnInfo).fastpathEncMapUintptrUint8R, (*decFnInfo).fastpathDecMapUintptrUint8R) - fn(map[uintptr]uint16(nil), (*encFnInfo).fastpathEncMapUintptrUint16R, (*decFnInfo).fastpathDecMapUintptrUint16R) - fn(map[uintptr]uint32(nil), (*encFnInfo).fastpathEncMapUintptrUint32R, (*decFnInfo).fastpathDecMapUintptrUint32R) - fn(map[uintptr]uint64(nil), (*encFnInfo).fastpathEncMapUintptrUint64R, (*decFnInfo).fastpathDecMapUintptrUint64R) - fn(map[uintptr]uintptr(nil), (*encFnInfo).fastpathEncMapUintptrUintptrR, (*decFnInfo).fastpathDecMapUintptrUintptrR) - fn(map[uintptr]int(nil), (*encFnInfo).fastpathEncMapUintptrIntR, (*decFnInfo).fastpathDecMapUintptrIntR) - fn(map[uintptr]int8(nil), (*encFnInfo).fastpathEncMapUintptrInt8R, (*decFnInfo).fastpathDecMapUintptrInt8R) - fn(map[uintptr]int16(nil), (*encFnInfo).fastpathEncMapUintptrInt16R, (*decFnInfo).fastpathDecMapUintptrInt16R) - fn(map[uintptr]int32(nil), (*encFnInfo).fastpathEncMapUintptrInt32R, (*decFnInfo).fastpathDecMapUintptrInt32R) - fn(map[uintptr]int64(nil), (*encFnInfo).fastpathEncMapUintptrInt64R, (*decFnInfo).fastpathDecMapUintptrInt64R) - fn(map[uintptr]float32(nil), (*encFnInfo).fastpathEncMapUintptrFloat32R, (*decFnInfo).fastpathDecMapUintptrFloat32R) - fn(map[uintptr]float64(nil), (*encFnInfo).fastpathEncMapUintptrFloat64R, (*decFnInfo).fastpathDecMapUintptrFloat64R) - fn(map[uintptr]bool(nil), (*encFnInfo).fastpathEncMapUintptrBoolR, (*decFnInfo).fastpathDecMapUintptrBoolR) - fn(map[int]interface{}(nil), (*encFnInfo).fastpathEncMapIntIntfR, (*decFnInfo).fastpathDecMapIntIntfR) - fn(map[int]string(nil), (*encFnInfo).fastpathEncMapIntStringR, (*decFnInfo).fastpathDecMapIntStringR) - fn(map[int]uint(nil), (*encFnInfo).fastpathEncMapIntUintR, (*decFnInfo).fastpathDecMapIntUintR) - fn(map[int]uint8(nil), (*encFnInfo).fastpathEncMapIntUint8R, (*decFnInfo).fastpathDecMapIntUint8R) - fn(map[int]uint16(nil), (*encFnInfo).fastpathEncMapIntUint16R, (*decFnInfo).fastpathDecMapIntUint16R) - fn(map[int]uint32(nil), (*encFnInfo).fastpathEncMapIntUint32R, (*decFnInfo).fastpathDecMapIntUint32R) - fn(map[int]uint64(nil), (*encFnInfo).fastpathEncMapIntUint64R, (*decFnInfo).fastpathDecMapIntUint64R) - fn(map[int]uintptr(nil), (*encFnInfo).fastpathEncMapIntUintptrR, (*decFnInfo).fastpathDecMapIntUintptrR) - fn(map[int]int(nil), (*encFnInfo).fastpathEncMapIntIntR, (*decFnInfo).fastpathDecMapIntIntR) - fn(map[int]int8(nil), (*encFnInfo).fastpathEncMapIntInt8R, (*decFnInfo).fastpathDecMapIntInt8R) - fn(map[int]int16(nil), (*encFnInfo).fastpathEncMapIntInt16R, (*decFnInfo).fastpathDecMapIntInt16R) - fn(map[int]int32(nil), (*encFnInfo).fastpathEncMapIntInt32R, (*decFnInfo).fastpathDecMapIntInt32R) - fn(map[int]int64(nil), (*encFnInfo).fastpathEncMapIntInt64R, (*decFnInfo).fastpathDecMapIntInt64R) - fn(map[int]float32(nil), (*encFnInfo).fastpathEncMapIntFloat32R, (*decFnInfo).fastpathDecMapIntFloat32R) - fn(map[int]float64(nil), (*encFnInfo).fastpathEncMapIntFloat64R, (*decFnInfo).fastpathDecMapIntFloat64R) - fn(map[int]bool(nil), (*encFnInfo).fastpathEncMapIntBoolR, (*decFnInfo).fastpathDecMapIntBoolR) - fn(map[int8]interface{}(nil), (*encFnInfo).fastpathEncMapInt8IntfR, (*decFnInfo).fastpathDecMapInt8IntfR) - fn(map[int8]string(nil), (*encFnInfo).fastpathEncMapInt8StringR, (*decFnInfo).fastpathDecMapInt8StringR) - fn(map[int8]uint(nil), (*encFnInfo).fastpathEncMapInt8UintR, (*decFnInfo).fastpathDecMapInt8UintR) - fn(map[int8]uint8(nil), (*encFnInfo).fastpathEncMapInt8Uint8R, (*decFnInfo).fastpathDecMapInt8Uint8R) - fn(map[int8]uint16(nil), (*encFnInfo).fastpathEncMapInt8Uint16R, (*decFnInfo).fastpathDecMapInt8Uint16R) - fn(map[int8]uint32(nil), (*encFnInfo).fastpathEncMapInt8Uint32R, (*decFnInfo).fastpathDecMapInt8Uint32R) - fn(map[int8]uint64(nil), (*encFnInfo).fastpathEncMapInt8Uint64R, (*decFnInfo).fastpathDecMapInt8Uint64R) - fn(map[int8]uintptr(nil), (*encFnInfo).fastpathEncMapInt8UintptrR, (*decFnInfo).fastpathDecMapInt8UintptrR) - fn(map[int8]int(nil), (*encFnInfo).fastpathEncMapInt8IntR, (*decFnInfo).fastpathDecMapInt8IntR) - fn(map[int8]int8(nil), (*encFnInfo).fastpathEncMapInt8Int8R, (*decFnInfo).fastpathDecMapInt8Int8R) - fn(map[int8]int16(nil), (*encFnInfo).fastpathEncMapInt8Int16R, (*decFnInfo).fastpathDecMapInt8Int16R) - fn(map[int8]int32(nil), (*encFnInfo).fastpathEncMapInt8Int32R, (*decFnInfo).fastpathDecMapInt8Int32R) - fn(map[int8]int64(nil), (*encFnInfo).fastpathEncMapInt8Int64R, (*decFnInfo).fastpathDecMapInt8Int64R) - fn(map[int8]float32(nil), (*encFnInfo).fastpathEncMapInt8Float32R, (*decFnInfo).fastpathDecMapInt8Float32R) - fn(map[int8]float64(nil), (*encFnInfo).fastpathEncMapInt8Float64R, (*decFnInfo).fastpathDecMapInt8Float64R) - fn(map[int8]bool(nil), (*encFnInfo).fastpathEncMapInt8BoolR, (*decFnInfo).fastpathDecMapInt8BoolR) - fn(map[int16]interface{}(nil), (*encFnInfo).fastpathEncMapInt16IntfR, (*decFnInfo).fastpathDecMapInt16IntfR) - fn(map[int16]string(nil), (*encFnInfo).fastpathEncMapInt16StringR, (*decFnInfo).fastpathDecMapInt16StringR) - fn(map[int16]uint(nil), (*encFnInfo).fastpathEncMapInt16UintR, (*decFnInfo).fastpathDecMapInt16UintR) - fn(map[int16]uint8(nil), (*encFnInfo).fastpathEncMapInt16Uint8R, (*decFnInfo).fastpathDecMapInt16Uint8R) - fn(map[int16]uint16(nil), (*encFnInfo).fastpathEncMapInt16Uint16R, (*decFnInfo).fastpathDecMapInt16Uint16R) - fn(map[int16]uint32(nil), (*encFnInfo).fastpathEncMapInt16Uint32R, (*decFnInfo).fastpathDecMapInt16Uint32R) - fn(map[int16]uint64(nil), (*encFnInfo).fastpathEncMapInt16Uint64R, (*decFnInfo).fastpathDecMapInt16Uint64R) - fn(map[int16]uintptr(nil), (*encFnInfo).fastpathEncMapInt16UintptrR, (*decFnInfo).fastpathDecMapInt16UintptrR) - fn(map[int16]int(nil), (*encFnInfo).fastpathEncMapInt16IntR, (*decFnInfo).fastpathDecMapInt16IntR) - fn(map[int16]int8(nil), (*encFnInfo).fastpathEncMapInt16Int8R, (*decFnInfo).fastpathDecMapInt16Int8R) - fn(map[int16]int16(nil), (*encFnInfo).fastpathEncMapInt16Int16R, (*decFnInfo).fastpathDecMapInt16Int16R) - fn(map[int16]int32(nil), (*encFnInfo).fastpathEncMapInt16Int32R, (*decFnInfo).fastpathDecMapInt16Int32R) - fn(map[int16]int64(nil), (*encFnInfo).fastpathEncMapInt16Int64R, (*decFnInfo).fastpathDecMapInt16Int64R) - fn(map[int16]float32(nil), (*encFnInfo).fastpathEncMapInt16Float32R, (*decFnInfo).fastpathDecMapInt16Float32R) - fn(map[int16]float64(nil), (*encFnInfo).fastpathEncMapInt16Float64R, (*decFnInfo).fastpathDecMapInt16Float64R) - fn(map[int16]bool(nil), (*encFnInfo).fastpathEncMapInt16BoolR, (*decFnInfo).fastpathDecMapInt16BoolR) - fn(map[int32]interface{}(nil), (*encFnInfo).fastpathEncMapInt32IntfR, (*decFnInfo).fastpathDecMapInt32IntfR) - fn(map[int32]string(nil), (*encFnInfo).fastpathEncMapInt32StringR, (*decFnInfo).fastpathDecMapInt32StringR) - fn(map[int32]uint(nil), (*encFnInfo).fastpathEncMapInt32UintR, (*decFnInfo).fastpathDecMapInt32UintR) - fn(map[int32]uint8(nil), (*encFnInfo).fastpathEncMapInt32Uint8R, (*decFnInfo).fastpathDecMapInt32Uint8R) - fn(map[int32]uint16(nil), (*encFnInfo).fastpathEncMapInt32Uint16R, (*decFnInfo).fastpathDecMapInt32Uint16R) - fn(map[int32]uint32(nil), (*encFnInfo).fastpathEncMapInt32Uint32R, (*decFnInfo).fastpathDecMapInt32Uint32R) - fn(map[int32]uint64(nil), (*encFnInfo).fastpathEncMapInt32Uint64R, (*decFnInfo).fastpathDecMapInt32Uint64R) - fn(map[int32]uintptr(nil), (*encFnInfo).fastpathEncMapInt32UintptrR, (*decFnInfo).fastpathDecMapInt32UintptrR) - fn(map[int32]int(nil), (*encFnInfo).fastpathEncMapInt32IntR, (*decFnInfo).fastpathDecMapInt32IntR) - fn(map[int32]int8(nil), (*encFnInfo).fastpathEncMapInt32Int8R, (*decFnInfo).fastpathDecMapInt32Int8R) - fn(map[int32]int16(nil), (*encFnInfo).fastpathEncMapInt32Int16R, (*decFnInfo).fastpathDecMapInt32Int16R) - fn(map[int32]int32(nil), (*encFnInfo).fastpathEncMapInt32Int32R, (*decFnInfo).fastpathDecMapInt32Int32R) - fn(map[int32]int64(nil), (*encFnInfo).fastpathEncMapInt32Int64R, (*decFnInfo).fastpathDecMapInt32Int64R) - fn(map[int32]float32(nil), (*encFnInfo).fastpathEncMapInt32Float32R, (*decFnInfo).fastpathDecMapInt32Float32R) - fn(map[int32]float64(nil), (*encFnInfo).fastpathEncMapInt32Float64R, (*decFnInfo).fastpathDecMapInt32Float64R) - fn(map[int32]bool(nil), (*encFnInfo).fastpathEncMapInt32BoolR, (*decFnInfo).fastpathDecMapInt32BoolR) - fn(map[int64]interface{}(nil), (*encFnInfo).fastpathEncMapInt64IntfR, (*decFnInfo).fastpathDecMapInt64IntfR) - fn(map[int64]string(nil), (*encFnInfo).fastpathEncMapInt64StringR, (*decFnInfo).fastpathDecMapInt64StringR) - fn(map[int64]uint(nil), (*encFnInfo).fastpathEncMapInt64UintR, (*decFnInfo).fastpathDecMapInt64UintR) - fn(map[int64]uint8(nil), (*encFnInfo).fastpathEncMapInt64Uint8R, (*decFnInfo).fastpathDecMapInt64Uint8R) - fn(map[int64]uint16(nil), (*encFnInfo).fastpathEncMapInt64Uint16R, (*decFnInfo).fastpathDecMapInt64Uint16R) - fn(map[int64]uint32(nil), (*encFnInfo).fastpathEncMapInt64Uint32R, (*decFnInfo).fastpathDecMapInt64Uint32R) - fn(map[int64]uint64(nil), (*encFnInfo).fastpathEncMapInt64Uint64R, (*decFnInfo).fastpathDecMapInt64Uint64R) - fn(map[int64]uintptr(nil), (*encFnInfo).fastpathEncMapInt64UintptrR, (*decFnInfo).fastpathDecMapInt64UintptrR) - fn(map[int64]int(nil), (*encFnInfo).fastpathEncMapInt64IntR, (*decFnInfo).fastpathDecMapInt64IntR) - fn(map[int64]int8(nil), (*encFnInfo).fastpathEncMapInt64Int8R, (*decFnInfo).fastpathDecMapInt64Int8R) - fn(map[int64]int16(nil), (*encFnInfo).fastpathEncMapInt64Int16R, (*decFnInfo).fastpathDecMapInt64Int16R) - fn(map[int64]int32(nil), (*encFnInfo).fastpathEncMapInt64Int32R, (*decFnInfo).fastpathDecMapInt64Int32R) - fn(map[int64]int64(nil), (*encFnInfo).fastpathEncMapInt64Int64R, (*decFnInfo).fastpathDecMapInt64Int64R) - fn(map[int64]float32(nil), (*encFnInfo).fastpathEncMapInt64Float32R, (*decFnInfo).fastpathDecMapInt64Float32R) - fn(map[int64]float64(nil), (*encFnInfo).fastpathEncMapInt64Float64R, (*decFnInfo).fastpathDecMapInt64Float64R) - fn(map[int64]bool(nil), (*encFnInfo).fastpathEncMapInt64BoolR, (*decFnInfo).fastpathDecMapInt64BoolR) - fn(map[bool]interface{}(nil), (*encFnInfo).fastpathEncMapBoolIntfR, (*decFnInfo).fastpathDecMapBoolIntfR) - fn(map[bool]string(nil), (*encFnInfo).fastpathEncMapBoolStringR, (*decFnInfo).fastpathDecMapBoolStringR) - fn(map[bool]uint(nil), (*encFnInfo).fastpathEncMapBoolUintR, (*decFnInfo).fastpathDecMapBoolUintR) - fn(map[bool]uint8(nil), (*encFnInfo).fastpathEncMapBoolUint8R, (*decFnInfo).fastpathDecMapBoolUint8R) - fn(map[bool]uint16(nil), (*encFnInfo).fastpathEncMapBoolUint16R, (*decFnInfo).fastpathDecMapBoolUint16R) - fn(map[bool]uint32(nil), (*encFnInfo).fastpathEncMapBoolUint32R, (*decFnInfo).fastpathDecMapBoolUint32R) - fn(map[bool]uint64(nil), (*encFnInfo).fastpathEncMapBoolUint64R, (*decFnInfo).fastpathDecMapBoolUint64R) - fn(map[bool]uintptr(nil), (*encFnInfo).fastpathEncMapBoolUintptrR, (*decFnInfo).fastpathDecMapBoolUintptrR) - fn(map[bool]int(nil), (*encFnInfo).fastpathEncMapBoolIntR, (*decFnInfo).fastpathDecMapBoolIntR) - fn(map[bool]int8(nil), (*encFnInfo).fastpathEncMapBoolInt8R, (*decFnInfo).fastpathDecMapBoolInt8R) - fn(map[bool]int16(nil), (*encFnInfo).fastpathEncMapBoolInt16R, (*decFnInfo).fastpathDecMapBoolInt16R) - fn(map[bool]int32(nil), (*encFnInfo).fastpathEncMapBoolInt32R, (*decFnInfo).fastpathDecMapBoolInt32R) - fn(map[bool]int64(nil), (*encFnInfo).fastpathEncMapBoolInt64R, (*decFnInfo).fastpathDecMapBoolInt64R) - fn(map[bool]float32(nil), (*encFnInfo).fastpathEncMapBoolFloat32R, (*decFnInfo).fastpathDecMapBoolFloat32R) - fn(map[bool]float64(nil), (*encFnInfo).fastpathEncMapBoolFloat64R, (*decFnInfo).fastpathDecMapBoolFloat64R) - fn(map[bool]bool(nil), (*encFnInfo).fastpathEncMapBoolBoolR, (*decFnInfo).fastpathDecMapBoolBoolR) - - sort.Sort(fastpathAslice(fastpathAV[:])) -} - -// -- encode - -// -- -- fast path type switch -func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool { - if !fastpathEnabled { - return false - } - switch v := iv.(type) { - - case []interface{}: - fastpathTV.EncSliceIntfV(v, fastpathCheckNilTrue, e) - case *[]interface{}: - fastpathTV.EncSliceIntfV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]interface{}: - fastpathTV.EncMapIntfIntfV(v, fastpathCheckNilTrue, e) - case *map[interface{}]interface{}: - fastpathTV.EncMapIntfIntfV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]string: - fastpathTV.EncMapIntfStringV(v, fastpathCheckNilTrue, e) - case *map[interface{}]string: - fastpathTV.EncMapIntfStringV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint: - fastpathTV.EncMapIntfUintV(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint: - fastpathTV.EncMapIntfUintV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint8: - fastpathTV.EncMapIntfUint8V(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint8: - fastpathTV.EncMapIntfUint8V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint16: - fastpathTV.EncMapIntfUint16V(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint16: - fastpathTV.EncMapIntfUint16V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint32: - fastpathTV.EncMapIntfUint32V(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint32: - fastpathTV.EncMapIntfUint32V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint64: - fastpathTV.EncMapIntfUint64V(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint64: - fastpathTV.EncMapIntfUint64V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uintptr: - fastpathTV.EncMapIntfUintptrV(v, fastpathCheckNilTrue, e) - case *map[interface{}]uintptr: - fastpathTV.EncMapIntfUintptrV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int: - fastpathTV.EncMapIntfIntV(v, fastpathCheckNilTrue, e) - case *map[interface{}]int: - fastpathTV.EncMapIntfIntV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int8: - fastpathTV.EncMapIntfInt8V(v, fastpathCheckNilTrue, e) - case *map[interface{}]int8: - fastpathTV.EncMapIntfInt8V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int16: - fastpathTV.EncMapIntfInt16V(v, fastpathCheckNilTrue, e) - case *map[interface{}]int16: - fastpathTV.EncMapIntfInt16V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int32: - fastpathTV.EncMapIntfInt32V(v, fastpathCheckNilTrue, e) - case *map[interface{}]int32: - fastpathTV.EncMapIntfInt32V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int64: - fastpathTV.EncMapIntfInt64V(v, fastpathCheckNilTrue, e) - case *map[interface{}]int64: - fastpathTV.EncMapIntfInt64V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]float32: - fastpathTV.EncMapIntfFloat32V(v, fastpathCheckNilTrue, e) - case *map[interface{}]float32: - fastpathTV.EncMapIntfFloat32V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]float64: - fastpathTV.EncMapIntfFloat64V(v, fastpathCheckNilTrue, e) - case *map[interface{}]float64: - fastpathTV.EncMapIntfFloat64V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]bool: - fastpathTV.EncMapIntfBoolV(v, fastpathCheckNilTrue, e) - case *map[interface{}]bool: - fastpathTV.EncMapIntfBoolV(*v, fastpathCheckNilTrue, e) - - case []string: - fastpathTV.EncSliceStringV(v, fastpathCheckNilTrue, e) - case *[]string: - fastpathTV.EncSliceStringV(*v, fastpathCheckNilTrue, e) - - case map[string]interface{}: - fastpathTV.EncMapStringIntfV(v, fastpathCheckNilTrue, e) - case *map[string]interface{}: - fastpathTV.EncMapStringIntfV(*v, fastpathCheckNilTrue, e) - - case map[string]string: - fastpathTV.EncMapStringStringV(v, fastpathCheckNilTrue, e) - case *map[string]string: - fastpathTV.EncMapStringStringV(*v, fastpathCheckNilTrue, e) - - case map[string]uint: - fastpathTV.EncMapStringUintV(v, fastpathCheckNilTrue, e) - case *map[string]uint: - fastpathTV.EncMapStringUintV(*v, fastpathCheckNilTrue, e) - - case map[string]uint8: - fastpathTV.EncMapStringUint8V(v, fastpathCheckNilTrue, e) - case *map[string]uint8: - fastpathTV.EncMapStringUint8V(*v, fastpathCheckNilTrue, e) - - case map[string]uint16: - fastpathTV.EncMapStringUint16V(v, fastpathCheckNilTrue, e) - case *map[string]uint16: - fastpathTV.EncMapStringUint16V(*v, fastpathCheckNilTrue, e) - - case map[string]uint32: - fastpathTV.EncMapStringUint32V(v, fastpathCheckNilTrue, e) - case *map[string]uint32: - fastpathTV.EncMapStringUint32V(*v, fastpathCheckNilTrue, e) - - case map[string]uint64: - fastpathTV.EncMapStringUint64V(v, fastpathCheckNilTrue, e) - case *map[string]uint64: - fastpathTV.EncMapStringUint64V(*v, fastpathCheckNilTrue, e) - - case map[string]uintptr: - fastpathTV.EncMapStringUintptrV(v, fastpathCheckNilTrue, e) - case *map[string]uintptr: - fastpathTV.EncMapStringUintptrV(*v, fastpathCheckNilTrue, e) - - case map[string]int: - fastpathTV.EncMapStringIntV(v, fastpathCheckNilTrue, e) - case *map[string]int: - fastpathTV.EncMapStringIntV(*v, fastpathCheckNilTrue, e) - - case map[string]int8: - fastpathTV.EncMapStringInt8V(v, fastpathCheckNilTrue, e) - case *map[string]int8: - fastpathTV.EncMapStringInt8V(*v, fastpathCheckNilTrue, e) - - case map[string]int16: - fastpathTV.EncMapStringInt16V(v, fastpathCheckNilTrue, e) - case *map[string]int16: - fastpathTV.EncMapStringInt16V(*v, fastpathCheckNilTrue, e) - - case map[string]int32: - fastpathTV.EncMapStringInt32V(v, fastpathCheckNilTrue, e) - case *map[string]int32: - fastpathTV.EncMapStringInt32V(*v, fastpathCheckNilTrue, e) - - case map[string]int64: - fastpathTV.EncMapStringInt64V(v, fastpathCheckNilTrue, e) - case *map[string]int64: - fastpathTV.EncMapStringInt64V(*v, fastpathCheckNilTrue, e) - - case map[string]float32: - fastpathTV.EncMapStringFloat32V(v, fastpathCheckNilTrue, e) - case *map[string]float32: - fastpathTV.EncMapStringFloat32V(*v, fastpathCheckNilTrue, e) - - case map[string]float64: - fastpathTV.EncMapStringFloat64V(v, fastpathCheckNilTrue, e) - case *map[string]float64: - fastpathTV.EncMapStringFloat64V(*v, fastpathCheckNilTrue, e) - - case map[string]bool: - fastpathTV.EncMapStringBoolV(v, fastpathCheckNilTrue, e) - case *map[string]bool: - fastpathTV.EncMapStringBoolV(*v, fastpathCheckNilTrue, e) - - case []float32: - fastpathTV.EncSliceFloat32V(v, fastpathCheckNilTrue, e) - case *[]float32: - fastpathTV.EncSliceFloat32V(*v, fastpathCheckNilTrue, e) - - case map[float32]interface{}: - fastpathTV.EncMapFloat32IntfV(v, fastpathCheckNilTrue, e) - case *map[float32]interface{}: - fastpathTV.EncMapFloat32IntfV(*v, fastpathCheckNilTrue, e) - - case map[float32]string: - fastpathTV.EncMapFloat32StringV(v, fastpathCheckNilTrue, e) - case *map[float32]string: - fastpathTV.EncMapFloat32StringV(*v, fastpathCheckNilTrue, e) - - case map[float32]uint: - fastpathTV.EncMapFloat32UintV(v, fastpathCheckNilTrue, e) - case *map[float32]uint: - fastpathTV.EncMapFloat32UintV(*v, fastpathCheckNilTrue, e) - - case map[float32]uint8: - fastpathTV.EncMapFloat32Uint8V(v, fastpathCheckNilTrue, e) - case *map[float32]uint8: - fastpathTV.EncMapFloat32Uint8V(*v, fastpathCheckNilTrue, e) - - case map[float32]uint16: - fastpathTV.EncMapFloat32Uint16V(v, fastpathCheckNilTrue, e) - case *map[float32]uint16: - fastpathTV.EncMapFloat32Uint16V(*v, fastpathCheckNilTrue, e) - - case map[float32]uint32: - fastpathTV.EncMapFloat32Uint32V(v, fastpathCheckNilTrue, e) - case *map[float32]uint32: - fastpathTV.EncMapFloat32Uint32V(*v, fastpathCheckNilTrue, e) - - case map[float32]uint64: - fastpathTV.EncMapFloat32Uint64V(v, fastpathCheckNilTrue, e) - case *map[float32]uint64: - fastpathTV.EncMapFloat32Uint64V(*v, fastpathCheckNilTrue, e) - - case map[float32]uintptr: - fastpathTV.EncMapFloat32UintptrV(v, fastpathCheckNilTrue, e) - case *map[float32]uintptr: - fastpathTV.EncMapFloat32UintptrV(*v, fastpathCheckNilTrue, e) - - case map[float32]int: - fastpathTV.EncMapFloat32IntV(v, fastpathCheckNilTrue, e) - case *map[float32]int: - fastpathTV.EncMapFloat32IntV(*v, fastpathCheckNilTrue, e) - - case map[float32]int8: - fastpathTV.EncMapFloat32Int8V(v, fastpathCheckNilTrue, e) - case *map[float32]int8: - fastpathTV.EncMapFloat32Int8V(*v, fastpathCheckNilTrue, e) - - case map[float32]int16: - fastpathTV.EncMapFloat32Int16V(v, fastpathCheckNilTrue, e) - case *map[float32]int16: - fastpathTV.EncMapFloat32Int16V(*v, fastpathCheckNilTrue, e) - - case map[float32]int32: - fastpathTV.EncMapFloat32Int32V(v, fastpathCheckNilTrue, e) - case *map[float32]int32: - fastpathTV.EncMapFloat32Int32V(*v, fastpathCheckNilTrue, e) - - case map[float32]int64: - fastpathTV.EncMapFloat32Int64V(v, fastpathCheckNilTrue, e) - case *map[float32]int64: - fastpathTV.EncMapFloat32Int64V(*v, fastpathCheckNilTrue, e) - - case map[float32]float32: - fastpathTV.EncMapFloat32Float32V(v, fastpathCheckNilTrue, e) - case *map[float32]float32: - fastpathTV.EncMapFloat32Float32V(*v, fastpathCheckNilTrue, e) - - case map[float32]float64: - fastpathTV.EncMapFloat32Float64V(v, fastpathCheckNilTrue, e) - case *map[float32]float64: - fastpathTV.EncMapFloat32Float64V(*v, fastpathCheckNilTrue, e) - - case map[float32]bool: - fastpathTV.EncMapFloat32BoolV(v, fastpathCheckNilTrue, e) - case *map[float32]bool: - fastpathTV.EncMapFloat32BoolV(*v, fastpathCheckNilTrue, e) - - case []float64: - fastpathTV.EncSliceFloat64V(v, fastpathCheckNilTrue, e) - case *[]float64: - fastpathTV.EncSliceFloat64V(*v, fastpathCheckNilTrue, e) - - case map[float64]interface{}: - fastpathTV.EncMapFloat64IntfV(v, fastpathCheckNilTrue, e) - case *map[float64]interface{}: - fastpathTV.EncMapFloat64IntfV(*v, fastpathCheckNilTrue, e) - - case map[float64]string: - fastpathTV.EncMapFloat64StringV(v, fastpathCheckNilTrue, e) - case *map[float64]string: - fastpathTV.EncMapFloat64StringV(*v, fastpathCheckNilTrue, e) - - case map[float64]uint: - fastpathTV.EncMapFloat64UintV(v, fastpathCheckNilTrue, e) - case *map[float64]uint: - fastpathTV.EncMapFloat64UintV(*v, fastpathCheckNilTrue, e) - - case map[float64]uint8: - fastpathTV.EncMapFloat64Uint8V(v, fastpathCheckNilTrue, e) - case *map[float64]uint8: - fastpathTV.EncMapFloat64Uint8V(*v, fastpathCheckNilTrue, e) - - case map[float64]uint16: - fastpathTV.EncMapFloat64Uint16V(v, fastpathCheckNilTrue, e) - case *map[float64]uint16: - fastpathTV.EncMapFloat64Uint16V(*v, fastpathCheckNilTrue, e) - - case map[float64]uint32: - fastpathTV.EncMapFloat64Uint32V(v, fastpathCheckNilTrue, e) - case *map[float64]uint32: - fastpathTV.EncMapFloat64Uint32V(*v, fastpathCheckNilTrue, e) - - case map[float64]uint64: - fastpathTV.EncMapFloat64Uint64V(v, fastpathCheckNilTrue, e) - case *map[float64]uint64: - fastpathTV.EncMapFloat64Uint64V(*v, fastpathCheckNilTrue, e) - - case map[float64]uintptr: - fastpathTV.EncMapFloat64UintptrV(v, fastpathCheckNilTrue, e) - case *map[float64]uintptr: - fastpathTV.EncMapFloat64UintptrV(*v, fastpathCheckNilTrue, e) - - case map[float64]int: - fastpathTV.EncMapFloat64IntV(v, fastpathCheckNilTrue, e) - case *map[float64]int: - fastpathTV.EncMapFloat64IntV(*v, fastpathCheckNilTrue, e) - - case map[float64]int8: - fastpathTV.EncMapFloat64Int8V(v, fastpathCheckNilTrue, e) - case *map[float64]int8: - fastpathTV.EncMapFloat64Int8V(*v, fastpathCheckNilTrue, e) - - case map[float64]int16: - fastpathTV.EncMapFloat64Int16V(v, fastpathCheckNilTrue, e) - case *map[float64]int16: - fastpathTV.EncMapFloat64Int16V(*v, fastpathCheckNilTrue, e) - - case map[float64]int32: - fastpathTV.EncMapFloat64Int32V(v, fastpathCheckNilTrue, e) - case *map[float64]int32: - fastpathTV.EncMapFloat64Int32V(*v, fastpathCheckNilTrue, e) - - case map[float64]int64: - fastpathTV.EncMapFloat64Int64V(v, fastpathCheckNilTrue, e) - case *map[float64]int64: - fastpathTV.EncMapFloat64Int64V(*v, fastpathCheckNilTrue, e) - - case map[float64]float32: - fastpathTV.EncMapFloat64Float32V(v, fastpathCheckNilTrue, e) - case *map[float64]float32: - fastpathTV.EncMapFloat64Float32V(*v, fastpathCheckNilTrue, e) - - case map[float64]float64: - fastpathTV.EncMapFloat64Float64V(v, fastpathCheckNilTrue, e) - case *map[float64]float64: - fastpathTV.EncMapFloat64Float64V(*v, fastpathCheckNilTrue, e) - - case map[float64]bool: - fastpathTV.EncMapFloat64BoolV(v, fastpathCheckNilTrue, e) - case *map[float64]bool: - fastpathTV.EncMapFloat64BoolV(*v, fastpathCheckNilTrue, e) - - case []uint: - fastpathTV.EncSliceUintV(v, fastpathCheckNilTrue, e) - case *[]uint: - fastpathTV.EncSliceUintV(*v, fastpathCheckNilTrue, e) - - case map[uint]interface{}: - fastpathTV.EncMapUintIntfV(v, fastpathCheckNilTrue, e) - case *map[uint]interface{}: - fastpathTV.EncMapUintIntfV(*v, fastpathCheckNilTrue, e) - - case map[uint]string: - fastpathTV.EncMapUintStringV(v, fastpathCheckNilTrue, e) - case *map[uint]string: - fastpathTV.EncMapUintStringV(*v, fastpathCheckNilTrue, e) - - case map[uint]uint: - fastpathTV.EncMapUintUintV(v, fastpathCheckNilTrue, e) - case *map[uint]uint: - fastpathTV.EncMapUintUintV(*v, fastpathCheckNilTrue, e) - - case map[uint]uint8: - fastpathTV.EncMapUintUint8V(v, fastpathCheckNilTrue, e) - case *map[uint]uint8: - fastpathTV.EncMapUintUint8V(*v, fastpathCheckNilTrue, e) - - case map[uint]uint16: - fastpathTV.EncMapUintUint16V(v, fastpathCheckNilTrue, e) - case *map[uint]uint16: - fastpathTV.EncMapUintUint16V(*v, fastpathCheckNilTrue, e) - - case map[uint]uint32: - fastpathTV.EncMapUintUint32V(v, fastpathCheckNilTrue, e) - case *map[uint]uint32: - fastpathTV.EncMapUintUint32V(*v, fastpathCheckNilTrue, e) - - case map[uint]uint64: - fastpathTV.EncMapUintUint64V(v, fastpathCheckNilTrue, e) - case *map[uint]uint64: - fastpathTV.EncMapUintUint64V(*v, fastpathCheckNilTrue, e) - - case map[uint]uintptr: - fastpathTV.EncMapUintUintptrV(v, fastpathCheckNilTrue, e) - case *map[uint]uintptr: - fastpathTV.EncMapUintUintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint]int: - fastpathTV.EncMapUintIntV(v, fastpathCheckNilTrue, e) - case *map[uint]int: - fastpathTV.EncMapUintIntV(*v, fastpathCheckNilTrue, e) - - case map[uint]int8: - fastpathTV.EncMapUintInt8V(v, fastpathCheckNilTrue, e) - case *map[uint]int8: - fastpathTV.EncMapUintInt8V(*v, fastpathCheckNilTrue, e) - - case map[uint]int16: - fastpathTV.EncMapUintInt16V(v, fastpathCheckNilTrue, e) - case *map[uint]int16: - fastpathTV.EncMapUintInt16V(*v, fastpathCheckNilTrue, e) - - case map[uint]int32: - fastpathTV.EncMapUintInt32V(v, fastpathCheckNilTrue, e) - case *map[uint]int32: - fastpathTV.EncMapUintInt32V(*v, fastpathCheckNilTrue, e) - - case map[uint]int64: - fastpathTV.EncMapUintInt64V(v, fastpathCheckNilTrue, e) - case *map[uint]int64: - fastpathTV.EncMapUintInt64V(*v, fastpathCheckNilTrue, e) - - case map[uint]float32: - fastpathTV.EncMapUintFloat32V(v, fastpathCheckNilTrue, e) - case *map[uint]float32: - fastpathTV.EncMapUintFloat32V(*v, fastpathCheckNilTrue, e) - - case map[uint]float64: - fastpathTV.EncMapUintFloat64V(v, fastpathCheckNilTrue, e) - case *map[uint]float64: - fastpathTV.EncMapUintFloat64V(*v, fastpathCheckNilTrue, e) - - case map[uint]bool: - fastpathTV.EncMapUintBoolV(v, fastpathCheckNilTrue, e) - case *map[uint]bool: - fastpathTV.EncMapUintBoolV(*v, fastpathCheckNilTrue, e) - - case map[uint8]interface{}: - fastpathTV.EncMapUint8IntfV(v, fastpathCheckNilTrue, e) - case *map[uint8]interface{}: - fastpathTV.EncMapUint8IntfV(*v, fastpathCheckNilTrue, e) - - case map[uint8]string: - fastpathTV.EncMapUint8StringV(v, fastpathCheckNilTrue, e) - case *map[uint8]string: - fastpathTV.EncMapUint8StringV(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint: - fastpathTV.EncMapUint8UintV(v, fastpathCheckNilTrue, e) - case *map[uint8]uint: - fastpathTV.EncMapUint8UintV(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint8: - fastpathTV.EncMapUint8Uint8V(v, fastpathCheckNilTrue, e) - case *map[uint8]uint8: - fastpathTV.EncMapUint8Uint8V(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint16: - fastpathTV.EncMapUint8Uint16V(v, fastpathCheckNilTrue, e) - case *map[uint8]uint16: - fastpathTV.EncMapUint8Uint16V(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint32: - fastpathTV.EncMapUint8Uint32V(v, fastpathCheckNilTrue, e) - case *map[uint8]uint32: - fastpathTV.EncMapUint8Uint32V(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint64: - fastpathTV.EncMapUint8Uint64V(v, fastpathCheckNilTrue, e) - case *map[uint8]uint64: - fastpathTV.EncMapUint8Uint64V(*v, fastpathCheckNilTrue, e) - - case map[uint8]uintptr: - fastpathTV.EncMapUint8UintptrV(v, fastpathCheckNilTrue, e) - case *map[uint8]uintptr: - fastpathTV.EncMapUint8UintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint8]int: - fastpathTV.EncMapUint8IntV(v, fastpathCheckNilTrue, e) - case *map[uint8]int: - fastpathTV.EncMapUint8IntV(*v, fastpathCheckNilTrue, e) - - case map[uint8]int8: - fastpathTV.EncMapUint8Int8V(v, fastpathCheckNilTrue, e) - case *map[uint8]int8: - fastpathTV.EncMapUint8Int8V(*v, fastpathCheckNilTrue, e) - - case map[uint8]int16: - fastpathTV.EncMapUint8Int16V(v, fastpathCheckNilTrue, e) - case *map[uint8]int16: - fastpathTV.EncMapUint8Int16V(*v, fastpathCheckNilTrue, e) - - case map[uint8]int32: - fastpathTV.EncMapUint8Int32V(v, fastpathCheckNilTrue, e) - case *map[uint8]int32: - fastpathTV.EncMapUint8Int32V(*v, fastpathCheckNilTrue, e) - - case map[uint8]int64: - fastpathTV.EncMapUint8Int64V(v, fastpathCheckNilTrue, e) - case *map[uint8]int64: - fastpathTV.EncMapUint8Int64V(*v, fastpathCheckNilTrue, e) - - case map[uint8]float32: - fastpathTV.EncMapUint8Float32V(v, fastpathCheckNilTrue, e) - case *map[uint8]float32: - fastpathTV.EncMapUint8Float32V(*v, fastpathCheckNilTrue, e) - - case map[uint8]float64: - fastpathTV.EncMapUint8Float64V(v, fastpathCheckNilTrue, e) - case *map[uint8]float64: - fastpathTV.EncMapUint8Float64V(*v, fastpathCheckNilTrue, e) - - case map[uint8]bool: - fastpathTV.EncMapUint8BoolV(v, fastpathCheckNilTrue, e) - case *map[uint8]bool: - fastpathTV.EncMapUint8BoolV(*v, fastpathCheckNilTrue, e) - - case []uint16: - fastpathTV.EncSliceUint16V(v, fastpathCheckNilTrue, e) - case *[]uint16: - fastpathTV.EncSliceUint16V(*v, fastpathCheckNilTrue, e) - - case map[uint16]interface{}: - fastpathTV.EncMapUint16IntfV(v, fastpathCheckNilTrue, e) - case *map[uint16]interface{}: - fastpathTV.EncMapUint16IntfV(*v, fastpathCheckNilTrue, e) - - case map[uint16]string: - fastpathTV.EncMapUint16StringV(v, fastpathCheckNilTrue, e) - case *map[uint16]string: - fastpathTV.EncMapUint16StringV(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint: - fastpathTV.EncMapUint16UintV(v, fastpathCheckNilTrue, e) - case *map[uint16]uint: - fastpathTV.EncMapUint16UintV(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint8: - fastpathTV.EncMapUint16Uint8V(v, fastpathCheckNilTrue, e) - case *map[uint16]uint8: - fastpathTV.EncMapUint16Uint8V(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint16: - fastpathTV.EncMapUint16Uint16V(v, fastpathCheckNilTrue, e) - case *map[uint16]uint16: - fastpathTV.EncMapUint16Uint16V(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint32: - fastpathTV.EncMapUint16Uint32V(v, fastpathCheckNilTrue, e) - case *map[uint16]uint32: - fastpathTV.EncMapUint16Uint32V(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint64: - fastpathTV.EncMapUint16Uint64V(v, fastpathCheckNilTrue, e) - case *map[uint16]uint64: - fastpathTV.EncMapUint16Uint64V(*v, fastpathCheckNilTrue, e) - - case map[uint16]uintptr: - fastpathTV.EncMapUint16UintptrV(v, fastpathCheckNilTrue, e) - case *map[uint16]uintptr: - fastpathTV.EncMapUint16UintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint16]int: - fastpathTV.EncMapUint16IntV(v, fastpathCheckNilTrue, e) - case *map[uint16]int: - fastpathTV.EncMapUint16IntV(*v, fastpathCheckNilTrue, e) - - case map[uint16]int8: - fastpathTV.EncMapUint16Int8V(v, fastpathCheckNilTrue, e) - case *map[uint16]int8: - fastpathTV.EncMapUint16Int8V(*v, fastpathCheckNilTrue, e) - - case map[uint16]int16: - fastpathTV.EncMapUint16Int16V(v, fastpathCheckNilTrue, e) - case *map[uint16]int16: - fastpathTV.EncMapUint16Int16V(*v, fastpathCheckNilTrue, e) - - case map[uint16]int32: - fastpathTV.EncMapUint16Int32V(v, fastpathCheckNilTrue, e) - case *map[uint16]int32: - fastpathTV.EncMapUint16Int32V(*v, fastpathCheckNilTrue, e) - - case map[uint16]int64: - fastpathTV.EncMapUint16Int64V(v, fastpathCheckNilTrue, e) - case *map[uint16]int64: - fastpathTV.EncMapUint16Int64V(*v, fastpathCheckNilTrue, e) - - case map[uint16]float32: - fastpathTV.EncMapUint16Float32V(v, fastpathCheckNilTrue, e) - case *map[uint16]float32: - fastpathTV.EncMapUint16Float32V(*v, fastpathCheckNilTrue, e) - - case map[uint16]float64: - fastpathTV.EncMapUint16Float64V(v, fastpathCheckNilTrue, e) - case *map[uint16]float64: - fastpathTV.EncMapUint16Float64V(*v, fastpathCheckNilTrue, e) - - case map[uint16]bool: - fastpathTV.EncMapUint16BoolV(v, fastpathCheckNilTrue, e) - case *map[uint16]bool: - fastpathTV.EncMapUint16BoolV(*v, fastpathCheckNilTrue, e) - - case []uint32: - fastpathTV.EncSliceUint32V(v, fastpathCheckNilTrue, e) - case *[]uint32: - fastpathTV.EncSliceUint32V(*v, fastpathCheckNilTrue, e) - - case map[uint32]interface{}: - fastpathTV.EncMapUint32IntfV(v, fastpathCheckNilTrue, e) - case *map[uint32]interface{}: - fastpathTV.EncMapUint32IntfV(*v, fastpathCheckNilTrue, e) - - case map[uint32]string: - fastpathTV.EncMapUint32StringV(v, fastpathCheckNilTrue, e) - case *map[uint32]string: - fastpathTV.EncMapUint32StringV(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint: - fastpathTV.EncMapUint32UintV(v, fastpathCheckNilTrue, e) - case *map[uint32]uint: - fastpathTV.EncMapUint32UintV(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint8: - fastpathTV.EncMapUint32Uint8V(v, fastpathCheckNilTrue, e) - case *map[uint32]uint8: - fastpathTV.EncMapUint32Uint8V(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint16: - fastpathTV.EncMapUint32Uint16V(v, fastpathCheckNilTrue, e) - case *map[uint32]uint16: - fastpathTV.EncMapUint32Uint16V(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint32: - fastpathTV.EncMapUint32Uint32V(v, fastpathCheckNilTrue, e) - case *map[uint32]uint32: - fastpathTV.EncMapUint32Uint32V(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint64: - fastpathTV.EncMapUint32Uint64V(v, fastpathCheckNilTrue, e) - case *map[uint32]uint64: - fastpathTV.EncMapUint32Uint64V(*v, fastpathCheckNilTrue, e) - - case map[uint32]uintptr: - fastpathTV.EncMapUint32UintptrV(v, fastpathCheckNilTrue, e) - case *map[uint32]uintptr: - fastpathTV.EncMapUint32UintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint32]int: - fastpathTV.EncMapUint32IntV(v, fastpathCheckNilTrue, e) - case *map[uint32]int: - fastpathTV.EncMapUint32IntV(*v, fastpathCheckNilTrue, e) - - case map[uint32]int8: - fastpathTV.EncMapUint32Int8V(v, fastpathCheckNilTrue, e) - case *map[uint32]int8: - fastpathTV.EncMapUint32Int8V(*v, fastpathCheckNilTrue, e) - - case map[uint32]int16: - fastpathTV.EncMapUint32Int16V(v, fastpathCheckNilTrue, e) - case *map[uint32]int16: - fastpathTV.EncMapUint32Int16V(*v, fastpathCheckNilTrue, e) - - case map[uint32]int32: - fastpathTV.EncMapUint32Int32V(v, fastpathCheckNilTrue, e) - case *map[uint32]int32: - fastpathTV.EncMapUint32Int32V(*v, fastpathCheckNilTrue, e) - - case map[uint32]int64: - fastpathTV.EncMapUint32Int64V(v, fastpathCheckNilTrue, e) - case *map[uint32]int64: - fastpathTV.EncMapUint32Int64V(*v, fastpathCheckNilTrue, e) - - case map[uint32]float32: - fastpathTV.EncMapUint32Float32V(v, fastpathCheckNilTrue, e) - case *map[uint32]float32: - fastpathTV.EncMapUint32Float32V(*v, fastpathCheckNilTrue, e) - - case map[uint32]float64: - fastpathTV.EncMapUint32Float64V(v, fastpathCheckNilTrue, e) - case *map[uint32]float64: - fastpathTV.EncMapUint32Float64V(*v, fastpathCheckNilTrue, e) - - case map[uint32]bool: - fastpathTV.EncMapUint32BoolV(v, fastpathCheckNilTrue, e) - case *map[uint32]bool: - fastpathTV.EncMapUint32BoolV(*v, fastpathCheckNilTrue, e) - - case []uint64: - fastpathTV.EncSliceUint64V(v, fastpathCheckNilTrue, e) - case *[]uint64: - fastpathTV.EncSliceUint64V(*v, fastpathCheckNilTrue, e) - - case map[uint64]interface{}: - fastpathTV.EncMapUint64IntfV(v, fastpathCheckNilTrue, e) - case *map[uint64]interface{}: - fastpathTV.EncMapUint64IntfV(*v, fastpathCheckNilTrue, e) - - case map[uint64]string: - fastpathTV.EncMapUint64StringV(v, fastpathCheckNilTrue, e) - case *map[uint64]string: - fastpathTV.EncMapUint64StringV(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint: - fastpathTV.EncMapUint64UintV(v, fastpathCheckNilTrue, e) - case *map[uint64]uint: - fastpathTV.EncMapUint64UintV(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint8: - fastpathTV.EncMapUint64Uint8V(v, fastpathCheckNilTrue, e) - case *map[uint64]uint8: - fastpathTV.EncMapUint64Uint8V(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint16: - fastpathTV.EncMapUint64Uint16V(v, fastpathCheckNilTrue, e) - case *map[uint64]uint16: - fastpathTV.EncMapUint64Uint16V(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint32: - fastpathTV.EncMapUint64Uint32V(v, fastpathCheckNilTrue, e) - case *map[uint64]uint32: - fastpathTV.EncMapUint64Uint32V(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint64: - fastpathTV.EncMapUint64Uint64V(v, fastpathCheckNilTrue, e) - case *map[uint64]uint64: - fastpathTV.EncMapUint64Uint64V(*v, fastpathCheckNilTrue, e) - - case map[uint64]uintptr: - fastpathTV.EncMapUint64UintptrV(v, fastpathCheckNilTrue, e) - case *map[uint64]uintptr: - fastpathTV.EncMapUint64UintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint64]int: - fastpathTV.EncMapUint64IntV(v, fastpathCheckNilTrue, e) - case *map[uint64]int: - fastpathTV.EncMapUint64IntV(*v, fastpathCheckNilTrue, e) - - case map[uint64]int8: - fastpathTV.EncMapUint64Int8V(v, fastpathCheckNilTrue, e) - case *map[uint64]int8: - fastpathTV.EncMapUint64Int8V(*v, fastpathCheckNilTrue, e) - - case map[uint64]int16: - fastpathTV.EncMapUint64Int16V(v, fastpathCheckNilTrue, e) - case *map[uint64]int16: - fastpathTV.EncMapUint64Int16V(*v, fastpathCheckNilTrue, e) - - case map[uint64]int32: - fastpathTV.EncMapUint64Int32V(v, fastpathCheckNilTrue, e) - case *map[uint64]int32: - fastpathTV.EncMapUint64Int32V(*v, fastpathCheckNilTrue, e) - - case map[uint64]int64: - fastpathTV.EncMapUint64Int64V(v, fastpathCheckNilTrue, e) - case *map[uint64]int64: - fastpathTV.EncMapUint64Int64V(*v, fastpathCheckNilTrue, e) - - case map[uint64]float32: - fastpathTV.EncMapUint64Float32V(v, fastpathCheckNilTrue, e) - case *map[uint64]float32: - fastpathTV.EncMapUint64Float32V(*v, fastpathCheckNilTrue, e) - - case map[uint64]float64: - fastpathTV.EncMapUint64Float64V(v, fastpathCheckNilTrue, e) - case *map[uint64]float64: - fastpathTV.EncMapUint64Float64V(*v, fastpathCheckNilTrue, e) - - case map[uint64]bool: - fastpathTV.EncMapUint64BoolV(v, fastpathCheckNilTrue, e) - case *map[uint64]bool: - fastpathTV.EncMapUint64BoolV(*v, fastpathCheckNilTrue, e) - - case []uintptr: - fastpathTV.EncSliceUintptrV(v, fastpathCheckNilTrue, e) - case *[]uintptr: - fastpathTV.EncSliceUintptrV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]interface{}: - fastpathTV.EncMapUintptrIntfV(v, fastpathCheckNilTrue, e) - case *map[uintptr]interface{}: - fastpathTV.EncMapUintptrIntfV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]string: - fastpathTV.EncMapUintptrStringV(v, fastpathCheckNilTrue, e) - case *map[uintptr]string: - fastpathTV.EncMapUintptrStringV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint: - fastpathTV.EncMapUintptrUintV(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint: - fastpathTV.EncMapUintptrUintV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint8: - fastpathTV.EncMapUintptrUint8V(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint8: - fastpathTV.EncMapUintptrUint8V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint16: - fastpathTV.EncMapUintptrUint16V(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint16: - fastpathTV.EncMapUintptrUint16V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint32: - fastpathTV.EncMapUintptrUint32V(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint32: - fastpathTV.EncMapUintptrUint32V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint64: - fastpathTV.EncMapUintptrUint64V(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint64: - fastpathTV.EncMapUintptrUint64V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uintptr: - fastpathTV.EncMapUintptrUintptrV(v, fastpathCheckNilTrue, e) - case *map[uintptr]uintptr: - fastpathTV.EncMapUintptrUintptrV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int: - fastpathTV.EncMapUintptrIntV(v, fastpathCheckNilTrue, e) - case *map[uintptr]int: - fastpathTV.EncMapUintptrIntV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int8: - fastpathTV.EncMapUintptrInt8V(v, fastpathCheckNilTrue, e) - case *map[uintptr]int8: - fastpathTV.EncMapUintptrInt8V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int16: - fastpathTV.EncMapUintptrInt16V(v, fastpathCheckNilTrue, e) - case *map[uintptr]int16: - fastpathTV.EncMapUintptrInt16V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int32: - fastpathTV.EncMapUintptrInt32V(v, fastpathCheckNilTrue, e) - case *map[uintptr]int32: - fastpathTV.EncMapUintptrInt32V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int64: - fastpathTV.EncMapUintptrInt64V(v, fastpathCheckNilTrue, e) - case *map[uintptr]int64: - fastpathTV.EncMapUintptrInt64V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]float32: - fastpathTV.EncMapUintptrFloat32V(v, fastpathCheckNilTrue, e) - case *map[uintptr]float32: - fastpathTV.EncMapUintptrFloat32V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]float64: - fastpathTV.EncMapUintptrFloat64V(v, fastpathCheckNilTrue, e) - case *map[uintptr]float64: - fastpathTV.EncMapUintptrFloat64V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]bool: - fastpathTV.EncMapUintptrBoolV(v, fastpathCheckNilTrue, e) - case *map[uintptr]bool: - fastpathTV.EncMapUintptrBoolV(*v, fastpathCheckNilTrue, e) - - case []int: - fastpathTV.EncSliceIntV(v, fastpathCheckNilTrue, e) - case *[]int: - fastpathTV.EncSliceIntV(*v, fastpathCheckNilTrue, e) - - case map[int]interface{}: - fastpathTV.EncMapIntIntfV(v, fastpathCheckNilTrue, e) - case *map[int]interface{}: - fastpathTV.EncMapIntIntfV(*v, fastpathCheckNilTrue, e) - - case map[int]string: - fastpathTV.EncMapIntStringV(v, fastpathCheckNilTrue, e) - case *map[int]string: - fastpathTV.EncMapIntStringV(*v, fastpathCheckNilTrue, e) - - case map[int]uint: - fastpathTV.EncMapIntUintV(v, fastpathCheckNilTrue, e) - case *map[int]uint: - fastpathTV.EncMapIntUintV(*v, fastpathCheckNilTrue, e) - - case map[int]uint8: - fastpathTV.EncMapIntUint8V(v, fastpathCheckNilTrue, e) - case *map[int]uint8: - fastpathTV.EncMapIntUint8V(*v, fastpathCheckNilTrue, e) - - case map[int]uint16: - fastpathTV.EncMapIntUint16V(v, fastpathCheckNilTrue, e) - case *map[int]uint16: - fastpathTV.EncMapIntUint16V(*v, fastpathCheckNilTrue, e) - - case map[int]uint32: - fastpathTV.EncMapIntUint32V(v, fastpathCheckNilTrue, e) - case *map[int]uint32: - fastpathTV.EncMapIntUint32V(*v, fastpathCheckNilTrue, e) - - case map[int]uint64: - fastpathTV.EncMapIntUint64V(v, fastpathCheckNilTrue, e) - case *map[int]uint64: - fastpathTV.EncMapIntUint64V(*v, fastpathCheckNilTrue, e) - - case map[int]uintptr: - fastpathTV.EncMapIntUintptrV(v, fastpathCheckNilTrue, e) - case *map[int]uintptr: - fastpathTV.EncMapIntUintptrV(*v, fastpathCheckNilTrue, e) - - case map[int]int: - fastpathTV.EncMapIntIntV(v, fastpathCheckNilTrue, e) - case *map[int]int: - fastpathTV.EncMapIntIntV(*v, fastpathCheckNilTrue, e) - - case map[int]int8: - fastpathTV.EncMapIntInt8V(v, fastpathCheckNilTrue, e) - case *map[int]int8: - fastpathTV.EncMapIntInt8V(*v, fastpathCheckNilTrue, e) - - case map[int]int16: - fastpathTV.EncMapIntInt16V(v, fastpathCheckNilTrue, e) - case *map[int]int16: - fastpathTV.EncMapIntInt16V(*v, fastpathCheckNilTrue, e) - - case map[int]int32: - fastpathTV.EncMapIntInt32V(v, fastpathCheckNilTrue, e) - case *map[int]int32: - fastpathTV.EncMapIntInt32V(*v, fastpathCheckNilTrue, e) - - case map[int]int64: - fastpathTV.EncMapIntInt64V(v, fastpathCheckNilTrue, e) - case *map[int]int64: - fastpathTV.EncMapIntInt64V(*v, fastpathCheckNilTrue, e) - - case map[int]float32: - fastpathTV.EncMapIntFloat32V(v, fastpathCheckNilTrue, e) - case *map[int]float32: - fastpathTV.EncMapIntFloat32V(*v, fastpathCheckNilTrue, e) - - case map[int]float64: - fastpathTV.EncMapIntFloat64V(v, fastpathCheckNilTrue, e) - case *map[int]float64: - fastpathTV.EncMapIntFloat64V(*v, fastpathCheckNilTrue, e) - - case map[int]bool: - fastpathTV.EncMapIntBoolV(v, fastpathCheckNilTrue, e) - case *map[int]bool: - fastpathTV.EncMapIntBoolV(*v, fastpathCheckNilTrue, e) - - case []int8: - fastpathTV.EncSliceInt8V(v, fastpathCheckNilTrue, e) - case *[]int8: - fastpathTV.EncSliceInt8V(*v, fastpathCheckNilTrue, e) - - case map[int8]interface{}: - fastpathTV.EncMapInt8IntfV(v, fastpathCheckNilTrue, e) - case *map[int8]interface{}: - fastpathTV.EncMapInt8IntfV(*v, fastpathCheckNilTrue, e) - - case map[int8]string: - fastpathTV.EncMapInt8StringV(v, fastpathCheckNilTrue, e) - case *map[int8]string: - fastpathTV.EncMapInt8StringV(*v, fastpathCheckNilTrue, e) - - case map[int8]uint: - fastpathTV.EncMapInt8UintV(v, fastpathCheckNilTrue, e) - case *map[int8]uint: - fastpathTV.EncMapInt8UintV(*v, fastpathCheckNilTrue, e) - - case map[int8]uint8: - fastpathTV.EncMapInt8Uint8V(v, fastpathCheckNilTrue, e) - case *map[int8]uint8: - fastpathTV.EncMapInt8Uint8V(*v, fastpathCheckNilTrue, e) - - case map[int8]uint16: - fastpathTV.EncMapInt8Uint16V(v, fastpathCheckNilTrue, e) - case *map[int8]uint16: - fastpathTV.EncMapInt8Uint16V(*v, fastpathCheckNilTrue, e) - - case map[int8]uint32: - fastpathTV.EncMapInt8Uint32V(v, fastpathCheckNilTrue, e) - case *map[int8]uint32: - fastpathTV.EncMapInt8Uint32V(*v, fastpathCheckNilTrue, e) - - case map[int8]uint64: - fastpathTV.EncMapInt8Uint64V(v, fastpathCheckNilTrue, e) - case *map[int8]uint64: - fastpathTV.EncMapInt8Uint64V(*v, fastpathCheckNilTrue, e) - - case map[int8]uintptr: - fastpathTV.EncMapInt8UintptrV(v, fastpathCheckNilTrue, e) - case *map[int8]uintptr: - fastpathTV.EncMapInt8UintptrV(*v, fastpathCheckNilTrue, e) - - case map[int8]int: - fastpathTV.EncMapInt8IntV(v, fastpathCheckNilTrue, e) - case *map[int8]int: - fastpathTV.EncMapInt8IntV(*v, fastpathCheckNilTrue, e) - - case map[int8]int8: - fastpathTV.EncMapInt8Int8V(v, fastpathCheckNilTrue, e) - case *map[int8]int8: - fastpathTV.EncMapInt8Int8V(*v, fastpathCheckNilTrue, e) - - case map[int8]int16: - fastpathTV.EncMapInt8Int16V(v, fastpathCheckNilTrue, e) - case *map[int8]int16: - fastpathTV.EncMapInt8Int16V(*v, fastpathCheckNilTrue, e) - - case map[int8]int32: - fastpathTV.EncMapInt8Int32V(v, fastpathCheckNilTrue, e) - case *map[int8]int32: - fastpathTV.EncMapInt8Int32V(*v, fastpathCheckNilTrue, e) - - case map[int8]int64: - fastpathTV.EncMapInt8Int64V(v, fastpathCheckNilTrue, e) - case *map[int8]int64: - fastpathTV.EncMapInt8Int64V(*v, fastpathCheckNilTrue, e) - - case map[int8]float32: - fastpathTV.EncMapInt8Float32V(v, fastpathCheckNilTrue, e) - case *map[int8]float32: - fastpathTV.EncMapInt8Float32V(*v, fastpathCheckNilTrue, e) - - case map[int8]float64: - fastpathTV.EncMapInt8Float64V(v, fastpathCheckNilTrue, e) - case *map[int8]float64: - fastpathTV.EncMapInt8Float64V(*v, fastpathCheckNilTrue, e) - - case map[int8]bool: - fastpathTV.EncMapInt8BoolV(v, fastpathCheckNilTrue, e) - case *map[int8]bool: - fastpathTV.EncMapInt8BoolV(*v, fastpathCheckNilTrue, e) - - case []int16: - fastpathTV.EncSliceInt16V(v, fastpathCheckNilTrue, e) - case *[]int16: - fastpathTV.EncSliceInt16V(*v, fastpathCheckNilTrue, e) - - case map[int16]interface{}: - fastpathTV.EncMapInt16IntfV(v, fastpathCheckNilTrue, e) - case *map[int16]interface{}: - fastpathTV.EncMapInt16IntfV(*v, fastpathCheckNilTrue, e) - - case map[int16]string: - fastpathTV.EncMapInt16StringV(v, fastpathCheckNilTrue, e) - case *map[int16]string: - fastpathTV.EncMapInt16StringV(*v, fastpathCheckNilTrue, e) - - case map[int16]uint: - fastpathTV.EncMapInt16UintV(v, fastpathCheckNilTrue, e) - case *map[int16]uint: - fastpathTV.EncMapInt16UintV(*v, fastpathCheckNilTrue, e) - - case map[int16]uint8: - fastpathTV.EncMapInt16Uint8V(v, fastpathCheckNilTrue, e) - case *map[int16]uint8: - fastpathTV.EncMapInt16Uint8V(*v, fastpathCheckNilTrue, e) - - case map[int16]uint16: - fastpathTV.EncMapInt16Uint16V(v, fastpathCheckNilTrue, e) - case *map[int16]uint16: - fastpathTV.EncMapInt16Uint16V(*v, fastpathCheckNilTrue, e) - - case map[int16]uint32: - fastpathTV.EncMapInt16Uint32V(v, fastpathCheckNilTrue, e) - case *map[int16]uint32: - fastpathTV.EncMapInt16Uint32V(*v, fastpathCheckNilTrue, e) - - case map[int16]uint64: - fastpathTV.EncMapInt16Uint64V(v, fastpathCheckNilTrue, e) - case *map[int16]uint64: - fastpathTV.EncMapInt16Uint64V(*v, fastpathCheckNilTrue, e) - - case map[int16]uintptr: - fastpathTV.EncMapInt16UintptrV(v, fastpathCheckNilTrue, e) - case *map[int16]uintptr: - fastpathTV.EncMapInt16UintptrV(*v, fastpathCheckNilTrue, e) - - case map[int16]int: - fastpathTV.EncMapInt16IntV(v, fastpathCheckNilTrue, e) - case *map[int16]int: - fastpathTV.EncMapInt16IntV(*v, fastpathCheckNilTrue, e) - - case map[int16]int8: - fastpathTV.EncMapInt16Int8V(v, fastpathCheckNilTrue, e) - case *map[int16]int8: - fastpathTV.EncMapInt16Int8V(*v, fastpathCheckNilTrue, e) - - case map[int16]int16: - fastpathTV.EncMapInt16Int16V(v, fastpathCheckNilTrue, e) - case *map[int16]int16: - fastpathTV.EncMapInt16Int16V(*v, fastpathCheckNilTrue, e) - - case map[int16]int32: - fastpathTV.EncMapInt16Int32V(v, fastpathCheckNilTrue, e) - case *map[int16]int32: - fastpathTV.EncMapInt16Int32V(*v, fastpathCheckNilTrue, e) - - case map[int16]int64: - fastpathTV.EncMapInt16Int64V(v, fastpathCheckNilTrue, e) - case *map[int16]int64: - fastpathTV.EncMapInt16Int64V(*v, fastpathCheckNilTrue, e) - - case map[int16]float32: - fastpathTV.EncMapInt16Float32V(v, fastpathCheckNilTrue, e) - case *map[int16]float32: - fastpathTV.EncMapInt16Float32V(*v, fastpathCheckNilTrue, e) - - case map[int16]float64: - fastpathTV.EncMapInt16Float64V(v, fastpathCheckNilTrue, e) - case *map[int16]float64: - fastpathTV.EncMapInt16Float64V(*v, fastpathCheckNilTrue, e) - - case map[int16]bool: - fastpathTV.EncMapInt16BoolV(v, fastpathCheckNilTrue, e) - case *map[int16]bool: - fastpathTV.EncMapInt16BoolV(*v, fastpathCheckNilTrue, e) - - case []int32: - fastpathTV.EncSliceInt32V(v, fastpathCheckNilTrue, e) - case *[]int32: - fastpathTV.EncSliceInt32V(*v, fastpathCheckNilTrue, e) - - case map[int32]interface{}: - fastpathTV.EncMapInt32IntfV(v, fastpathCheckNilTrue, e) - case *map[int32]interface{}: - fastpathTV.EncMapInt32IntfV(*v, fastpathCheckNilTrue, e) - - case map[int32]string: - fastpathTV.EncMapInt32StringV(v, fastpathCheckNilTrue, e) - case *map[int32]string: - fastpathTV.EncMapInt32StringV(*v, fastpathCheckNilTrue, e) - - case map[int32]uint: - fastpathTV.EncMapInt32UintV(v, fastpathCheckNilTrue, e) - case *map[int32]uint: - fastpathTV.EncMapInt32UintV(*v, fastpathCheckNilTrue, e) - - case map[int32]uint8: - fastpathTV.EncMapInt32Uint8V(v, fastpathCheckNilTrue, e) - case *map[int32]uint8: - fastpathTV.EncMapInt32Uint8V(*v, fastpathCheckNilTrue, e) - - case map[int32]uint16: - fastpathTV.EncMapInt32Uint16V(v, fastpathCheckNilTrue, e) - case *map[int32]uint16: - fastpathTV.EncMapInt32Uint16V(*v, fastpathCheckNilTrue, e) - - case map[int32]uint32: - fastpathTV.EncMapInt32Uint32V(v, fastpathCheckNilTrue, e) - case *map[int32]uint32: - fastpathTV.EncMapInt32Uint32V(*v, fastpathCheckNilTrue, e) - - case map[int32]uint64: - fastpathTV.EncMapInt32Uint64V(v, fastpathCheckNilTrue, e) - case *map[int32]uint64: - fastpathTV.EncMapInt32Uint64V(*v, fastpathCheckNilTrue, e) - - case map[int32]uintptr: - fastpathTV.EncMapInt32UintptrV(v, fastpathCheckNilTrue, e) - case *map[int32]uintptr: - fastpathTV.EncMapInt32UintptrV(*v, fastpathCheckNilTrue, e) - - case map[int32]int: - fastpathTV.EncMapInt32IntV(v, fastpathCheckNilTrue, e) - case *map[int32]int: - fastpathTV.EncMapInt32IntV(*v, fastpathCheckNilTrue, e) - - case map[int32]int8: - fastpathTV.EncMapInt32Int8V(v, fastpathCheckNilTrue, e) - case *map[int32]int8: - fastpathTV.EncMapInt32Int8V(*v, fastpathCheckNilTrue, e) - - case map[int32]int16: - fastpathTV.EncMapInt32Int16V(v, fastpathCheckNilTrue, e) - case *map[int32]int16: - fastpathTV.EncMapInt32Int16V(*v, fastpathCheckNilTrue, e) - - case map[int32]int32: - fastpathTV.EncMapInt32Int32V(v, fastpathCheckNilTrue, e) - case *map[int32]int32: - fastpathTV.EncMapInt32Int32V(*v, fastpathCheckNilTrue, e) - - case map[int32]int64: - fastpathTV.EncMapInt32Int64V(v, fastpathCheckNilTrue, e) - case *map[int32]int64: - fastpathTV.EncMapInt32Int64V(*v, fastpathCheckNilTrue, e) - - case map[int32]float32: - fastpathTV.EncMapInt32Float32V(v, fastpathCheckNilTrue, e) - case *map[int32]float32: - fastpathTV.EncMapInt32Float32V(*v, fastpathCheckNilTrue, e) - - case map[int32]float64: - fastpathTV.EncMapInt32Float64V(v, fastpathCheckNilTrue, e) - case *map[int32]float64: - fastpathTV.EncMapInt32Float64V(*v, fastpathCheckNilTrue, e) - - case map[int32]bool: - fastpathTV.EncMapInt32BoolV(v, fastpathCheckNilTrue, e) - case *map[int32]bool: - fastpathTV.EncMapInt32BoolV(*v, fastpathCheckNilTrue, e) - - case []int64: - fastpathTV.EncSliceInt64V(v, fastpathCheckNilTrue, e) - case *[]int64: - fastpathTV.EncSliceInt64V(*v, fastpathCheckNilTrue, e) - - case map[int64]interface{}: - fastpathTV.EncMapInt64IntfV(v, fastpathCheckNilTrue, e) - case *map[int64]interface{}: - fastpathTV.EncMapInt64IntfV(*v, fastpathCheckNilTrue, e) - - case map[int64]string: - fastpathTV.EncMapInt64StringV(v, fastpathCheckNilTrue, e) - case *map[int64]string: - fastpathTV.EncMapInt64StringV(*v, fastpathCheckNilTrue, e) - - case map[int64]uint: - fastpathTV.EncMapInt64UintV(v, fastpathCheckNilTrue, e) - case *map[int64]uint: - fastpathTV.EncMapInt64UintV(*v, fastpathCheckNilTrue, e) - - case map[int64]uint8: - fastpathTV.EncMapInt64Uint8V(v, fastpathCheckNilTrue, e) - case *map[int64]uint8: - fastpathTV.EncMapInt64Uint8V(*v, fastpathCheckNilTrue, e) - - case map[int64]uint16: - fastpathTV.EncMapInt64Uint16V(v, fastpathCheckNilTrue, e) - case *map[int64]uint16: - fastpathTV.EncMapInt64Uint16V(*v, fastpathCheckNilTrue, e) - - case map[int64]uint32: - fastpathTV.EncMapInt64Uint32V(v, fastpathCheckNilTrue, e) - case *map[int64]uint32: - fastpathTV.EncMapInt64Uint32V(*v, fastpathCheckNilTrue, e) - - case map[int64]uint64: - fastpathTV.EncMapInt64Uint64V(v, fastpathCheckNilTrue, e) - case *map[int64]uint64: - fastpathTV.EncMapInt64Uint64V(*v, fastpathCheckNilTrue, e) - - case map[int64]uintptr: - fastpathTV.EncMapInt64UintptrV(v, fastpathCheckNilTrue, e) - case *map[int64]uintptr: - fastpathTV.EncMapInt64UintptrV(*v, fastpathCheckNilTrue, e) - - case map[int64]int: - fastpathTV.EncMapInt64IntV(v, fastpathCheckNilTrue, e) - case *map[int64]int: - fastpathTV.EncMapInt64IntV(*v, fastpathCheckNilTrue, e) - - case map[int64]int8: - fastpathTV.EncMapInt64Int8V(v, fastpathCheckNilTrue, e) - case *map[int64]int8: - fastpathTV.EncMapInt64Int8V(*v, fastpathCheckNilTrue, e) - - case map[int64]int16: - fastpathTV.EncMapInt64Int16V(v, fastpathCheckNilTrue, e) - case *map[int64]int16: - fastpathTV.EncMapInt64Int16V(*v, fastpathCheckNilTrue, e) - - case map[int64]int32: - fastpathTV.EncMapInt64Int32V(v, fastpathCheckNilTrue, e) - case *map[int64]int32: - fastpathTV.EncMapInt64Int32V(*v, fastpathCheckNilTrue, e) - - case map[int64]int64: - fastpathTV.EncMapInt64Int64V(v, fastpathCheckNilTrue, e) - case *map[int64]int64: - fastpathTV.EncMapInt64Int64V(*v, fastpathCheckNilTrue, e) - - case map[int64]float32: - fastpathTV.EncMapInt64Float32V(v, fastpathCheckNilTrue, e) - case *map[int64]float32: - fastpathTV.EncMapInt64Float32V(*v, fastpathCheckNilTrue, e) - - case map[int64]float64: - fastpathTV.EncMapInt64Float64V(v, fastpathCheckNilTrue, e) - case *map[int64]float64: - fastpathTV.EncMapInt64Float64V(*v, fastpathCheckNilTrue, e) - - case map[int64]bool: - fastpathTV.EncMapInt64BoolV(v, fastpathCheckNilTrue, e) - case *map[int64]bool: - fastpathTV.EncMapInt64BoolV(*v, fastpathCheckNilTrue, e) - - case []bool: - fastpathTV.EncSliceBoolV(v, fastpathCheckNilTrue, e) - case *[]bool: - fastpathTV.EncSliceBoolV(*v, fastpathCheckNilTrue, e) - - case map[bool]interface{}: - fastpathTV.EncMapBoolIntfV(v, fastpathCheckNilTrue, e) - case *map[bool]interface{}: - fastpathTV.EncMapBoolIntfV(*v, fastpathCheckNilTrue, e) - - case map[bool]string: - fastpathTV.EncMapBoolStringV(v, fastpathCheckNilTrue, e) - case *map[bool]string: - fastpathTV.EncMapBoolStringV(*v, fastpathCheckNilTrue, e) - - case map[bool]uint: - fastpathTV.EncMapBoolUintV(v, fastpathCheckNilTrue, e) - case *map[bool]uint: - fastpathTV.EncMapBoolUintV(*v, fastpathCheckNilTrue, e) - - case map[bool]uint8: - fastpathTV.EncMapBoolUint8V(v, fastpathCheckNilTrue, e) - case *map[bool]uint8: - fastpathTV.EncMapBoolUint8V(*v, fastpathCheckNilTrue, e) - - case map[bool]uint16: - fastpathTV.EncMapBoolUint16V(v, fastpathCheckNilTrue, e) - case *map[bool]uint16: - fastpathTV.EncMapBoolUint16V(*v, fastpathCheckNilTrue, e) - - case map[bool]uint32: - fastpathTV.EncMapBoolUint32V(v, fastpathCheckNilTrue, e) - case *map[bool]uint32: - fastpathTV.EncMapBoolUint32V(*v, fastpathCheckNilTrue, e) - - case map[bool]uint64: - fastpathTV.EncMapBoolUint64V(v, fastpathCheckNilTrue, e) - case *map[bool]uint64: - fastpathTV.EncMapBoolUint64V(*v, fastpathCheckNilTrue, e) - - case map[bool]uintptr: - fastpathTV.EncMapBoolUintptrV(v, fastpathCheckNilTrue, e) - case *map[bool]uintptr: - fastpathTV.EncMapBoolUintptrV(*v, fastpathCheckNilTrue, e) - - case map[bool]int: - fastpathTV.EncMapBoolIntV(v, fastpathCheckNilTrue, e) - case *map[bool]int: - fastpathTV.EncMapBoolIntV(*v, fastpathCheckNilTrue, e) - - case map[bool]int8: - fastpathTV.EncMapBoolInt8V(v, fastpathCheckNilTrue, e) - case *map[bool]int8: - fastpathTV.EncMapBoolInt8V(*v, fastpathCheckNilTrue, e) - - case map[bool]int16: - fastpathTV.EncMapBoolInt16V(v, fastpathCheckNilTrue, e) - case *map[bool]int16: - fastpathTV.EncMapBoolInt16V(*v, fastpathCheckNilTrue, e) - - case map[bool]int32: - fastpathTV.EncMapBoolInt32V(v, fastpathCheckNilTrue, e) - case *map[bool]int32: - fastpathTV.EncMapBoolInt32V(*v, fastpathCheckNilTrue, e) - - case map[bool]int64: - fastpathTV.EncMapBoolInt64V(v, fastpathCheckNilTrue, e) - case *map[bool]int64: - fastpathTV.EncMapBoolInt64V(*v, fastpathCheckNilTrue, e) - - case map[bool]float32: - fastpathTV.EncMapBoolFloat32V(v, fastpathCheckNilTrue, e) - case *map[bool]float32: - fastpathTV.EncMapBoolFloat32V(*v, fastpathCheckNilTrue, e) - - case map[bool]float64: - fastpathTV.EncMapBoolFloat64V(v, fastpathCheckNilTrue, e) - case *map[bool]float64: - fastpathTV.EncMapBoolFloat64V(*v, fastpathCheckNilTrue, e) - - case map[bool]bool: - fastpathTV.EncMapBoolBoolV(v, fastpathCheckNilTrue, e) - case *map[bool]bool: - fastpathTV.EncMapBoolBoolV(*v, fastpathCheckNilTrue, e) - - default: - _ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release) - return false - } - return true -} - -func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool { - if !fastpathEnabled { - return false - } - switch v := iv.(type) { - - case []interface{}: - fastpathTV.EncSliceIntfV(v, fastpathCheckNilTrue, e) - case *[]interface{}: - fastpathTV.EncSliceIntfV(*v, fastpathCheckNilTrue, e) - - case []string: - fastpathTV.EncSliceStringV(v, fastpathCheckNilTrue, e) - case *[]string: - fastpathTV.EncSliceStringV(*v, fastpathCheckNilTrue, e) - - case []float32: - fastpathTV.EncSliceFloat32V(v, fastpathCheckNilTrue, e) - case *[]float32: - fastpathTV.EncSliceFloat32V(*v, fastpathCheckNilTrue, e) - - case []float64: - fastpathTV.EncSliceFloat64V(v, fastpathCheckNilTrue, e) - case *[]float64: - fastpathTV.EncSliceFloat64V(*v, fastpathCheckNilTrue, e) - - case []uint: - fastpathTV.EncSliceUintV(v, fastpathCheckNilTrue, e) - case *[]uint: - fastpathTV.EncSliceUintV(*v, fastpathCheckNilTrue, e) - - case []uint16: - fastpathTV.EncSliceUint16V(v, fastpathCheckNilTrue, e) - case *[]uint16: - fastpathTV.EncSliceUint16V(*v, fastpathCheckNilTrue, e) - - case []uint32: - fastpathTV.EncSliceUint32V(v, fastpathCheckNilTrue, e) - case *[]uint32: - fastpathTV.EncSliceUint32V(*v, fastpathCheckNilTrue, e) - - case []uint64: - fastpathTV.EncSliceUint64V(v, fastpathCheckNilTrue, e) - case *[]uint64: - fastpathTV.EncSliceUint64V(*v, fastpathCheckNilTrue, e) - - case []uintptr: - fastpathTV.EncSliceUintptrV(v, fastpathCheckNilTrue, e) - case *[]uintptr: - fastpathTV.EncSliceUintptrV(*v, fastpathCheckNilTrue, e) - - case []int: - fastpathTV.EncSliceIntV(v, fastpathCheckNilTrue, e) - case *[]int: - fastpathTV.EncSliceIntV(*v, fastpathCheckNilTrue, e) - - case []int8: - fastpathTV.EncSliceInt8V(v, fastpathCheckNilTrue, e) - case *[]int8: - fastpathTV.EncSliceInt8V(*v, fastpathCheckNilTrue, e) - - case []int16: - fastpathTV.EncSliceInt16V(v, fastpathCheckNilTrue, e) - case *[]int16: - fastpathTV.EncSliceInt16V(*v, fastpathCheckNilTrue, e) - - case []int32: - fastpathTV.EncSliceInt32V(v, fastpathCheckNilTrue, e) - case *[]int32: - fastpathTV.EncSliceInt32V(*v, fastpathCheckNilTrue, e) - - case []int64: - fastpathTV.EncSliceInt64V(v, fastpathCheckNilTrue, e) - case *[]int64: - fastpathTV.EncSliceInt64V(*v, fastpathCheckNilTrue, e) - - case []bool: - fastpathTV.EncSliceBoolV(v, fastpathCheckNilTrue, e) - case *[]bool: - fastpathTV.EncSliceBoolV(*v, fastpathCheckNilTrue, e) - - default: - _ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release) - return false - } - return true -} - -func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool { - if !fastpathEnabled { - return false - } - switch v := iv.(type) { - - case map[interface{}]interface{}: - fastpathTV.EncMapIntfIntfV(v, fastpathCheckNilTrue, e) - case *map[interface{}]interface{}: - fastpathTV.EncMapIntfIntfV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]string: - fastpathTV.EncMapIntfStringV(v, fastpathCheckNilTrue, e) - case *map[interface{}]string: - fastpathTV.EncMapIntfStringV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint: - fastpathTV.EncMapIntfUintV(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint: - fastpathTV.EncMapIntfUintV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint8: - fastpathTV.EncMapIntfUint8V(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint8: - fastpathTV.EncMapIntfUint8V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint16: - fastpathTV.EncMapIntfUint16V(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint16: - fastpathTV.EncMapIntfUint16V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint32: - fastpathTV.EncMapIntfUint32V(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint32: - fastpathTV.EncMapIntfUint32V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uint64: - fastpathTV.EncMapIntfUint64V(v, fastpathCheckNilTrue, e) - case *map[interface{}]uint64: - fastpathTV.EncMapIntfUint64V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]uintptr: - fastpathTV.EncMapIntfUintptrV(v, fastpathCheckNilTrue, e) - case *map[interface{}]uintptr: - fastpathTV.EncMapIntfUintptrV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int: - fastpathTV.EncMapIntfIntV(v, fastpathCheckNilTrue, e) - case *map[interface{}]int: - fastpathTV.EncMapIntfIntV(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int8: - fastpathTV.EncMapIntfInt8V(v, fastpathCheckNilTrue, e) - case *map[interface{}]int8: - fastpathTV.EncMapIntfInt8V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int16: - fastpathTV.EncMapIntfInt16V(v, fastpathCheckNilTrue, e) - case *map[interface{}]int16: - fastpathTV.EncMapIntfInt16V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int32: - fastpathTV.EncMapIntfInt32V(v, fastpathCheckNilTrue, e) - case *map[interface{}]int32: - fastpathTV.EncMapIntfInt32V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]int64: - fastpathTV.EncMapIntfInt64V(v, fastpathCheckNilTrue, e) - case *map[interface{}]int64: - fastpathTV.EncMapIntfInt64V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]float32: - fastpathTV.EncMapIntfFloat32V(v, fastpathCheckNilTrue, e) - case *map[interface{}]float32: - fastpathTV.EncMapIntfFloat32V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]float64: - fastpathTV.EncMapIntfFloat64V(v, fastpathCheckNilTrue, e) - case *map[interface{}]float64: - fastpathTV.EncMapIntfFloat64V(*v, fastpathCheckNilTrue, e) - - case map[interface{}]bool: - fastpathTV.EncMapIntfBoolV(v, fastpathCheckNilTrue, e) - case *map[interface{}]bool: - fastpathTV.EncMapIntfBoolV(*v, fastpathCheckNilTrue, e) - - case map[string]interface{}: - fastpathTV.EncMapStringIntfV(v, fastpathCheckNilTrue, e) - case *map[string]interface{}: - fastpathTV.EncMapStringIntfV(*v, fastpathCheckNilTrue, e) - - case map[string]string: - fastpathTV.EncMapStringStringV(v, fastpathCheckNilTrue, e) - case *map[string]string: - fastpathTV.EncMapStringStringV(*v, fastpathCheckNilTrue, e) - - case map[string]uint: - fastpathTV.EncMapStringUintV(v, fastpathCheckNilTrue, e) - case *map[string]uint: - fastpathTV.EncMapStringUintV(*v, fastpathCheckNilTrue, e) - - case map[string]uint8: - fastpathTV.EncMapStringUint8V(v, fastpathCheckNilTrue, e) - case *map[string]uint8: - fastpathTV.EncMapStringUint8V(*v, fastpathCheckNilTrue, e) - - case map[string]uint16: - fastpathTV.EncMapStringUint16V(v, fastpathCheckNilTrue, e) - case *map[string]uint16: - fastpathTV.EncMapStringUint16V(*v, fastpathCheckNilTrue, e) - - case map[string]uint32: - fastpathTV.EncMapStringUint32V(v, fastpathCheckNilTrue, e) - case *map[string]uint32: - fastpathTV.EncMapStringUint32V(*v, fastpathCheckNilTrue, e) - - case map[string]uint64: - fastpathTV.EncMapStringUint64V(v, fastpathCheckNilTrue, e) - case *map[string]uint64: - fastpathTV.EncMapStringUint64V(*v, fastpathCheckNilTrue, e) - - case map[string]uintptr: - fastpathTV.EncMapStringUintptrV(v, fastpathCheckNilTrue, e) - case *map[string]uintptr: - fastpathTV.EncMapStringUintptrV(*v, fastpathCheckNilTrue, e) - - case map[string]int: - fastpathTV.EncMapStringIntV(v, fastpathCheckNilTrue, e) - case *map[string]int: - fastpathTV.EncMapStringIntV(*v, fastpathCheckNilTrue, e) - - case map[string]int8: - fastpathTV.EncMapStringInt8V(v, fastpathCheckNilTrue, e) - case *map[string]int8: - fastpathTV.EncMapStringInt8V(*v, fastpathCheckNilTrue, e) - - case map[string]int16: - fastpathTV.EncMapStringInt16V(v, fastpathCheckNilTrue, e) - case *map[string]int16: - fastpathTV.EncMapStringInt16V(*v, fastpathCheckNilTrue, e) - - case map[string]int32: - fastpathTV.EncMapStringInt32V(v, fastpathCheckNilTrue, e) - case *map[string]int32: - fastpathTV.EncMapStringInt32V(*v, fastpathCheckNilTrue, e) - - case map[string]int64: - fastpathTV.EncMapStringInt64V(v, fastpathCheckNilTrue, e) - case *map[string]int64: - fastpathTV.EncMapStringInt64V(*v, fastpathCheckNilTrue, e) - - case map[string]float32: - fastpathTV.EncMapStringFloat32V(v, fastpathCheckNilTrue, e) - case *map[string]float32: - fastpathTV.EncMapStringFloat32V(*v, fastpathCheckNilTrue, e) - - case map[string]float64: - fastpathTV.EncMapStringFloat64V(v, fastpathCheckNilTrue, e) - case *map[string]float64: - fastpathTV.EncMapStringFloat64V(*v, fastpathCheckNilTrue, e) - - case map[string]bool: - fastpathTV.EncMapStringBoolV(v, fastpathCheckNilTrue, e) - case *map[string]bool: - fastpathTV.EncMapStringBoolV(*v, fastpathCheckNilTrue, e) - - case map[float32]interface{}: - fastpathTV.EncMapFloat32IntfV(v, fastpathCheckNilTrue, e) - case *map[float32]interface{}: - fastpathTV.EncMapFloat32IntfV(*v, fastpathCheckNilTrue, e) - - case map[float32]string: - fastpathTV.EncMapFloat32StringV(v, fastpathCheckNilTrue, e) - case *map[float32]string: - fastpathTV.EncMapFloat32StringV(*v, fastpathCheckNilTrue, e) - - case map[float32]uint: - fastpathTV.EncMapFloat32UintV(v, fastpathCheckNilTrue, e) - case *map[float32]uint: - fastpathTV.EncMapFloat32UintV(*v, fastpathCheckNilTrue, e) - - case map[float32]uint8: - fastpathTV.EncMapFloat32Uint8V(v, fastpathCheckNilTrue, e) - case *map[float32]uint8: - fastpathTV.EncMapFloat32Uint8V(*v, fastpathCheckNilTrue, e) - - case map[float32]uint16: - fastpathTV.EncMapFloat32Uint16V(v, fastpathCheckNilTrue, e) - case *map[float32]uint16: - fastpathTV.EncMapFloat32Uint16V(*v, fastpathCheckNilTrue, e) - - case map[float32]uint32: - fastpathTV.EncMapFloat32Uint32V(v, fastpathCheckNilTrue, e) - case *map[float32]uint32: - fastpathTV.EncMapFloat32Uint32V(*v, fastpathCheckNilTrue, e) - - case map[float32]uint64: - fastpathTV.EncMapFloat32Uint64V(v, fastpathCheckNilTrue, e) - case *map[float32]uint64: - fastpathTV.EncMapFloat32Uint64V(*v, fastpathCheckNilTrue, e) - - case map[float32]uintptr: - fastpathTV.EncMapFloat32UintptrV(v, fastpathCheckNilTrue, e) - case *map[float32]uintptr: - fastpathTV.EncMapFloat32UintptrV(*v, fastpathCheckNilTrue, e) - - case map[float32]int: - fastpathTV.EncMapFloat32IntV(v, fastpathCheckNilTrue, e) - case *map[float32]int: - fastpathTV.EncMapFloat32IntV(*v, fastpathCheckNilTrue, e) - - case map[float32]int8: - fastpathTV.EncMapFloat32Int8V(v, fastpathCheckNilTrue, e) - case *map[float32]int8: - fastpathTV.EncMapFloat32Int8V(*v, fastpathCheckNilTrue, e) - - case map[float32]int16: - fastpathTV.EncMapFloat32Int16V(v, fastpathCheckNilTrue, e) - case *map[float32]int16: - fastpathTV.EncMapFloat32Int16V(*v, fastpathCheckNilTrue, e) - - case map[float32]int32: - fastpathTV.EncMapFloat32Int32V(v, fastpathCheckNilTrue, e) - case *map[float32]int32: - fastpathTV.EncMapFloat32Int32V(*v, fastpathCheckNilTrue, e) - - case map[float32]int64: - fastpathTV.EncMapFloat32Int64V(v, fastpathCheckNilTrue, e) - case *map[float32]int64: - fastpathTV.EncMapFloat32Int64V(*v, fastpathCheckNilTrue, e) - - case map[float32]float32: - fastpathTV.EncMapFloat32Float32V(v, fastpathCheckNilTrue, e) - case *map[float32]float32: - fastpathTV.EncMapFloat32Float32V(*v, fastpathCheckNilTrue, e) - - case map[float32]float64: - fastpathTV.EncMapFloat32Float64V(v, fastpathCheckNilTrue, e) - case *map[float32]float64: - fastpathTV.EncMapFloat32Float64V(*v, fastpathCheckNilTrue, e) - - case map[float32]bool: - fastpathTV.EncMapFloat32BoolV(v, fastpathCheckNilTrue, e) - case *map[float32]bool: - fastpathTV.EncMapFloat32BoolV(*v, fastpathCheckNilTrue, e) - - case map[float64]interface{}: - fastpathTV.EncMapFloat64IntfV(v, fastpathCheckNilTrue, e) - case *map[float64]interface{}: - fastpathTV.EncMapFloat64IntfV(*v, fastpathCheckNilTrue, e) - - case map[float64]string: - fastpathTV.EncMapFloat64StringV(v, fastpathCheckNilTrue, e) - case *map[float64]string: - fastpathTV.EncMapFloat64StringV(*v, fastpathCheckNilTrue, e) - - case map[float64]uint: - fastpathTV.EncMapFloat64UintV(v, fastpathCheckNilTrue, e) - case *map[float64]uint: - fastpathTV.EncMapFloat64UintV(*v, fastpathCheckNilTrue, e) - - case map[float64]uint8: - fastpathTV.EncMapFloat64Uint8V(v, fastpathCheckNilTrue, e) - case *map[float64]uint8: - fastpathTV.EncMapFloat64Uint8V(*v, fastpathCheckNilTrue, e) - - case map[float64]uint16: - fastpathTV.EncMapFloat64Uint16V(v, fastpathCheckNilTrue, e) - case *map[float64]uint16: - fastpathTV.EncMapFloat64Uint16V(*v, fastpathCheckNilTrue, e) - - case map[float64]uint32: - fastpathTV.EncMapFloat64Uint32V(v, fastpathCheckNilTrue, e) - case *map[float64]uint32: - fastpathTV.EncMapFloat64Uint32V(*v, fastpathCheckNilTrue, e) - - case map[float64]uint64: - fastpathTV.EncMapFloat64Uint64V(v, fastpathCheckNilTrue, e) - case *map[float64]uint64: - fastpathTV.EncMapFloat64Uint64V(*v, fastpathCheckNilTrue, e) - - case map[float64]uintptr: - fastpathTV.EncMapFloat64UintptrV(v, fastpathCheckNilTrue, e) - case *map[float64]uintptr: - fastpathTV.EncMapFloat64UintptrV(*v, fastpathCheckNilTrue, e) - - case map[float64]int: - fastpathTV.EncMapFloat64IntV(v, fastpathCheckNilTrue, e) - case *map[float64]int: - fastpathTV.EncMapFloat64IntV(*v, fastpathCheckNilTrue, e) - - case map[float64]int8: - fastpathTV.EncMapFloat64Int8V(v, fastpathCheckNilTrue, e) - case *map[float64]int8: - fastpathTV.EncMapFloat64Int8V(*v, fastpathCheckNilTrue, e) - - case map[float64]int16: - fastpathTV.EncMapFloat64Int16V(v, fastpathCheckNilTrue, e) - case *map[float64]int16: - fastpathTV.EncMapFloat64Int16V(*v, fastpathCheckNilTrue, e) - - case map[float64]int32: - fastpathTV.EncMapFloat64Int32V(v, fastpathCheckNilTrue, e) - case *map[float64]int32: - fastpathTV.EncMapFloat64Int32V(*v, fastpathCheckNilTrue, e) - - case map[float64]int64: - fastpathTV.EncMapFloat64Int64V(v, fastpathCheckNilTrue, e) - case *map[float64]int64: - fastpathTV.EncMapFloat64Int64V(*v, fastpathCheckNilTrue, e) - - case map[float64]float32: - fastpathTV.EncMapFloat64Float32V(v, fastpathCheckNilTrue, e) - case *map[float64]float32: - fastpathTV.EncMapFloat64Float32V(*v, fastpathCheckNilTrue, e) - - case map[float64]float64: - fastpathTV.EncMapFloat64Float64V(v, fastpathCheckNilTrue, e) - case *map[float64]float64: - fastpathTV.EncMapFloat64Float64V(*v, fastpathCheckNilTrue, e) - - case map[float64]bool: - fastpathTV.EncMapFloat64BoolV(v, fastpathCheckNilTrue, e) - case *map[float64]bool: - fastpathTV.EncMapFloat64BoolV(*v, fastpathCheckNilTrue, e) - - case map[uint]interface{}: - fastpathTV.EncMapUintIntfV(v, fastpathCheckNilTrue, e) - case *map[uint]interface{}: - fastpathTV.EncMapUintIntfV(*v, fastpathCheckNilTrue, e) - - case map[uint]string: - fastpathTV.EncMapUintStringV(v, fastpathCheckNilTrue, e) - case *map[uint]string: - fastpathTV.EncMapUintStringV(*v, fastpathCheckNilTrue, e) - - case map[uint]uint: - fastpathTV.EncMapUintUintV(v, fastpathCheckNilTrue, e) - case *map[uint]uint: - fastpathTV.EncMapUintUintV(*v, fastpathCheckNilTrue, e) - - case map[uint]uint8: - fastpathTV.EncMapUintUint8V(v, fastpathCheckNilTrue, e) - case *map[uint]uint8: - fastpathTV.EncMapUintUint8V(*v, fastpathCheckNilTrue, e) - - case map[uint]uint16: - fastpathTV.EncMapUintUint16V(v, fastpathCheckNilTrue, e) - case *map[uint]uint16: - fastpathTV.EncMapUintUint16V(*v, fastpathCheckNilTrue, e) - - case map[uint]uint32: - fastpathTV.EncMapUintUint32V(v, fastpathCheckNilTrue, e) - case *map[uint]uint32: - fastpathTV.EncMapUintUint32V(*v, fastpathCheckNilTrue, e) - - case map[uint]uint64: - fastpathTV.EncMapUintUint64V(v, fastpathCheckNilTrue, e) - case *map[uint]uint64: - fastpathTV.EncMapUintUint64V(*v, fastpathCheckNilTrue, e) - - case map[uint]uintptr: - fastpathTV.EncMapUintUintptrV(v, fastpathCheckNilTrue, e) - case *map[uint]uintptr: - fastpathTV.EncMapUintUintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint]int: - fastpathTV.EncMapUintIntV(v, fastpathCheckNilTrue, e) - case *map[uint]int: - fastpathTV.EncMapUintIntV(*v, fastpathCheckNilTrue, e) - - case map[uint]int8: - fastpathTV.EncMapUintInt8V(v, fastpathCheckNilTrue, e) - case *map[uint]int8: - fastpathTV.EncMapUintInt8V(*v, fastpathCheckNilTrue, e) - - case map[uint]int16: - fastpathTV.EncMapUintInt16V(v, fastpathCheckNilTrue, e) - case *map[uint]int16: - fastpathTV.EncMapUintInt16V(*v, fastpathCheckNilTrue, e) - - case map[uint]int32: - fastpathTV.EncMapUintInt32V(v, fastpathCheckNilTrue, e) - case *map[uint]int32: - fastpathTV.EncMapUintInt32V(*v, fastpathCheckNilTrue, e) - - case map[uint]int64: - fastpathTV.EncMapUintInt64V(v, fastpathCheckNilTrue, e) - case *map[uint]int64: - fastpathTV.EncMapUintInt64V(*v, fastpathCheckNilTrue, e) - - case map[uint]float32: - fastpathTV.EncMapUintFloat32V(v, fastpathCheckNilTrue, e) - case *map[uint]float32: - fastpathTV.EncMapUintFloat32V(*v, fastpathCheckNilTrue, e) - - case map[uint]float64: - fastpathTV.EncMapUintFloat64V(v, fastpathCheckNilTrue, e) - case *map[uint]float64: - fastpathTV.EncMapUintFloat64V(*v, fastpathCheckNilTrue, e) - - case map[uint]bool: - fastpathTV.EncMapUintBoolV(v, fastpathCheckNilTrue, e) - case *map[uint]bool: - fastpathTV.EncMapUintBoolV(*v, fastpathCheckNilTrue, e) - - case map[uint8]interface{}: - fastpathTV.EncMapUint8IntfV(v, fastpathCheckNilTrue, e) - case *map[uint8]interface{}: - fastpathTV.EncMapUint8IntfV(*v, fastpathCheckNilTrue, e) - - case map[uint8]string: - fastpathTV.EncMapUint8StringV(v, fastpathCheckNilTrue, e) - case *map[uint8]string: - fastpathTV.EncMapUint8StringV(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint: - fastpathTV.EncMapUint8UintV(v, fastpathCheckNilTrue, e) - case *map[uint8]uint: - fastpathTV.EncMapUint8UintV(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint8: - fastpathTV.EncMapUint8Uint8V(v, fastpathCheckNilTrue, e) - case *map[uint8]uint8: - fastpathTV.EncMapUint8Uint8V(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint16: - fastpathTV.EncMapUint8Uint16V(v, fastpathCheckNilTrue, e) - case *map[uint8]uint16: - fastpathTV.EncMapUint8Uint16V(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint32: - fastpathTV.EncMapUint8Uint32V(v, fastpathCheckNilTrue, e) - case *map[uint8]uint32: - fastpathTV.EncMapUint8Uint32V(*v, fastpathCheckNilTrue, e) - - case map[uint8]uint64: - fastpathTV.EncMapUint8Uint64V(v, fastpathCheckNilTrue, e) - case *map[uint8]uint64: - fastpathTV.EncMapUint8Uint64V(*v, fastpathCheckNilTrue, e) - - case map[uint8]uintptr: - fastpathTV.EncMapUint8UintptrV(v, fastpathCheckNilTrue, e) - case *map[uint8]uintptr: - fastpathTV.EncMapUint8UintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint8]int: - fastpathTV.EncMapUint8IntV(v, fastpathCheckNilTrue, e) - case *map[uint8]int: - fastpathTV.EncMapUint8IntV(*v, fastpathCheckNilTrue, e) - - case map[uint8]int8: - fastpathTV.EncMapUint8Int8V(v, fastpathCheckNilTrue, e) - case *map[uint8]int8: - fastpathTV.EncMapUint8Int8V(*v, fastpathCheckNilTrue, e) - - case map[uint8]int16: - fastpathTV.EncMapUint8Int16V(v, fastpathCheckNilTrue, e) - case *map[uint8]int16: - fastpathTV.EncMapUint8Int16V(*v, fastpathCheckNilTrue, e) - - case map[uint8]int32: - fastpathTV.EncMapUint8Int32V(v, fastpathCheckNilTrue, e) - case *map[uint8]int32: - fastpathTV.EncMapUint8Int32V(*v, fastpathCheckNilTrue, e) - - case map[uint8]int64: - fastpathTV.EncMapUint8Int64V(v, fastpathCheckNilTrue, e) - case *map[uint8]int64: - fastpathTV.EncMapUint8Int64V(*v, fastpathCheckNilTrue, e) - - case map[uint8]float32: - fastpathTV.EncMapUint8Float32V(v, fastpathCheckNilTrue, e) - case *map[uint8]float32: - fastpathTV.EncMapUint8Float32V(*v, fastpathCheckNilTrue, e) - - case map[uint8]float64: - fastpathTV.EncMapUint8Float64V(v, fastpathCheckNilTrue, e) - case *map[uint8]float64: - fastpathTV.EncMapUint8Float64V(*v, fastpathCheckNilTrue, e) - - case map[uint8]bool: - fastpathTV.EncMapUint8BoolV(v, fastpathCheckNilTrue, e) - case *map[uint8]bool: - fastpathTV.EncMapUint8BoolV(*v, fastpathCheckNilTrue, e) - - case map[uint16]interface{}: - fastpathTV.EncMapUint16IntfV(v, fastpathCheckNilTrue, e) - case *map[uint16]interface{}: - fastpathTV.EncMapUint16IntfV(*v, fastpathCheckNilTrue, e) - - case map[uint16]string: - fastpathTV.EncMapUint16StringV(v, fastpathCheckNilTrue, e) - case *map[uint16]string: - fastpathTV.EncMapUint16StringV(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint: - fastpathTV.EncMapUint16UintV(v, fastpathCheckNilTrue, e) - case *map[uint16]uint: - fastpathTV.EncMapUint16UintV(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint8: - fastpathTV.EncMapUint16Uint8V(v, fastpathCheckNilTrue, e) - case *map[uint16]uint8: - fastpathTV.EncMapUint16Uint8V(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint16: - fastpathTV.EncMapUint16Uint16V(v, fastpathCheckNilTrue, e) - case *map[uint16]uint16: - fastpathTV.EncMapUint16Uint16V(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint32: - fastpathTV.EncMapUint16Uint32V(v, fastpathCheckNilTrue, e) - case *map[uint16]uint32: - fastpathTV.EncMapUint16Uint32V(*v, fastpathCheckNilTrue, e) - - case map[uint16]uint64: - fastpathTV.EncMapUint16Uint64V(v, fastpathCheckNilTrue, e) - case *map[uint16]uint64: - fastpathTV.EncMapUint16Uint64V(*v, fastpathCheckNilTrue, e) - - case map[uint16]uintptr: - fastpathTV.EncMapUint16UintptrV(v, fastpathCheckNilTrue, e) - case *map[uint16]uintptr: - fastpathTV.EncMapUint16UintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint16]int: - fastpathTV.EncMapUint16IntV(v, fastpathCheckNilTrue, e) - case *map[uint16]int: - fastpathTV.EncMapUint16IntV(*v, fastpathCheckNilTrue, e) - - case map[uint16]int8: - fastpathTV.EncMapUint16Int8V(v, fastpathCheckNilTrue, e) - case *map[uint16]int8: - fastpathTV.EncMapUint16Int8V(*v, fastpathCheckNilTrue, e) - - case map[uint16]int16: - fastpathTV.EncMapUint16Int16V(v, fastpathCheckNilTrue, e) - case *map[uint16]int16: - fastpathTV.EncMapUint16Int16V(*v, fastpathCheckNilTrue, e) - - case map[uint16]int32: - fastpathTV.EncMapUint16Int32V(v, fastpathCheckNilTrue, e) - case *map[uint16]int32: - fastpathTV.EncMapUint16Int32V(*v, fastpathCheckNilTrue, e) - - case map[uint16]int64: - fastpathTV.EncMapUint16Int64V(v, fastpathCheckNilTrue, e) - case *map[uint16]int64: - fastpathTV.EncMapUint16Int64V(*v, fastpathCheckNilTrue, e) - - case map[uint16]float32: - fastpathTV.EncMapUint16Float32V(v, fastpathCheckNilTrue, e) - case *map[uint16]float32: - fastpathTV.EncMapUint16Float32V(*v, fastpathCheckNilTrue, e) - - case map[uint16]float64: - fastpathTV.EncMapUint16Float64V(v, fastpathCheckNilTrue, e) - case *map[uint16]float64: - fastpathTV.EncMapUint16Float64V(*v, fastpathCheckNilTrue, e) - - case map[uint16]bool: - fastpathTV.EncMapUint16BoolV(v, fastpathCheckNilTrue, e) - case *map[uint16]bool: - fastpathTV.EncMapUint16BoolV(*v, fastpathCheckNilTrue, e) - - case map[uint32]interface{}: - fastpathTV.EncMapUint32IntfV(v, fastpathCheckNilTrue, e) - case *map[uint32]interface{}: - fastpathTV.EncMapUint32IntfV(*v, fastpathCheckNilTrue, e) - - case map[uint32]string: - fastpathTV.EncMapUint32StringV(v, fastpathCheckNilTrue, e) - case *map[uint32]string: - fastpathTV.EncMapUint32StringV(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint: - fastpathTV.EncMapUint32UintV(v, fastpathCheckNilTrue, e) - case *map[uint32]uint: - fastpathTV.EncMapUint32UintV(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint8: - fastpathTV.EncMapUint32Uint8V(v, fastpathCheckNilTrue, e) - case *map[uint32]uint8: - fastpathTV.EncMapUint32Uint8V(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint16: - fastpathTV.EncMapUint32Uint16V(v, fastpathCheckNilTrue, e) - case *map[uint32]uint16: - fastpathTV.EncMapUint32Uint16V(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint32: - fastpathTV.EncMapUint32Uint32V(v, fastpathCheckNilTrue, e) - case *map[uint32]uint32: - fastpathTV.EncMapUint32Uint32V(*v, fastpathCheckNilTrue, e) - - case map[uint32]uint64: - fastpathTV.EncMapUint32Uint64V(v, fastpathCheckNilTrue, e) - case *map[uint32]uint64: - fastpathTV.EncMapUint32Uint64V(*v, fastpathCheckNilTrue, e) - - case map[uint32]uintptr: - fastpathTV.EncMapUint32UintptrV(v, fastpathCheckNilTrue, e) - case *map[uint32]uintptr: - fastpathTV.EncMapUint32UintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint32]int: - fastpathTV.EncMapUint32IntV(v, fastpathCheckNilTrue, e) - case *map[uint32]int: - fastpathTV.EncMapUint32IntV(*v, fastpathCheckNilTrue, e) - - case map[uint32]int8: - fastpathTV.EncMapUint32Int8V(v, fastpathCheckNilTrue, e) - case *map[uint32]int8: - fastpathTV.EncMapUint32Int8V(*v, fastpathCheckNilTrue, e) - - case map[uint32]int16: - fastpathTV.EncMapUint32Int16V(v, fastpathCheckNilTrue, e) - case *map[uint32]int16: - fastpathTV.EncMapUint32Int16V(*v, fastpathCheckNilTrue, e) - - case map[uint32]int32: - fastpathTV.EncMapUint32Int32V(v, fastpathCheckNilTrue, e) - case *map[uint32]int32: - fastpathTV.EncMapUint32Int32V(*v, fastpathCheckNilTrue, e) - - case map[uint32]int64: - fastpathTV.EncMapUint32Int64V(v, fastpathCheckNilTrue, e) - case *map[uint32]int64: - fastpathTV.EncMapUint32Int64V(*v, fastpathCheckNilTrue, e) - - case map[uint32]float32: - fastpathTV.EncMapUint32Float32V(v, fastpathCheckNilTrue, e) - case *map[uint32]float32: - fastpathTV.EncMapUint32Float32V(*v, fastpathCheckNilTrue, e) - - case map[uint32]float64: - fastpathTV.EncMapUint32Float64V(v, fastpathCheckNilTrue, e) - case *map[uint32]float64: - fastpathTV.EncMapUint32Float64V(*v, fastpathCheckNilTrue, e) - - case map[uint32]bool: - fastpathTV.EncMapUint32BoolV(v, fastpathCheckNilTrue, e) - case *map[uint32]bool: - fastpathTV.EncMapUint32BoolV(*v, fastpathCheckNilTrue, e) - - case map[uint64]interface{}: - fastpathTV.EncMapUint64IntfV(v, fastpathCheckNilTrue, e) - case *map[uint64]interface{}: - fastpathTV.EncMapUint64IntfV(*v, fastpathCheckNilTrue, e) - - case map[uint64]string: - fastpathTV.EncMapUint64StringV(v, fastpathCheckNilTrue, e) - case *map[uint64]string: - fastpathTV.EncMapUint64StringV(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint: - fastpathTV.EncMapUint64UintV(v, fastpathCheckNilTrue, e) - case *map[uint64]uint: - fastpathTV.EncMapUint64UintV(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint8: - fastpathTV.EncMapUint64Uint8V(v, fastpathCheckNilTrue, e) - case *map[uint64]uint8: - fastpathTV.EncMapUint64Uint8V(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint16: - fastpathTV.EncMapUint64Uint16V(v, fastpathCheckNilTrue, e) - case *map[uint64]uint16: - fastpathTV.EncMapUint64Uint16V(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint32: - fastpathTV.EncMapUint64Uint32V(v, fastpathCheckNilTrue, e) - case *map[uint64]uint32: - fastpathTV.EncMapUint64Uint32V(*v, fastpathCheckNilTrue, e) - - case map[uint64]uint64: - fastpathTV.EncMapUint64Uint64V(v, fastpathCheckNilTrue, e) - case *map[uint64]uint64: - fastpathTV.EncMapUint64Uint64V(*v, fastpathCheckNilTrue, e) - - case map[uint64]uintptr: - fastpathTV.EncMapUint64UintptrV(v, fastpathCheckNilTrue, e) - case *map[uint64]uintptr: - fastpathTV.EncMapUint64UintptrV(*v, fastpathCheckNilTrue, e) - - case map[uint64]int: - fastpathTV.EncMapUint64IntV(v, fastpathCheckNilTrue, e) - case *map[uint64]int: - fastpathTV.EncMapUint64IntV(*v, fastpathCheckNilTrue, e) - - case map[uint64]int8: - fastpathTV.EncMapUint64Int8V(v, fastpathCheckNilTrue, e) - case *map[uint64]int8: - fastpathTV.EncMapUint64Int8V(*v, fastpathCheckNilTrue, e) - - case map[uint64]int16: - fastpathTV.EncMapUint64Int16V(v, fastpathCheckNilTrue, e) - case *map[uint64]int16: - fastpathTV.EncMapUint64Int16V(*v, fastpathCheckNilTrue, e) - - case map[uint64]int32: - fastpathTV.EncMapUint64Int32V(v, fastpathCheckNilTrue, e) - case *map[uint64]int32: - fastpathTV.EncMapUint64Int32V(*v, fastpathCheckNilTrue, e) - - case map[uint64]int64: - fastpathTV.EncMapUint64Int64V(v, fastpathCheckNilTrue, e) - case *map[uint64]int64: - fastpathTV.EncMapUint64Int64V(*v, fastpathCheckNilTrue, e) - - case map[uint64]float32: - fastpathTV.EncMapUint64Float32V(v, fastpathCheckNilTrue, e) - case *map[uint64]float32: - fastpathTV.EncMapUint64Float32V(*v, fastpathCheckNilTrue, e) - - case map[uint64]float64: - fastpathTV.EncMapUint64Float64V(v, fastpathCheckNilTrue, e) - case *map[uint64]float64: - fastpathTV.EncMapUint64Float64V(*v, fastpathCheckNilTrue, e) - - case map[uint64]bool: - fastpathTV.EncMapUint64BoolV(v, fastpathCheckNilTrue, e) - case *map[uint64]bool: - fastpathTV.EncMapUint64BoolV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]interface{}: - fastpathTV.EncMapUintptrIntfV(v, fastpathCheckNilTrue, e) - case *map[uintptr]interface{}: - fastpathTV.EncMapUintptrIntfV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]string: - fastpathTV.EncMapUintptrStringV(v, fastpathCheckNilTrue, e) - case *map[uintptr]string: - fastpathTV.EncMapUintptrStringV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint: - fastpathTV.EncMapUintptrUintV(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint: - fastpathTV.EncMapUintptrUintV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint8: - fastpathTV.EncMapUintptrUint8V(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint8: - fastpathTV.EncMapUintptrUint8V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint16: - fastpathTV.EncMapUintptrUint16V(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint16: - fastpathTV.EncMapUintptrUint16V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint32: - fastpathTV.EncMapUintptrUint32V(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint32: - fastpathTV.EncMapUintptrUint32V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uint64: - fastpathTV.EncMapUintptrUint64V(v, fastpathCheckNilTrue, e) - case *map[uintptr]uint64: - fastpathTV.EncMapUintptrUint64V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]uintptr: - fastpathTV.EncMapUintptrUintptrV(v, fastpathCheckNilTrue, e) - case *map[uintptr]uintptr: - fastpathTV.EncMapUintptrUintptrV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int: - fastpathTV.EncMapUintptrIntV(v, fastpathCheckNilTrue, e) - case *map[uintptr]int: - fastpathTV.EncMapUintptrIntV(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int8: - fastpathTV.EncMapUintptrInt8V(v, fastpathCheckNilTrue, e) - case *map[uintptr]int8: - fastpathTV.EncMapUintptrInt8V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int16: - fastpathTV.EncMapUintptrInt16V(v, fastpathCheckNilTrue, e) - case *map[uintptr]int16: - fastpathTV.EncMapUintptrInt16V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int32: - fastpathTV.EncMapUintptrInt32V(v, fastpathCheckNilTrue, e) - case *map[uintptr]int32: - fastpathTV.EncMapUintptrInt32V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]int64: - fastpathTV.EncMapUintptrInt64V(v, fastpathCheckNilTrue, e) - case *map[uintptr]int64: - fastpathTV.EncMapUintptrInt64V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]float32: - fastpathTV.EncMapUintptrFloat32V(v, fastpathCheckNilTrue, e) - case *map[uintptr]float32: - fastpathTV.EncMapUintptrFloat32V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]float64: - fastpathTV.EncMapUintptrFloat64V(v, fastpathCheckNilTrue, e) - case *map[uintptr]float64: - fastpathTV.EncMapUintptrFloat64V(*v, fastpathCheckNilTrue, e) - - case map[uintptr]bool: - fastpathTV.EncMapUintptrBoolV(v, fastpathCheckNilTrue, e) - case *map[uintptr]bool: - fastpathTV.EncMapUintptrBoolV(*v, fastpathCheckNilTrue, e) - - case map[int]interface{}: - fastpathTV.EncMapIntIntfV(v, fastpathCheckNilTrue, e) - case *map[int]interface{}: - fastpathTV.EncMapIntIntfV(*v, fastpathCheckNilTrue, e) - - case map[int]string: - fastpathTV.EncMapIntStringV(v, fastpathCheckNilTrue, e) - case *map[int]string: - fastpathTV.EncMapIntStringV(*v, fastpathCheckNilTrue, e) - - case map[int]uint: - fastpathTV.EncMapIntUintV(v, fastpathCheckNilTrue, e) - case *map[int]uint: - fastpathTV.EncMapIntUintV(*v, fastpathCheckNilTrue, e) - - case map[int]uint8: - fastpathTV.EncMapIntUint8V(v, fastpathCheckNilTrue, e) - case *map[int]uint8: - fastpathTV.EncMapIntUint8V(*v, fastpathCheckNilTrue, e) - - case map[int]uint16: - fastpathTV.EncMapIntUint16V(v, fastpathCheckNilTrue, e) - case *map[int]uint16: - fastpathTV.EncMapIntUint16V(*v, fastpathCheckNilTrue, e) - - case map[int]uint32: - fastpathTV.EncMapIntUint32V(v, fastpathCheckNilTrue, e) - case *map[int]uint32: - fastpathTV.EncMapIntUint32V(*v, fastpathCheckNilTrue, e) - - case map[int]uint64: - fastpathTV.EncMapIntUint64V(v, fastpathCheckNilTrue, e) - case *map[int]uint64: - fastpathTV.EncMapIntUint64V(*v, fastpathCheckNilTrue, e) - - case map[int]uintptr: - fastpathTV.EncMapIntUintptrV(v, fastpathCheckNilTrue, e) - case *map[int]uintptr: - fastpathTV.EncMapIntUintptrV(*v, fastpathCheckNilTrue, e) - - case map[int]int: - fastpathTV.EncMapIntIntV(v, fastpathCheckNilTrue, e) - case *map[int]int: - fastpathTV.EncMapIntIntV(*v, fastpathCheckNilTrue, e) - - case map[int]int8: - fastpathTV.EncMapIntInt8V(v, fastpathCheckNilTrue, e) - case *map[int]int8: - fastpathTV.EncMapIntInt8V(*v, fastpathCheckNilTrue, e) - - case map[int]int16: - fastpathTV.EncMapIntInt16V(v, fastpathCheckNilTrue, e) - case *map[int]int16: - fastpathTV.EncMapIntInt16V(*v, fastpathCheckNilTrue, e) - - case map[int]int32: - fastpathTV.EncMapIntInt32V(v, fastpathCheckNilTrue, e) - case *map[int]int32: - fastpathTV.EncMapIntInt32V(*v, fastpathCheckNilTrue, e) - - case map[int]int64: - fastpathTV.EncMapIntInt64V(v, fastpathCheckNilTrue, e) - case *map[int]int64: - fastpathTV.EncMapIntInt64V(*v, fastpathCheckNilTrue, e) - - case map[int]float32: - fastpathTV.EncMapIntFloat32V(v, fastpathCheckNilTrue, e) - case *map[int]float32: - fastpathTV.EncMapIntFloat32V(*v, fastpathCheckNilTrue, e) - - case map[int]float64: - fastpathTV.EncMapIntFloat64V(v, fastpathCheckNilTrue, e) - case *map[int]float64: - fastpathTV.EncMapIntFloat64V(*v, fastpathCheckNilTrue, e) - - case map[int]bool: - fastpathTV.EncMapIntBoolV(v, fastpathCheckNilTrue, e) - case *map[int]bool: - fastpathTV.EncMapIntBoolV(*v, fastpathCheckNilTrue, e) - - case map[int8]interface{}: - fastpathTV.EncMapInt8IntfV(v, fastpathCheckNilTrue, e) - case *map[int8]interface{}: - fastpathTV.EncMapInt8IntfV(*v, fastpathCheckNilTrue, e) - - case map[int8]string: - fastpathTV.EncMapInt8StringV(v, fastpathCheckNilTrue, e) - case *map[int8]string: - fastpathTV.EncMapInt8StringV(*v, fastpathCheckNilTrue, e) - - case map[int8]uint: - fastpathTV.EncMapInt8UintV(v, fastpathCheckNilTrue, e) - case *map[int8]uint: - fastpathTV.EncMapInt8UintV(*v, fastpathCheckNilTrue, e) - - case map[int8]uint8: - fastpathTV.EncMapInt8Uint8V(v, fastpathCheckNilTrue, e) - case *map[int8]uint8: - fastpathTV.EncMapInt8Uint8V(*v, fastpathCheckNilTrue, e) - - case map[int8]uint16: - fastpathTV.EncMapInt8Uint16V(v, fastpathCheckNilTrue, e) - case *map[int8]uint16: - fastpathTV.EncMapInt8Uint16V(*v, fastpathCheckNilTrue, e) - - case map[int8]uint32: - fastpathTV.EncMapInt8Uint32V(v, fastpathCheckNilTrue, e) - case *map[int8]uint32: - fastpathTV.EncMapInt8Uint32V(*v, fastpathCheckNilTrue, e) - - case map[int8]uint64: - fastpathTV.EncMapInt8Uint64V(v, fastpathCheckNilTrue, e) - case *map[int8]uint64: - fastpathTV.EncMapInt8Uint64V(*v, fastpathCheckNilTrue, e) - - case map[int8]uintptr: - fastpathTV.EncMapInt8UintptrV(v, fastpathCheckNilTrue, e) - case *map[int8]uintptr: - fastpathTV.EncMapInt8UintptrV(*v, fastpathCheckNilTrue, e) - - case map[int8]int: - fastpathTV.EncMapInt8IntV(v, fastpathCheckNilTrue, e) - case *map[int8]int: - fastpathTV.EncMapInt8IntV(*v, fastpathCheckNilTrue, e) - - case map[int8]int8: - fastpathTV.EncMapInt8Int8V(v, fastpathCheckNilTrue, e) - case *map[int8]int8: - fastpathTV.EncMapInt8Int8V(*v, fastpathCheckNilTrue, e) - - case map[int8]int16: - fastpathTV.EncMapInt8Int16V(v, fastpathCheckNilTrue, e) - case *map[int8]int16: - fastpathTV.EncMapInt8Int16V(*v, fastpathCheckNilTrue, e) - - case map[int8]int32: - fastpathTV.EncMapInt8Int32V(v, fastpathCheckNilTrue, e) - case *map[int8]int32: - fastpathTV.EncMapInt8Int32V(*v, fastpathCheckNilTrue, e) - - case map[int8]int64: - fastpathTV.EncMapInt8Int64V(v, fastpathCheckNilTrue, e) - case *map[int8]int64: - fastpathTV.EncMapInt8Int64V(*v, fastpathCheckNilTrue, e) - - case map[int8]float32: - fastpathTV.EncMapInt8Float32V(v, fastpathCheckNilTrue, e) - case *map[int8]float32: - fastpathTV.EncMapInt8Float32V(*v, fastpathCheckNilTrue, e) - - case map[int8]float64: - fastpathTV.EncMapInt8Float64V(v, fastpathCheckNilTrue, e) - case *map[int8]float64: - fastpathTV.EncMapInt8Float64V(*v, fastpathCheckNilTrue, e) - - case map[int8]bool: - fastpathTV.EncMapInt8BoolV(v, fastpathCheckNilTrue, e) - case *map[int8]bool: - fastpathTV.EncMapInt8BoolV(*v, fastpathCheckNilTrue, e) - - case map[int16]interface{}: - fastpathTV.EncMapInt16IntfV(v, fastpathCheckNilTrue, e) - case *map[int16]interface{}: - fastpathTV.EncMapInt16IntfV(*v, fastpathCheckNilTrue, e) - - case map[int16]string: - fastpathTV.EncMapInt16StringV(v, fastpathCheckNilTrue, e) - case *map[int16]string: - fastpathTV.EncMapInt16StringV(*v, fastpathCheckNilTrue, e) - - case map[int16]uint: - fastpathTV.EncMapInt16UintV(v, fastpathCheckNilTrue, e) - case *map[int16]uint: - fastpathTV.EncMapInt16UintV(*v, fastpathCheckNilTrue, e) - - case map[int16]uint8: - fastpathTV.EncMapInt16Uint8V(v, fastpathCheckNilTrue, e) - case *map[int16]uint8: - fastpathTV.EncMapInt16Uint8V(*v, fastpathCheckNilTrue, e) - - case map[int16]uint16: - fastpathTV.EncMapInt16Uint16V(v, fastpathCheckNilTrue, e) - case *map[int16]uint16: - fastpathTV.EncMapInt16Uint16V(*v, fastpathCheckNilTrue, e) - - case map[int16]uint32: - fastpathTV.EncMapInt16Uint32V(v, fastpathCheckNilTrue, e) - case *map[int16]uint32: - fastpathTV.EncMapInt16Uint32V(*v, fastpathCheckNilTrue, e) - - case map[int16]uint64: - fastpathTV.EncMapInt16Uint64V(v, fastpathCheckNilTrue, e) - case *map[int16]uint64: - fastpathTV.EncMapInt16Uint64V(*v, fastpathCheckNilTrue, e) - - case map[int16]uintptr: - fastpathTV.EncMapInt16UintptrV(v, fastpathCheckNilTrue, e) - case *map[int16]uintptr: - fastpathTV.EncMapInt16UintptrV(*v, fastpathCheckNilTrue, e) - - case map[int16]int: - fastpathTV.EncMapInt16IntV(v, fastpathCheckNilTrue, e) - case *map[int16]int: - fastpathTV.EncMapInt16IntV(*v, fastpathCheckNilTrue, e) - - case map[int16]int8: - fastpathTV.EncMapInt16Int8V(v, fastpathCheckNilTrue, e) - case *map[int16]int8: - fastpathTV.EncMapInt16Int8V(*v, fastpathCheckNilTrue, e) - - case map[int16]int16: - fastpathTV.EncMapInt16Int16V(v, fastpathCheckNilTrue, e) - case *map[int16]int16: - fastpathTV.EncMapInt16Int16V(*v, fastpathCheckNilTrue, e) - - case map[int16]int32: - fastpathTV.EncMapInt16Int32V(v, fastpathCheckNilTrue, e) - case *map[int16]int32: - fastpathTV.EncMapInt16Int32V(*v, fastpathCheckNilTrue, e) - - case map[int16]int64: - fastpathTV.EncMapInt16Int64V(v, fastpathCheckNilTrue, e) - case *map[int16]int64: - fastpathTV.EncMapInt16Int64V(*v, fastpathCheckNilTrue, e) - - case map[int16]float32: - fastpathTV.EncMapInt16Float32V(v, fastpathCheckNilTrue, e) - case *map[int16]float32: - fastpathTV.EncMapInt16Float32V(*v, fastpathCheckNilTrue, e) - - case map[int16]float64: - fastpathTV.EncMapInt16Float64V(v, fastpathCheckNilTrue, e) - case *map[int16]float64: - fastpathTV.EncMapInt16Float64V(*v, fastpathCheckNilTrue, e) - - case map[int16]bool: - fastpathTV.EncMapInt16BoolV(v, fastpathCheckNilTrue, e) - case *map[int16]bool: - fastpathTV.EncMapInt16BoolV(*v, fastpathCheckNilTrue, e) - - case map[int32]interface{}: - fastpathTV.EncMapInt32IntfV(v, fastpathCheckNilTrue, e) - case *map[int32]interface{}: - fastpathTV.EncMapInt32IntfV(*v, fastpathCheckNilTrue, e) - - case map[int32]string: - fastpathTV.EncMapInt32StringV(v, fastpathCheckNilTrue, e) - case *map[int32]string: - fastpathTV.EncMapInt32StringV(*v, fastpathCheckNilTrue, e) - - case map[int32]uint: - fastpathTV.EncMapInt32UintV(v, fastpathCheckNilTrue, e) - case *map[int32]uint: - fastpathTV.EncMapInt32UintV(*v, fastpathCheckNilTrue, e) - - case map[int32]uint8: - fastpathTV.EncMapInt32Uint8V(v, fastpathCheckNilTrue, e) - case *map[int32]uint8: - fastpathTV.EncMapInt32Uint8V(*v, fastpathCheckNilTrue, e) - - case map[int32]uint16: - fastpathTV.EncMapInt32Uint16V(v, fastpathCheckNilTrue, e) - case *map[int32]uint16: - fastpathTV.EncMapInt32Uint16V(*v, fastpathCheckNilTrue, e) - - case map[int32]uint32: - fastpathTV.EncMapInt32Uint32V(v, fastpathCheckNilTrue, e) - case *map[int32]uint32: - fastpathTV.EncMapInt32Uint32V(*v, fastpathCheckNilTrue, e) - - case map[int32]uint64: - fastpathTV.EncMapInt32Uint64V(v, fastpathCheckNilTrue, e) - case *map[int32]uint64: - fastpathTV.EncMapInt32Uint64V(*v, fastpathCheckNilTrue, e) - - case map[int32]uintptr: - fastpathTV.EncMapInt32UintptrV(v, fastpathCheckNilTrue, e) - case *map[int32]uintptr: - fastpathTV.EncMapInt32UintptrV(*v, fastpathCheckNilTrue, e) - - case map[int32]int: - fastpathTV.EncMapInt32IntV(v, fastpathCheckNilTrue, e) - case *map[int32]int: - fastpathTV.EncMapInt32IntV(*v, fastpathCheckNilTrue, e) - - case map[int32]int8: - fastpathTV.EncMapInt32Int8V(v, fastpathCheckNilTrue, e) - case *map[int32]int8: - fastpathTV.EncMapInt32Int8V(*v, fastpathCheckNilTrue, e) - - case map[int32]int16: - fastpathTV.EncMapInt32Int16V(v, fastpathCheckNilTrue, e) - case *map[int32]int16: - fastpathTV.EncMapInt32Int16V(*v, fastpathCheckNilTrue, e) - - case map[int32]int32: - fastpathTV.EncMapInt32Int32V(v, fastpathCheckNilTrue, e) - case *map[int32]int32: - fastpathTV.EncMapInt32Int32V(*v, fastpathCheckNilTrue, e) - - case map[int32]int64: - fastpathTV.EncMapInt32Int64V(v, fastpathCheckNilTrue, e) - case *map[int32]int64: - fastpathTV.EncMapInt32Int64V(*v, fastpathCheckNilTrue, e) - - case map[int32]float32: - fastpathTV.EncMapInt32Float32V(v, fastpathCheckNilTrue, e) - case *map[int32]float32: - fastpathTV.EncMapInt32Float32V(*v, fastpathCheckNilTrue, e) - - case map[int32]float64: - fastpathTV.EncMapInt32Float64V(v, fastpathCheckNilTrue, e) - case *map[int32]float64: - fastpathTV.EncMapInt32Float64V(*v, fastpathCheckNilTrue, e) - - case map[int32]bool: - fastpathTV.EncMapInt32BoolV(v, fastpathCheckNilTrue, e) - case *map[int32]bool: - fastpathTV.EncMapInt32BoolV(*v, fastpathCheckNilTrue, e) - - case map[int64]interface{}: - fastpathTV.EncMapInt64IntfV(v, fastpathCheckNilTrue, e) - case *map[int64]interface{}: - fastpathTV.EncMapInt64IntfV(*v, fastpathCheckNilTrue, e) - - case map[int64]string: - fastpathTV.EncMapInt64StringV(v, fastpathCheckNilTrue, e) - case *map[int64]string: - fastpathTV.EncMapInt64StringV(*v, fastpathCheckNilTrue, e) - - case map[int64]uint: - fastpathTV.EncMapInt64UintV(v, fastpathCheckNilTrue, e) - case *map[int64]uint: - fastpathTV.EncMapInt64UintV(*v, fastpathCheckNilTrue, e) - - case map[int64]uint8: - fastpathTV.EncMapInt64Uint8V(v, fastpathCheckNilTrue, e) - case *map[int64]uint8: - fastpathTV.EncMapInt64Uint8V(*v, fastpathCheckNilTrue, e) - - case map[int64]uint16: - fastpathTV.EncMapInt64Uint16V(v, fastpathCheckNilTrue, e) - case *map[int64]uint16: - fastpathTV.EncMapInt64Uint16V(*v, fastpathCheckNilTrue, e) - - case map[int64]uint32: - fastpathTV.EncMapInt64Uint32V(v, fastpathCheckNilTrue, e) - case *map[int64]uint32: - fastpathTV.EncMapInt64Uint32V(*v, fastpathCheckNilTrue, e) - - case map[int64]uint64: - fastpathTV.EncMapInt64Uint64V(v, fastpathCheckNilTrue, e) - case *map[int64]uint64: - fastpathTV.EncMapInt64Uint64V(*v, fastpathCheckNilTrue, e) - - case map[int64]uintptr: - fastpathTV.EncMapInt64UintptrV(v, fastpathCheckNilTrue, e) - case *map[int64]uintptr: - fastpathTV.EncMapInt64UintptrV(*v, fastpathCheckNilTrue, e) - - case map[int64]int: - fastpathTV.EncMapInt64IntV(v, fastpathCheckNilTrue, e) - case *map[int64]int: - fastpathTV.EncMapInt64IntV(*v, fastpathCheckNilTrue, e) - - case map[int64]int8: - fastpathTV.EncMapInt64Int8V(v, fastpathCheckNilTrue, e) - case *map[int64]int8: - fastpathTV.EncMapInt64Int8V(*v, fastpathCheckNilTrue, e) - - case map[int64]int16: - fastpathTV.EncMapInt64Int16V(v, fastpathCheckNilTrue, e) - case *map[int64]int16: - fastpathTV.EncMapInt64Int16V(*v, fastpathCheckNilTrue, e) - - case map[int64]int32: - fastpathTV.EncMapInt64Int32V(v, fastpathCheckNilTrue, e) - case *map[int64]int32: - fastpathTV.EncMapInt64Int32V(*v, fastpathCheckNilTrue, e) - - case map[int64]int64: - fastpathTV.EncMapInt64Int64V(v, fastpathCheckNilTrue, e) - case *map[int64]int64: - fastpathTV.EncMapInt64Int64V(*v, fastpathCheckNilTrue, e) - - case map[int64]float32: - fastpathTV.EncMapInt64Float32V(v, fastpathCheckNilTrue, e) - case *map[int64]float32: - fastpathTV.EncMapInt64Float32V(*v, fastpathCheckNilTrue, e) - - case map[int64]float64: - fastpathTV.EncMapInt64Float64V(v, fastpathCheckNilTrue, e) - case *map[int64]float64: - fastpathTV.EncMapInt64Float64V(*v, fastpathCheckNilTrue, e) - - case map[int64]bool: - fastpathTV.EncMapInt64BoolV(v, fastpathCheckNilTrue, e) - case *map[int64]bool: - fastpathTV.EncMapInt64BoolV(*v, fastpathCheckNilTrue, e) - - case map[bool]interface{}: - fastpathTV.EncMapBoolIntfV(v, fastpathCheckNilTrue, e) - case *map[bool]interface{}: - fastpathTV.EncMapBoolIntfV(*v, fastpathCheckNilTrue, e) - - case map[bool]string: - fastpathTV.EncMapBoolStringV(v, fastpathCheckNilTrue, e) - case *map[bool]string: - fastpathTV.EncMapBoolStringV(*v, fastpathCheckNilTrue, e) - - case map[bool]uint: - fastpathTV.EncMapBoolUintV(v, fastpathCheckNilTrue, e) - case *map[bool]uint: - fastpathTV.EncMapBoolUintV(*v, fastpathCheckNilTrue, e) - - case map[bool]uint8: - fastpathTV.EncMapBoolUint8V(v, fastpathCheckNilTrue, e) - case *map[bool]uint8: - fastpathTV.EncMapBoolUint8V(*v, fastpathCheckNilTrue, e) - - case map[bool]uint16: - fastpathTV.EncMapBoolUint16V(v, fastpathCheckNilTrue, e) - case *map[bool]uint16: - fastpathTV.EncMapBoolUint16V(*v, fastpathCheckNilTrue, e) - - case map[bool]uint32: - fastpathTV.EncMapBoolUint32V(v, fastpathCheckNilTrue, e) - case *map[bool]uint32: - fastpathTV.EncMapBoolUint32V(*v, fastpathCheckNilTrue, e) - - case map[bool]uint64: - fastpathTV.EncMapBoolUint64V(v, fastpathCheckNilTrue, e) - case *map[bool]uint64: - fastpathTV.EncMapBoolUint64V(*v, fastpathCheckNilTrue, e) - - case map[bool]uintptr: - fastpathTV.EncMapBoolUintptrV(v, fastpathCheckNilTrue, e) - case *map[bool]uintptr: - fastpathTV.EncMapBoolUintptrV(*v, fastpathCheckNilTrue, e) - - case map[bool]int: - fastpathTV.EncMapBoolIntV(v, fastpathCheckNilTrue, e) - case *map[bool]int: - fastpathTV.EncMapBoolIntV(*v, fastpathCheckNilTrue, e) - - case map[bool]int8: - fastpathTV.EncMapBoolInt8V(v, fastpathCheckNilTrue, e) - case *map[bool]int8: - fastpathTV.EncMapBoolInt8V(*v, fastpathCheckNilTrue, e) - - case map[bool]int16: - fastpathTV.EncMapBoolInt16V(v, fastpathCheckNilTrue, e) - case *map[bool]int16: - fastpathTV.EncMapBoolInt16V(*v, fastpathCheckNilTrue, e) - - case map[bool]int32: - fastpathTV.EncMapBoolInt32V(v, fastpathCheckNilTrue, e) - case *map[bool]int32: - fastpathTV.EncMapBoolInt32V(*v, fastpathCheckNilTrue, e) - - case map[bool]int64: - fastpathTV.EncMapBoolInt64V(v, fastpathCheckNilTrue, e) - case *map[bool]int64: - fastpathTV.EncMapBoolInt64V(*v, fastpathCheckNilTrue, e) - - case map[bool]float32: - fastpathTV.EncMapBoolFloat32V(v, fastpathCheckNilTrue, e) - case *map[bool]float32: - fastpathTV.EncMapBoolFloat32V(*v, fastpathCheckNilTrue, e) - - case map[bool]float64: - fastpathTV.EncMapBoolFloat64V(v, fastpathCheckNilTrue, e) - case *map[bool]float64: - fastpathTV.EncMapBoolFloat64V(*v, fastpathCheckNilTrue, e) - - case map[bool]bool: - fastpathTV.EncMapBoolBoolV(v, fastpathCheckNilTrue, e) - case *map[bool]bool: - fastpathTV.EncMapBoolBoolV(*v, fastpathCheckNilTrue, e) - - default: - _ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release) - return false - } - return true -} - -// -- -- fast path functions - -func (f *encFnInfo) fastpathEncSliceIntfR(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceIntfV(rv.Interface().([]interface{}), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceIntfV(rv.Interface().([]interface{}), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceIntfV(v []interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - e.encode(v2) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceIntfV(v []interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - e.encode(v2) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceStringR(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceStringV(rv.Interface().([]string), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceStringV(rv.Interface().([]string), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceStringV(v []string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeString(c_UTF8, v2) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceStringV(v []string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeString(c_UTF8, v2) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceFloat32R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceFloat32V(rv.Interface().([]float32), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceFloat32V(rv.Interface().([]float32), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceFloat32V(v []float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeFloat32(v2) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceFloat32V(v []float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeFloat32(v2) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceFloat64R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceFloat64V(rv.Interface().([]float64), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceFloat64V(rv.Interface().([]float64), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceFloat64V(v []float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeFloat64(v2) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceFloat64V(v []float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeFloat64(v2) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceUintR(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceUintV(rv.Interface().([]uint), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceUintV(rv.Interface().([]uint), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceUintV(v []uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeUint(uint64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceUintV(v []uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeUint(uint64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceUint16R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceUint16V(rv.Interface().([]uint16), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceUint16V(rv.Interface().([]uint16), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceUint16V(v []uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeUint(uint64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceUint16V(v []uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeUint(uint64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceUint32R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceUint32V(rv.Interface().([]uint32), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceUint32V(rv.Interface().([]uint32), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceUint32V(v []uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeUint(uint64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceUint32V(v []uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeUint(uint64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceUint64R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceUint64V(rv.Interface().([]uint64), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceUint64V(rv.Interface().([]uint64), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceUint64V(v []uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeUint(uint64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceUint64V(v []uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeUint(uint64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceUintptrR(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceUintptrV(rv.Interface().([]uintptr), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceUintptrV(rv.Interface().([]uintptr), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceUintptrV(v []uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - e.encode(v2) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceUintptrV(v []uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - e.encode(v2) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceIntR(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceIntV(rv.Interface().([]int), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceIntV(rv.Interface().([]int), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceIntV(v []int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceIntV(v []int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceInt8R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceInt8V(rv.Interface().([]int8), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceInt8V(rv.Interface().([]int8), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceInt8V(v []int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceInt8V(v []int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceInt16R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceInt16V(rv.Interface().([]int16), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceInt16V(rv.Interface().([]int16), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceInt16V(v []int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceInt16V(v []int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceInt32R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceInt32V(rv.Interface().([]int32), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceInt32V(rv.Interface().([]int32), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceInt32V(v []int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceInt32V(v []int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceInt64R(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceInt64V(rv.Interface().([]int64), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceInt64V(rv.Interface().([]int64), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceInt64V(v []int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceInt64V(v []int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeInt(int64(v2)) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncSliceBoolR(rv reflect.Value) { - if f.ti.mbs { - fastpathTV.EncAsMapSliceBoolV(rv.Interface().([]bool), fastpathCheckNilFalse, f.e) - } else { - fastpathTV.EncSliceBoolV(rv.Interface().([]bool), fastpathCheckNilFalse, f.e) - } -} -func (_ fastpathT) EncSliceBoolV(v []bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeArrayStart(len(v)) - for _, v2 := range v { - if cr != nil { - cr.sendContainerState(containerArrayElem) - } - ee.EncodeBool(v2) - } - if cr != nil { - cr.sendContainerState(containerArrayEnd) - } -} - -func (_ fastpathT) EncAsMapSliceBoolV(v []bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - if len(v)%2 == 1 { - e.errorf("mapBySlice requires even slice length, but got %v", len(v)) - return - } - ee.EncodeMapStart(len(v) / 2) - for j, v2 := range v { - if cr != nil { - if j%2 == 0 { - cr.sendContainerState(containerMapKey) - } else { - cr.sendContainerState(containerMapValue) - } - } - ee.EncodeBool(v2) - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfIntfR(rv reflect.Value) { - fastpathTV.EncMapIntfIntfV(rv.Interface().(map[interface{}]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfIntfV(v map[interface{}]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfStringR(rv reflect.Value) { - fastpathTV.EncMapIntfStringV(rv.Interface().(map[interface{}]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfStringV(v map[interface{}]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfUintR(rv reflect.Value) { - fastpathTV.EncMapIntfUintV(rv.Interface().(map[interface{}]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfUintV(v map[interface{}]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfUint8R(rv reflect.Value) { - fastpathTV.EncMapIntfUint8V(rv.Interface().(map[interface{}]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfUint8V(v map[interface{}]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfUint16R(rv reflect.Value) { - fastpathTV.EncMapIntfUint16V(rv.Interface().(map[interface{}]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfUint16V(v map[interface{}]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfUint32R(rv reflect.Value) { - fastpathTV.EncMapIntfUint32V(rv.Interface().(map[interface{}]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfUint32V(v map[interface{}]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfUint64R(rv reflect.Value) { - fastpathTV.EncMapIntfUint64V(rv.Interface().(map[interface{}]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfUint64V(v map[interface{}]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfUintptrR(rv reflect.Value) { - fastpathTV.EncMapIntfUintptrV(rv.Interface().(map[interface{}]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfUintptrV(v map[interface{}]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfIntR(rv reflect.Value) { - fastpathTV.EncMapIntfIntV(rv.Interface().(map[interface{}]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfIntV(v map[interface{}]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfInt8R(rv reflect.Value) { - fastpathTV.EncMapIntfInt8V(rv.Interface().(map[interface{}]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfInt8V(v map[interface{}]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfInt16R(rv reflect.Value) { - fastpathTV.EncMapIntfInt16V(rv.Interface().(map[interface{}]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfInt16V(v map[interface{}]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfInt32R(rv reflect.Value) { - fastpathTV.EncMapIntfInt32V(rv.Interface().(map[interface{}]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfInt32V(v map[interface{}]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfInt64R(rv reflect.Value) { - fastpathTV.EncMapIntfInt64V(rv.Interface().(map[interface{}]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfInt64V(v map[interface{}]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfFloat32R(rv reflect.Value) { - fastpathTV.EncMapIntfFloat32V(rv.Interface().(map[interface{}]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfFloat32V(v map[interface{}]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfFloat64R(rv reflect.Value) { - fastpathTV.EncMapIntfFloat64V(rv.Interface().(map[interface{}]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfFloat64V(v map[interface{}]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntfBoolR(rv reflect.Value) { - fastpathTV.EncMapIntfBoolV(rv.Interface().(map[interface{}]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntfBoolV(v map[interface{}]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - var mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding - e2 := NewEncoderBytes(&mksv, e.hh) - v2 := make([]bytesI, len(v)) - var i, l int - var vp *bytesI - for k2, _ := range v { - l = len(mksv) - e2.MustEncode(k2) - vp = &v2[i] - vp.v = mksv[l:] - vp.i = k2 - i++ - } - sort.Sort(bytesISlice(v2)) - for j := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.asis(v2[j].v) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[v2[j].i]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringIntfR(rv reflect.Value) { - fastpathTV.EncMapStringIntfV(rv.Interface().(map[string]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringIntfV(v map[string]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[string(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringStringR(rv reflect.Value) { - fastpathTV.EncMapStringStringV(rv.Interface().(map[string]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringStringV(v map[string]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[string(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringUintR(rv reflect.Value) { - fastpathTV.EncMapStringUintV(rv.Interface().(map[string]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringUintV(v map[string]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringUint8R(rv reflect.Value) { - fastpathTV.EncMapStringUint8V(rv.Interface().(map[string]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringUint8V(v map[string]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringUint16R(rv reflect.Value) { - fastpathTV.EncMapStringUint16V(rv.Interface().(map[string]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringUint16V(v map[string]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringUint32R(rv reflect.Value) { - fastpathTV.EncMapStringUint32V(rv.Interface().(map[string]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringUint32V(v map[string]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringUint64R(rv reflect.Value) { - fastpathTV.EncMapStringUint64V(rv.Interface().(map[string]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringUint64V(v map[string]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringUintptrR(rv reflect.Value) { - fastpathTV.EncMapStringUintptrV(rv.Interface().(map[string]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringUintptrV(v map[string]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[string(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringIntR(rv reflect.Value) { - fastpathTV.EncMapStringIntV(rv.Interface().(map[string]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringIntV(v map[string]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringInt8R(rv reflect.Value) { - fastpathTV.EncMapStringInt8V(rv.Interface().(map[string]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringInt8V(v map[string]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringInt16R(rv reflect.Value) { - fastpathTV.EncMapStringInt16V(rv.Interface().(map[string]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringInt16V(v map[string]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringInt32R(rv reflect.Value) { - fastpathTV.EncMapStringInt32V(rv.Interface().(map[string]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringInt32V(v map[string]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringInt64R(rv reflect.Value) { - fastpathTV.EncMapStringInt64V(rv.Interface().(map[string]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringInt64V(v map[string]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[string(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringFloat32R(rv reflect.Value) { - fastpathTV.EncMapStringFloat32V(rv.Interface().(map[string]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringFloat32V(v map[string]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[string(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringFloat64R(rv reflect.Value) { - fastpathTV.EncMapStringFloat64V(rv.Interface().(map[string]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringFloat64V(v map[string]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[string(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapStringBoolR(rv reflect.Value) { - fastpathTV.EncMapStringBoolV(rv.Interface().(map[string]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapStringBoolV(v map[string]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - asSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0 - if e.h.Canonical { - v2 := make([]string, len(v)) - var i int - for k, _ := range v { - v2[i] = string(k) - i++ - } - sort.Sort(stringSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[string(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - if asSymbols { - ee.EncodeSymbol(k2) - } else { - ee.EncodeString(c_UTF8, k2) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32IntfR(rv reflect.Value) { - fastpathTV.EncMapFloat32IntfV(rv.Interface().(map[float32]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32IntfV(v map[float32]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[float32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32StringR(rv reflect.Value) { - fastpathTV.EncMapFloat32StringV(rv.Interface().(map[float32]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32StringV(v map[float32]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[float32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32UintR(rv reflect.Value) { - fastpathTV.EncMapFloat32UintV(rv.Interface().(map[float32]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32UintV(v map[float32]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Uint8R(rv reflect.Value) { - fastpathTV.EncMapFloat32Uint8V(rv.Interface().(map[float32]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Uint8V(v map[float32]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Uint16R(rv reflect.Value) { - fastpathTV.EncMapFloat32Uint16V(rv.Interface().(map[float32]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Uint16V(v map[float32]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Uint32R(rv reflect.Value) { - fastpathTV.EncMapFloat32Uint32V(rv.Interface().(map[float32]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Uint32V(v map[float32]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Uint64R(rv reflect.Value) { - fastpathTV.EncMapFloat32Uint64V(rv.Interface().(map[float32]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Uint64V(v map[float32]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32UintptrR(rv reflect.Value) { - fastpathTV.EncMapFloat32UintptrV(rv.Interface().(map[float32]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32UintptrV(v map[float32]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[float32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32IntR(rv reflect.Value) { - fastpathTV.EncMapFloat32IntV(rv.Interface().(map[float32]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32IntV(v map[float32]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Int8R(rv reflect.Value) { - fastpathTV.EncMapFloat32Int8V(rv.Interface().(map[float32]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Int8V(v map[float32]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Int16R(rv reflect.Value) { - fastpathTV.EncMapFloat32Int16V(rv.Interface().(map[float32]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Int16V(v map[float32]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Int32R(rv reflect.Value) { - fastpathTV.EncMapFloat32Int32V(rv.Interface().(map[float32]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Int32V(v map[float32]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Int64R(rv reflect.Value) { - fastpathTV.EncMapFloat32Int64V(rv.Interface().(map[float32]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Int64V(v map[float32]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Float32R(rv reflect.Value) { - fastpathTV.EncMapFloat32Float32V(rv.Interface().(map[float32]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Float32V(v map[float32]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[float32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32Float64R(rv reflect.Value) { - fastpathTV.EncMapFloat32Float64V(rv.Interface().(map[float32]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32Float64V(v map[float32]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[float32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat32BoolR(rv reflect.Value) { - fastpathTV.EncMapFloat32BoolV(rv.Interface().(map[float32]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat32BoolV(v map[float32]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(float32(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[float32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat32(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64IntfR(rv reflect.Value) { - fastpathTV.EncMapFloat64IntfV(rv.Interface().(map[float64]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64IntfV(v map[float64]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[float64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64StringR(rv reflect.Value) { - fastpathTV.EncMapFloat64StringV(rv.Interface().(map[float64]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64StringV(v map[float64]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[float64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64UintR(rv reflect.Value) { - fastpathTV.EncMapFloat64UintV(rv.Interface().(map[float64]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64UintV(v map[float64]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Uint8R(rv reflect.Value) { - fastpathTV.EncMapFloat64Uint8V(rv.Interface().(map[float64]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Uint8V(v map[float64]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Uint16R(rv reflect.Value) { - fastpathTV.EncMapFloat64Uint16V(rv.Interface().(map[float64]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Uint16V(v map[float64]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Uint32R(rv reflect.Value) { - fastpathTV.EncMapFloat64Uint32V(rv.Interface().(map[float64]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Uint32V(v map[float64]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Uint64R(rv reflect.Value) { - fastpathTV.EncMapFloat64Uint64V(rv.Interface().(map[float64]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Uint64V(v map[float64]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64UintptrR(rv reflect.Value) { - fastpathTV.EncMapFloat64UintptrV(rv.Interface().(map[float64]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64UintptrV(v map[float64]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[float64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64IntR(rv reflect.Value) { - fastpathTV.EncMapFloat64IntV(rv.Interface().(map[float64]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64IntV(v map[float64]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Int8R(rv reflect.Value) { - fastpathTV.EncMapFloat64Int8V(rv.Interface().(map[float64]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Int8V(v map[float64]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Int16R(rv reflect.Value) { - fastpathTV.EncMapFloat64Int16V(rv.Interface().(map[float64]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Int16V(v map[float64]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Int32R(rv reflect.Value) { - fastpathTV.EncMapFloat64Int32V(rv.Interface().(map[float64]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Int32V(v map[float64]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Int64R(rv reflect.Value) { - fastpathTV.EncMapFloat64Int64V(rv.Interface().(map[float64]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Int64V(v map[float64]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[float64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Float32R(rv reflect.Value) { - fastpathTV.EncMapFloat64Float32V(rv.Interface().(map[float64]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Float32V(v map[float64]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[float64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64Float64R(rv reflect.Value) { - fastpathTV.EncMapFloat64Float64V(rv.Interface().(map[float64]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64Float64V(v map[float64]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[float64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapFloat64BoolR(rv reflect.Value) { - fastpathTV.EncMapFloat64BoolV(rv.Interface().(map[float64]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapFloat64BoolV(v map[float64]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]float64, len(v)) - var i int - for k, _ := range v { - v2[i] = float64(k) - i++ - } - sort.Sort(floatSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(float64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[float64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeFloat64(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintIntfR(rv reflect.Value) { - fastpathTV.EncMapUintIntfV(rv.Interface().(map[uint]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintIntfV(v map[uint]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintStringR(rv reflect.Value) { - fastpathTV.EncMapUintStringV(rv.Interface().(map[uint]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintStringV(v map[uint]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[uint(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintUintR(rv reflect.Value) { - fastpathTV.EncMapUintUintV(rv.Interface().(map[uint]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintUintV(v map[uint]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintUint8R(rv reflect.Value) { - fastpathTV.EncMapUintUint8V(rv.Interface().(map[uint]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintUint8V(v map[uint]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintUint16R(rv reflect.Value) { - fastpathTV.EncMapUintUint16V(rv.Interface().(map[uint]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintUint16V(v map[uint]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintUint32R(rv reflect.Value) { - fastpathTV.EncMapUintUint32V(rv.Interface().(map[uint]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintUint32V(v map[uint]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintUint64R(rv reflect.Value) { - fastpathTV.EncMapUintUint64V(rv.Interface().(map[uint]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintUint64V(v map[uint]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintUintptrR(rv reflect.Value) { - fastpathTV.EncMapUintUintptrV(rv.Interface().(map[uint]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintUintptrV(v map[uint]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintIntR(rv reflect.Value) { - fastpathTV.EncMapUintIntV(rv.Interface().(map[uint]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintIntV(v map[uint]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintInt8R(rv reflect.Value) { - fastpathTV.EncMapUintInt8V(rv.Interface().(map[uint]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintInt8V(v map[uint]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintInt16R(rv reflect.Value) { - fastpathTV.EncMapUintInt16V(rv.Interface().(map[uint]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintInt16V(v map[uint]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintInt32R(rv reflect.Value) { - fastpathTV.EncMapUintInt32V(rv.Interface().(map[uint]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintInt32V(v map[uint]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintInt64R(rv reflect.Value) { - fastpathTV.EncMapUintInt64V(rv.Interface().(map[uint]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintInt64V(v map[uint]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintFloat32R(rv reflect.Value) { - fastpathTV.EncMapUintFloat32V(rv.Interface().(map[uint]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintFloat32V(v map[uint]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[uint(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintFloat64R(rv reflect.Value) { - fastpathTV.EncMapUintFloat64V(rv.Interface().(map[uint]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintFloat64V(v map[uint]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[uint(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintBoolR(rv reflect.Value) { - fastpathTV.EncMapUintBoolV(rv.Interface().(map[uint]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintBoolV(v map[uint]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[uint(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8IntfR(rv reflect.Value) { - fastpathTV.EncMapUint8IntfV(rv.Interface().(map[uint8]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8IntfV(v map[uint8]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8StringR(rv reflect.Value) { - fastpathTV.EncMapUint8StringV(rv.Interface().(map[uint8]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8StringV(v map[uint8]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[uint8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8UintR(rv reflect.Value) { - fastpathTV.EncMapUint8UintV(rv.Interface().(map[uint8]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8UintV(v map[uint8]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Uint8R(rv reflect.Value) { - fastpathTV.EncMapUint8Uint8V(rv.Interface().(map[uint8]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Uint8V(v map[uint8]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Uint16R(rv reflect.Value) { - fastpathTV.EncMapUint8Uint16V(rv.Interface().(map[uint8]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Uint16V(v map[uint8]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Uint32R(rv reflect.Value) { - fastpathTV.EncMapUint8Uint32V(rv.Interface().(map[uint8]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Uint32V(v map[uint8]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Uint64R(rv reflect.Value) { - fastpathTV.EncMapUint8Uint64V(rv.Interface().(map[uint8]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Uint64V(v map[uint8]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8UintptrR(rv reflect.Value) { - fastpathTV.EncMapUint8UintptrV(rv.Interface().(map[uint8]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8UintptrV(v map[uint8]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8IntR(rv reflect.Value) { - fastpathTV.EncMapUint8IntV(rv.Interface().(map[uint8]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8IntV(v map[uint8]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Int8R(rv reflect.Value) { - fastpathTV.EncMapUint8Int8V(rv.Interface().(map[uint8]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Int8V(v map[uint8]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Int16R(rv reflect.Value) { - fastpathTV.EncMapUint8Int16V(rv.Interface().(map[uint8]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Int16V(v map[uint8]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Int32R(rv reflect.Value) { - fastpathTV.EncMapUint8Int32V(rv.Interface().(map[uint8]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Int32V(v map[uint8]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Int64R(rv reflect.Value) { - fastpathTV.EncMapUint8Int64V(rv.Interface().(map[uint8]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Int64V(v map[uint8]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Float32R(rv reflect.Value) { - fastpathTV.EncMapUint8Float32V(rv.Interface().(map[uint8]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Float32V(v map[uint8]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[uint8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8Float64R(rv reflect.Value) { - fastpathTV.EncMapUint8Float64V(rv.Interface().(map[uint8]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8Float64V(v map[uint8]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[uint8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint8BoolR(rv reflect.Value) { - fastpathTV.EncMapUint8BoolV(rv.Interface().(map[uint8]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint8BoolV(v map[uint8]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[uint8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16IntfR(rv reflect.Value) { - fastpathTV.EncMapUint16IntfV(rv.Interface().(map[uint16]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16IntfV(v map[uint16]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16StringR(rv reflect.Value) { - fastpathTV.EncMapUint16StringV(rv.Interface().(map[uint16]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16StringV(v map[uint16]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[uint16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16UintR(rv reflect.Value) { - fastpathTV.EncMapUint16UintV(rv.Interface().(map[uint16]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16UintV(v map[uint16]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Uint8R(rv reflect.Value) { - fastpathTV.EncMapUint16Uint8V(rv.Interface().(map[uint16]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Uint8V(v map[uint16]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Uint16R(rv reflect.Value) { - fastpathTV.EncMapUint16Uint16V(rv.Interface().(map[uint16]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Uint16V(v map[uint16]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Uint32R(rv reflect.Value) { - fastpathTV.EncMapUint16Uint32V(rv.Interface().(map[uint16]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Uint32V(v map[uint16]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Uint64R(rv reflect.Value) { - fastpathTV.EncMapUint16Uint64V(rv.Interface().(map[uint16]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Uint64V(v map[uint16]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16UintptrR(rv reflect.Value) { - fastpathTV.EncMapUint16UintptrV(rv.Interface().(map[uint16]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16UintptrV(v map[uint16]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16IntR(rv reflect.Value) { - fastpathTV.EncMapUint16IntV(rv.Interface().(map[uint16]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16IntV(v map[uint16]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Int8R(rv reflect.Value) { - fastpathTV.EncMapUint16Int8V(rv.Interface().(map[uint16]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Int8V(v map[uint16]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Int16R(rv reflect.Value) { - fastpathTV.EncMapUint16Int16V(rv.Interface().(map[uint16]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Int16V(v map[uint16]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Int32R(rv reflect.Value) { - fastpathTV.EncMapUint16Int32V(rv.Interface().(map[uint16]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Int32V(v map[uint16]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Int64R(rv reflect.Value) { - fastpathTV.EncMapUint16Int64V(rv.Interface().(map[uint16]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Int64V(v map[uint16]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Float32R(rv reflect.Value) { - fastpathTV.EncMapUint16Float32V(rv.Interface().(map[uint16]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Float32V(v map[uint16]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[uint16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16Float64R(rv reflect.Value) { - fastpathTV.EncMapUint16Float64V(rv.Interface().(map[uint16]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16Float64V(v map[uint16]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[uint16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint16BoolR(rv reflect.Value) { - fastpathTV.EncMapUint16BoolV(rv.Interface().(map[uint16]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint16BoolV(v map[uint16]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[uint16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32IntfR(rv reflect.Value) { - fastpathTV.EncMapUint32IntfV(rv.Interface().(map[uint32]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32IntfV(v map[uint32]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32StringR(rv reflect.Value) { - fastpathTV.EncMapUint32StringV(rv.Interface().(map[uint32]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32StringV(v map[uint32]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[uint32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32UintR(rv reflect.Value) { - fastpathTV.EncMapUint32UintV(rv.Interface().(map[uint32]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32UintV(v map[uint32]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Uint8R(rv reflect.Value) { - fastpathTV.EncMapUint32Uint8V(rv.Interface().(map[uint32]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Uint8V(v map[uint32]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Uint16R(rv reflect.Value) { - fastpathTV.EncMapUint32Uint16V(rv.Interface().(map[uint32]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Uint16V(v map[uint32]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Uint32R(rv reflect.Value) { - fastpathTV.EncMapUint32Uint32V(rv.Interface().(map[uint32]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Uint32V(v map[uint32]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Uint64R(rv reflect.Value) { - fastpathTV.EncMapUint32Uint64V(rv.Interface().(map[uint32]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Uint64V(v map[uint32]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32UintptrR(rv reflect.Value) { - fastpathTV.EncMapUint32UintptrV(rv.Interface().(map[uint32]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32UintptrV(v map[uint32]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32IntR(rv reflect.Value) { - fastpathTV.EncMapUint32IntV(rv.Interface().(map[uint32]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32IntV(v map[uint32]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Int8R(rv reflect.Value) { - fastpathTV.EncMapUint32Int8V(rv.Interface().(map[uint32]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Int8V(v map[uint32]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Int16R(rv reflect.Value) { - fastpathTV.EncMapUint32Int16V(rv.Interface().(map[uint32]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Int16V(v map[uint32]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Int32R(rv reflect.Value) { - fastpathTV.EncMapUint32Int32V(rv.Interface().(map[uint32]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Int32V(v map[uint32]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Int64R(rv reflect.Value) { - fastpathTV.EncMapUint32Int64V(rv.Interface().(map[uint32]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Int64V(v map[uint32]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Float32R(rv reflect.Value) { - fastpathTV.EncMapUint32Float32V(rv.Interface().(map[uint32]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Float32V(v map[uint32]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[uint32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32Float64R(rv reflect.Value) { - fastpathTV.EncMapUint32Float64V(rv.Interface().(map[uint32]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32Float64V(v map[uint32]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[uint32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint32BoolR(rv reflect.Value) { - fastpathTV.EncMapUint32BoolV(rv.Interface().(map[uint32]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint32BoolV(v map[uint32]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[uint32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64IntfR(rv reflect.Value) { - fastpathTV.EncMapUint64IntfV(rv.Interface().(map[uint64]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64IntfV(v map[uint64]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64StringR(rv reflect.Value) { - fastpathTV.EncMapUint64StringV(rv.Interface().(map[uint64]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64StringV(v map[uint64]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[uint64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64UintR(rv reflect.Value) { - fastpathTV.EncMapUint64UintV(rv.Interface().(map[uint64]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64UintV(v map[uint64]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Uint8R(rv reflect.Value) { - fastpathTV.EncMapUint64Uint8V(rv.Interface().(map[uint64]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Uint8V(v map[uint64]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Uint16R(rv reflect.Value) { - fastpathTV.EncMapUint64Uint16V(rv.Interface().(map[uint64]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Uint16V(v map[uint64]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Uint32R(rv reflect.Value) { - fastpathTV.EncMapUint64Uint32V(rv.Interface().(map[uint64]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Uint32V(v map[uint64]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Uint64R(rv reflect.Value) { - fastpathTV.EncMapUint64Uint64V(rv.Interface().(map[uint64]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Uint64V(v map[uint64]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64UintptrR(rv reflect.Value) { - fastpathTV.EncMapUint64UintptrV(rv.Interface().(map[uint64]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64UintptrV(v map[uint64]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uint64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64IntR(rv reflect.Value) { - fastpathTV.EncMapUint64IntV(rv.Interface().(map[uint64]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64IntV(v map[uint64]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Int8R(rv reflect.Value) { - fastpathTV.EncMapUint64Int8V(rv.Interface().(map[uint64]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Int8V(v map[uint64]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Int16R(rv reflect.Value) { - fastpathTV.EncMapUint64Int16V(rv.Interface().(map[uint64]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Int16V(v map[uint64]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Int32R(rv reflect.Value) { - fastpathTV.EncMapUint64Int32V(rv.Interface().(map[uint64]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Int32V(v map[uint64]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Int64R(rv reflect.Value) { - fastpathTV.EncMapUint64Int64V(rv.Interface().(map[uint64]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Int64V(v map[uint64]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uint64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Float32R(rv reflect.Value) { - fastpathTV.EncMapUint64Float32V(rv.Interface().(map[uint64]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Float32V(v map[uint64]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[uint64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64Float64R(rv reflect.Value) { - fastpathTV.EncMapUint64Float64V(rv.Interface().(map[uint64]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64Float64V(v map[uint64]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[uint64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUint64BoolR(rv reflect.Value) { - fastpathTV.EncMapUint64BoolV(rv.Interface().(map[uint64]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUint64BoolV(v map[uint64]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(uint64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[uint64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeUint(uint64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrIntfR(rv reflect.Value) { - fastpathTV.EncMapUintptrIntfV(rv.Interface().(map[uintptr]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrIntfV(v map[uintptr]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uintptr(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrStringR(rv reflect.Value) { - fastpathTV.EncMapUintptrStringV(rv.Interface().(map[uintptr]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrStringV(v map[uintptr]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[uintptr(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrUintR(rv reflect.Value) { - fastpathTV.EncMapUintptrUintV(rv.Interface().(map[uintptr]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrUintV(v map[uintptr]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrUint8R(rv reflect.Value) { - fastpathTV.EncMapUintptrUint8V(rv.Interface().(map[uintptr]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrUint8V(v map[uintptr]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrUint16R(rv reflect.Value) { - fastpathTV.EncMapUintptrUint16V(rv.Interface().(map[uintptr]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrUint16V(v map[uintptr]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrUint32R(rv reflect.Value) { - fastpathTV.EncMapUintptrUint32V(rv.Interface().(map[uintptr]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrUint32V(v map[uintptr]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrUint64R(rv reflect.Value) { - fastpathTV.EncMapUintptrUint64V(rv.Interface().(map[uintptr]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrUint64V(v map[uintptr]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrUintptrR(rv reflect.Value) { - fastpathTV.EncMapUintptrUintptrV(rv.Interface().(map[uintptr]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrUintptrV(v map[uintptr]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[uintptr(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrIntR(rv reflect.Value) { - fastpathTV.EncMapUintptrIntV(rv.Interface().(map[uintptr]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrIntV(v map[uintptr]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrInt8R(rv reflect.Value) { - fastpathTV.EncMapUintptrInt8V(rv.Interface().(map[uintptr]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrInt8V(v map[uintptr]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrInt16R(rv reflect.Value) { - fastpathTV.EncMapUintptrInt16V(rv.Interface().(map[uintptr]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrInt16V(v map[uintptr]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrInt32R(rv reflect.Value) { - fastpathTV.EncMapUintptrInt32V(rv.Interface().(map[uintptr]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrInt32V(v map[uintptr]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrInt64R(rv reflect.Value) { - fastpathTV.EncMapUintptrInt64V(rv.Interface().(map[uintptr]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrInt64V(v map[uintptr]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[uintptr(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrFloat32R(rv reflect.Value) { - fastpathTV.EncMapUintptrFloat32V(rv.Interface().(map[uintptr]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrFloat32V(v map[uintptr]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[uintptr(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrFloat64R(rv reflect.Value) { - fastpathTV.EncMapUintptrFloat64V(rv.Interface().(map[uintptr]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrFloat64V(v map[uintptr]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[uintptr(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapUintptrBoolR(rv reflect.Value) { - fastpathTV.EncMapUintptrBoolV(rv.Interface().(map[uintptr]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapUintptrBoolV(v map[uintptr]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]uint64, len(v)) - var i int - for k, _ := range v { - v2[i] = uint64(k) - i++ - } - sort.Sort(uintSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(uintptr(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[uintptr(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - e.encode(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntIntfR(rv reflect.Value) { - fastpathTV.EncMapIntIntfV(rv.Interface().(map[int]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntIntfV(v map[int]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntStringR(rv reflect.Value) { - fastpathTV.EncMapIntStringV(rv.Interface().(map[int]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntStringV(v map[int]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[int(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntUintR(rv reflect.Value) { - fastpathTV.EncMapIntUintV(rv.Interface().(map[int]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntUintV(v map[int]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntUint8R(rv reflect.Value) { - fastpathTV.EncMapIntUint8V(rv.Interface().(map[int]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntUint8V(v map[int]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntUint16R(rv reflect.Value) { - fastpathTV.EncMapIntUint16V(rv.Interface().(map[int]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntUint16V(v map[int]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntUint32R(rv reflect.Value) { - fastpathTV.EncMapIntUint32V(rv.Interface().(map[int]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntUint32V(v map[int]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntUint64R(rv reflect.Value) { - fastpathTV.EncMapIntUint64V(rv.Interface().(map[int]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntUint64V(v map[int]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntUintptrR(rv reflect.Value) { - fastpathTV.EncMapIntUintptrV(rv.Interface().(map[int]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntUintptrV(v map[int]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntIntR(rv reflect.Value) { - fastpathTV.EncMapIntIntV(rv.Interface().(map[int]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntIntV(v map[int]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntInt8R(rv reflect.Value) { - fastpathTV.EncMapIntInt8V(rv.Interface().(map[int]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntInt8V(v map[int]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntInt16R(rv reflect.Value) { - fastpathTV.EncMapIntInt16V(rv.Interface().(map[int]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntInt16V(v map[int]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntInt32R(rv reflect.Value) { - fastpathTV.EncMapIntInt32V(rv.Interface().(map[int]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntInt32V(v map[int]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntInt64R(rv reflect.Value) { - fastpathTV.EncMapIntInt64V(rv.Interface().(map[int]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntInt64V(v map[int]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntFloat32R(rv reflect.Value) { - fastpathTV.EncMapIntFloat32V(rv.Interface().(map[int]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntFloat32V(v map[int]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[int(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntFloat64R(rv reflect.Value) { - fastpathTV.EncMapIntFloat64V(rv.Interface().(map[int]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntFloat64V(v map[int]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[int(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapIntBoolR(rv reflect.Value) { - fastpathTV.EncMapIntBoolV(rv.Interface().(map[int]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapIntBoolV(v map[int]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[int(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8IntfR(rv reflect.Value) { - fastpathTV.EncMapInt8IntfV(rv.Interface().(map[int8]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8IntfV(v map[int8]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8StringR(rv reflect.Value) { - fastpathTV.EncMapInt8StringV(rv.Interface().(map[int8]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8StringV(v map[int8]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[int8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8UintR(rv reflect.Value) { - fastpathTV.EncMapInt8UintV(rv.Interface().(map[int8]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8UintV(v map[int8]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Uint8R(rv reflect.Value) { - fastpathTV.EncMapInt8Uint8V(rv.Interface().(map[int8]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Uint8V(v map[int8]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Uint16R(rv reflect.Value) { - fastpathTV.EncMapInt8Uint16V(rv.Interface().(map[int8]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Uint16V(v map[int8]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Uint32R(rv reflect.Value) { - fastpathTV.EncMapInt8Uint32V(rv.Interface().(map[int8]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Uint32V(v map[int8]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Uint64R(rv reflect.Value) { - fastpathTV.EncMapInt8Uint64V(rv.Interface().(map[int8]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Uint64V(v map[int8]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8UintptrR(rv reflect.Value) { - fastpathTV.EncMapInt8UintptrV(rv.Interface().(map[int8]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8UintptrV(v map[int8]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8IntR(rv reflect.Value) { - fastpathTV.EncMapInt8IntV(rv.Interface().(map[int8]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8IntV(v map[int8]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Int8R(rv reflect.Value) { - fastpathTV.EncMapInt8Int8V(rv.Interface().(map[int8]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Int8V(v map[int8]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Int16R(rv reflect.Value) { - fastpathTV.EncMapInt8Int16V(rv.Interface().(map[int8]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Int16V(v map[int8]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Int32R(rv reflect.Value) { - fastpathTV.EncMapInt8Int32V(rv.Interface().(map[int8]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Int32V(v map[int8]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Int64R(rv reflect.Value) { - fastpathTV.EncMapInt8Int64V(rv.Interface().(map[int8]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Int64V(v map[int8]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int8(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Float32R(rv reflect.Value) { - fastpathTV.EncMapInt8Float32V(rv.Interface().(map[int8]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Float32V(v map[int8]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[int8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8Float64R(rv reflect.Value) { - fastpathTV.EncMapInt8Float64V(rv.Interface().(map[int8]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8Float64V(v map[int8]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[int8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt8BoolR(rv reflect.Value) { - fastpathTV.EncMapInt8BoolV(rv.Interface().(map[int8]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt8BoolV(v map[int8]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int8(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[int8(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16IntfR(rv reflect.Value) { - fastpathTV.EncMapInt16IntfV(rv.Interface().(map[int16]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16IntfV(v map[int16]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16StringR(rv reflect.Value) { - fastpathTV.EncMapInt16StringV(rv.Interface().(map[int16]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16StringV(v map[int16]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[int16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16UintR(rv reflect.Value) { - fastpathTV.EncMapInt16UintV(rv.Interface().(map[int16]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16UintV(v map[int16]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Uint8R(rv reflect.Value) { - fastpathTV.EncMapInt16Uint8V(rv.Interface().(map[int16]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Uint8V(v map[int16]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Uint16R(rv reflect.Value) { - fastpathTV.EncMapInt16Uint16V(rv.Interface().(map[int16]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Uint16V(v map[int16]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Uint32R(rv reflect.Value) { - fastpathTV.EncMapInt16Uint32V(rv.Interface().(map[int16]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Uint32V(v map[int16]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Uint64R(rv reflect.Value) { - fastpathTV.EncMapInt16Uint64V(rv.Interface().(map[int16]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Uint64V(v map[int16]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16UintptrR(rv reflect.Value) { - fastpathTV.EncMapInt16UintptrV(rv.Interface().(map[int16]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16UintptrV(v map[int16]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16IntR(rv reflect.Value) { - fastpathTV.EncMapInt16IntV(rv.Interface().(map[int16]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16IntV(v map[int16]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Int8R(rv reflect.Value) { - fastpathTV.EncMapInt16Int8V(rv.Interface().(map[int16]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Int8V(v map[int16]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Int16R(rv reflect.Value) { - fastpathTV.EncMapInt16Int16V(rv.Interface().(map[int16]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Int16V(v map[int16]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Int32R(rv reflect.Value) { - fastpathTV.EncMapInt16Int32V(rv.Interface().(map[int16]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Int32V(v map[int16]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Int64R(rv reflect.Value) { - fastpathTV.EncMapInt16Int64V(rv.Interface().(map[int16]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Int64V(v map[int16]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int16(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Float32R(rv reflect.Value) { - fastpathTV.EncMapInt16Float32V(rv.Interface().(map[int16]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Float32V(v map[int16]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[int16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16Float64R(rv reflect.Value) { - fastpathTV.EncMapInt16Float64V(rv.Interface().(map[int16]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16Float64V(v map[int16]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[int16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt16BoolR(rv reflect.Value) { - fastpathTV.EncMapInt16BoolV(rv.Interface().(map[int16]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt16BoolV(v map[int16]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int16(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[int16(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32IntfR(rv reflect.Value) { - fastpathTV.EncMapInt32IntfV(rv.Interface().(map[int32]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32IntfV(v map[int32]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32StringR(rv reflect.Value) { - fastpathTV.EncMapInt32StringV(rv.Interface().(map[int32]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32StringV(v map[int32]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[int32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32UintR(rv reflect.Value) { - fastpathTV.EncMapInt32UintV(rv.Interface().(map[int32]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32UintV(v map[int32]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Uint8R(rv reflect.Value) { - fastpathTV.EncMapInt32Uint8V(rv.Interface().(map[int32]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Uint8V(v map[int32]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Uint16R(rv reflect.Value) { - fastpathTV.EncMapInt32Uint16V(rv.Interface().(map[int32]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Uint16V(v map[int32]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Uint32R(rv reflect.Value) { - fastpathTV.EncMapInt32Uint32V(rv.Interface().(map[int32]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Uint32V(v map[int32]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Uint64R(rv reflect.Value) { - fastpathTV.EncMapInt32Uint64V(rv.Interface().(map[int32]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Uint64V(v map[int32]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32UintptrR(rv reflect.Value) { - fastpathTV.EncMapInt32UintptrV(rv.Interface().(map[int32]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32UintptrV(v map[int32]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32IntR(rv reflect.Value) { - fastpathTV.EncMapInt32IntV(rv.Interface().(map[int32]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32IntV(v map[int32]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Int8R(rv reflect.Value) { - fastpathTV.EncMapInt32Int8V(rv.Interface().(map[int32]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Int8V(v map[int32]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Int16R(rv reflect.Value) { - fastpathTV.EncMapInt32Int16V(rv.Interface().(map[int32]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Int16V(v map[int32]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Int32R(rv reflect.Value) { - fastpathTV.EncMapInt32Int32V(rv.Interface().(map[int32]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Int32V(v map[int32]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Int64R(rv reflect.Value) { - fastpathTV.EncMapInt32Int64V(rv.Interface().(map[int32]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Int64V(v map[int32]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int32(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Float32R(rv reflect.Value) { - fastpathTV.EncMapInt32Float32V(rv.Interface().(map[int32]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Float32V(v map[int32]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[int32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32Float64R(rv reflect.Value) { - fastpathTV.EncMapInt32Float64V(rv.Interface().(map[int32]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32Float64V(v map[int32]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[int32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt32BoolR(rv reflect.Value) { - fastpathTV.EncMapInt32BoolV(rv.Interface().(map[int32]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt32BoolV(v map[int32]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int32(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[int32(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64IntfR(rv reflect.Value) { - fastpathTV.EncMapInt64IntfV(rv.Interface().(map[int64]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64IntfV(v map[int64]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64StringR(rv reflect.Value) { - fastpathTV.EncMapInt64StringV(rv.Interface().(map[int64]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64StringV(v map[int64]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[int64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64UintR(rv reflect.Value) { - fastpathTV.EncMapInt64UintV(rv.Interface().(map[int64]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64UintV(v map[int64]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Uint8R(rv reflect.Value) { - fastpathTV.EncMapInt64Uint8V(rv.Interface().(map[int64]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Uint8V(v map[int64]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Uint16R(rv reflect.Value) { - fastpathTV.EncMapInt64Uint16V(rv.Interface().(map[int64]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Uint16V(v map[int64]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Uint32R(rv reflect.Value) { - fastpathTV.EncMapInt64Uint32V(rv.Interface().(map[int64]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Uint32V(v map[int64]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Uint64R(rv reflect.Value) { - fastpathTV.EncMapInt64Uint64V(rv.Interface().(map[int64]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Uint64V(v map[int64]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64UintptrR(rv reflect.Value) { - fastpathTV.EncMapInt64UintptrV(rv.Interface().(map[int64]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64UintptrV(v map[int64]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[int64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64IntR(rv reflect.Value) { - fastpathTV.EncMapInt64IntV(rv.Interface().(map[int64]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64IntV(v map[int64]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Int8R(rv reflect.Value) { - fastpathTV.EncMapInt64Int8V(rv.Interface().(map[int64]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Int8V(v map[int64]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Int16R(rv reflect.Value) { - fastpathTV.EncMapInt64Int16V(rv.Interface().(map[int64]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Int16V(v map[int64]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Int32R(rv reflect.Value) { - fastpathTV.EncMapInt64Int32V(rv.Interface().(map[int64]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Int32V(v map[int64]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Int64R(rv reflect.Value) { - fastpathTV.EncMapInt64Int64V(rv.Interface().(map[int64]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Int64V(v map[int64]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[int64(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Float32R(rv reflect.Value) { - fastpathTV.EncMapInt64Float32V(rv.Interface().(map[int64]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Float32V(v map[int64]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[int64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64Float64R(rv reflect.Value) { - fastpathTV.EncMapInt64Float64V(rv.Interface().(map[int64]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64Float64V(v map[int64]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[int64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapInt64BoolR(rv reflect.Value) { - fastpathTV.EncMapInt64BoolV(rv.Interface().(map[int64]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapInt64BoolV(v map[int64]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]int64, len(v)) - var i int - for k, _ := range v { - v2[i] = int64(k) - i++ - } - sort.Sort(intSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(int64(k2))) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[int64(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeInt(int64(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolIntfR(rv reflect.Value) { - fastpathTV.EncMapBoolIntfV(rv.Interface().(map[bool]interface{}), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolIntfV(v map[bool]interface{}, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[bool(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolStringR(rv reflect.Value) { - fastpathTV.EncMapBoolStringV(rv.Interface().(map[bool]string), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolStringV(v map[bool]string, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v[bool(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeString(c_UTF8, v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolUintR(rv reflect.Value) { - fastpathTV.EncMapBoolUintV(rv.Interface().(map[bool]uint), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolUintV(v map[bool]uint, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolUint8R(rv reflect.Value) { - fastpathTV.EncMapBoolUint8V(rv.Interface().(map[bool]uint8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolUint8V(v map[bool]uint8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolUint16R(rv reflect.Value) { - fastpathTV.EncMapBoolUint16V(rv.Interface().(map[bool]uint16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolUint16V(v map[bool]uint16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolUint32R(rv reflect.Value) { - fastpathTV.EncMapBoolUint32V(rv.Interface().(map[bool]uint32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolUint32V(v map[bool]uint32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolUint64R(rv reflect.Value) { - fastpathTV.EncMapBoolUint64V(rv.Interface().(map[bool]uint64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolUint64V(v map[bool]uint64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeUint(uint64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolUintptrR(rv reflect.Value) { - fastpathTV.EncMapBoolUintptrV(rv.Interface().(map[bool]uintptr), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolUintptrV(v map[bool]uintptr, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v[bool(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - e.encode(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolIntR(rv reflect.Value) { - fastpathTV.EncMapBoolIntV(rv.Interface().(map[bool]int), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolIntV(v map[bool]int, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolInt8R(rv reflect.Value) { - fastpathTV.EncMapBoolInt8V(rv.Interface().(map[bool]int8), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolInt8V(v map[bool]int8, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolInt16R(rv reflect.Value) { - fastpathTV.EncMapBoolInt16V(rv.Interface().(map[bool]int16), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolInt16V(v map[bool]int16, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolInt32R(rv reflect.Value) { - fastpathTV.EncMapBoolInt32V(rv.Interface().(map[bool]int32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolInt32V(v map[bool]int32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolInt64R(rv reflect.Value) { - fastpathTV.EncMapBoolInt64V(rv.Interface().(map[bool]int64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolInt64V(v map[bool]int64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v[bool(k2)])) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeInt(int64(v2)) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolFloat32R(rv reflect.Value) { - fastpathTV.EncMapBoolFloat32V(rv.Interface().(map[bool]float32), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolFloat32V(v map[bool]float32, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v[bool(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat32(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolFloat64R(rv reflect.Value) { - fastpathTV.EncMapBoolFloat64V(rv.Interface().(map[bool]float64), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolFloat64V(v map[bool]float64, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v[bool(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeFloat64(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -func (f *encFnInfo) fastpathEncMapBoolBoolR(rv reflect.Value) { - fastpathTV.EncMapBoolBoolV(rv.Interface().(map[bool]bool), fastpathCheckNilFalse, f.e) -} -func (_ fastpathT) EncMapBoolBoolV(v map[bool]bool, checkNil bool, e *Encoder) { - ee := e.e - cr := e.cr - if checkNil && v == nil { - ee.EncodeNil() - return - } - ee.EncodeMapStart(len(v)) - if e.h.Canonical { - v2 := make([]bool, len(v)) - var i int - for k, _ := range v { - v2[i] = bool(k) - i++ - } - sort.Sort(boolSlice(v2)) - for _, k2 := range v2 { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(bool(k2)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v[bool(k2)]) - } - } else { - for k2, v2 := range v { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - ee.EncodeBool(k2) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - ee.EncodeBool(v2) - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } -} - -// -- decode - -// -- -- fast path type switch -func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool { - if !fastpathEnabled { - return false - } - switch v := iv.(type) { - - case []interface{}: - fastpathTV.DecSliceIntfV(v, fastpathCheckNilFalse, false, d) - case *[]interface{}: - v2, changed2 := fastpathTV.DecSliceIntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]interface{}: - fastpathTV.DecMapIntfIntfV(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]interface{}: - v2, changed2 := fastpathTV.DecMapIntfIntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]string: - fastpathTV.DecMapIntfStringV(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]string: - v2, changed2 := fastpathTV.DecMapIntfStringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]uint: - fastpathTV.DecMapIntfUintV(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]uint: - v2, changed2 := fastpathTV.DecMapIntfUintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]uint8: - fastpathTV.DecMapIntfUint8V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]uint8: - v2, changed2 := fastpathTV.DecMapIntfUint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]uint16: - fastpathTV.DecMapIntfUint16V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]uint16: - v2, changed2 := fastpathTV.DecMapIntfUint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]uint32: - fastpathTV.DecMapIntfUint32V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]uint32: - v2, changed2 := fastpathTV.DecMapIntfUint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]uint64: - fastpathTV.DecMapIntfUint64V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]uint64: - v2, changed2 := fastpathTV.DecMapIntfUint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]uintptr: - fastpathTV.DecMapIntfUintptrV(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]uintptr: - v2, changed2 := fastpathTV.DecMapIntfUintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]int: - fastpathTV.DecMapIntfIntV(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]int: - v2, changed2 := fastpathTV.DecMapIntfIntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]int8: - fastpathTV.DecMapIntfInt8V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]int8: - v2, changed2 := fastpathTV.DecMapIntfInt8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]int16: - fastpathTV.DecMapIntfInt16V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]int16: - v2, changed2 := fastpathTV.DecMapIntfInt16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]int32: - fastpathTV.DecMapIntfInt32V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]int32: - v2, changed2 := fastpathTV.DecMapIntfInt32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]int64: - fastpathTV.DecMapIntfInt64V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]int64: - v2, changed2 := fastpathTV.DecMapIntfInt64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]float32: - fastpathTV.DecMapIntfFloat32V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]float32: - v2, changed2 := fastpathTV.DecMapIntfFloat32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]float64: - fastpathTV.DecMapIntfFloat64V(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]float64: - v2, changed2 := fastpathTV.DecMapIntfFloat64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[interface{}]bool: - fastpathTV.DecMapIntfBoolV(v, fastpathCheckNilFalse, false, d) - case *map[interface{}]bool: - v2, changed2 := fastpathTV.DecMapIntfBoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []string: - fastpathTV.DecSliceStringV(v, fastpathCheckNilFalse, false, d) - case *[]string: - v2, changed2 := fastpathTV.DecSliceStringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]interface{}: - fastpathTV.DecMapStringIntfV(v, fastpathCheckNilFalse, false, d) - case *map[string]interface{}: - v2, changed2 := fastpathTV.DecMapStringIntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]string: - fastpathTV.DecMapStringStringV(v, fastpathCheckNilFalse, false, d) - case *map[string]string: - v2, changed2 := fastpathTV.DecMapStringStringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]uint: - fastpathTV.DecMapStringUintV(v, fastpathCheckNilFalse, false, d) - case *map[string]uint: - v2, changed2 := fastpathTV.DecMapStringUintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]uint8: - fastpathTV.DecMapStringUint8V(v, fastpathCheckNilFalse, false, d) - case *map[string]uint8: - v2, changed2 := fastpathTV.DecMapStringUint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]uint16: - fastpathTV.DecMapStringUint16V(v, fastpathCheckNilFalse, false, d) - case *map[string]uint16: - v2, changed2 := fastpathTV.DecMapStringUint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]uint32: - fastpathTV.DecMapStringUint32V(v, fastpathCheckNilFalse, false, d) - case *map[string]uint32: - v2, changed2 := fastpathTV.DecMapStringUint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]uint64: - fastpathTV.DecMapStringUint64V(v, fastpathCheckNilFalse, false, d) - case *map[string]uint64: - v2, changed2 := fastpathTV.DecMapStringUint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]uintptr: - fastpathTV.DecMapStringUintptrV(v, fastpathCheckNilFalse, false, d) - case *map[string]uintptr: - v2, changed2 := fastpathTV.DecMapStringUintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]int: - fastpathTV.DecMapStringIntV(v, fastpathCheckNilFalse, false, d) - case *map[string]int: - v2, changed2 := fastpathTV.DecMapStringIntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]int8: - fastpathTV.DecMapStringInt8V(v, fastpathCheckNilFalse, false, d) - case *map[string]int8: - v2, changed2 := fastpathTV.DecMapStringInt8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]int16: - fastpathTV.DecMapStringInt16V(v, fastpathCheckNilFalse, false, d) - case *map[string]int16: - v2, changed2 := fastpathTV.DecMapStringInt16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]int32: - fastpathTV.DecMapStringInt32V(v, fastpathCheckNilFalse, false, d) - case *map[string]int32: - v2, changed2 := fastpathTV.DecMapStringInt32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]int64: - fastpathTV.DecMapStringInt64V(v, fastpathCheckNilFalse, false, d) - case *map[string]int64: - v2, changed2 := fastpathTV.DecMapStringInt64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]float32: - fastpathTV.DecMapStringFloat32V(v, fastpathCheckNilFalse, false, d) - case *map[string]float32: - v2, changed2 := fastpathTV.DecMapStringFloat32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]float64: - fastpathTV.DecMapStringFloat64V(v, fastpathCheckNilFalse, false, d) - case *map[string]float64: - v2, changed2 := fastpathTV.DecMapStringFloat64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[string]bool: - fastpathTV.DecMapStringBoolV(v, fastpathCheckNilFalse, false, d) - case *map[string]bool: - v2, changed2 := fastpathTV.DecMapStringBoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []float32: - fastpathTV.DecSliceFloat32V(v, fastpathCheckNilFalse, false, d) - case *[]float32: - v2, changed2 := fastpathTV.DecSliceFloat32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]interface{}: - fastpathTV.DecMapFloat32IntfV(v, fastpathCheckNilFalse, false, d) - case *map[float32]interface{}: - v2, changed2 := fastpathTV.DecMapFloat32IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]string: - fastpathTV.DecMapFloat32StringV(v, fastpathCheckNilFalse, false, d) - case *map[float32]string: - v2, changed2 := fastpathTV.DecMapFloat32StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]uint: - fastpathTV.DecMapFloat32UintV(v, fastpathCheckNilFalse, false, d) - case *map[float32]uint: - v2, changed2 := fastpathTV.DecMapFloat32UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]uint8: - fastpathTV.DecMapFloat32Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[float32]uint8: - v2, changed2 := fastpathTV.DecMapFloat32Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]uint16: - fastpathTV.DecMapFloat32Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[float32]uint16: - v2, changed2 := fastpathTV.DecMapFloat32Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]uint32: - fastpathTV.DecMapFloat32Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[float32]uint32: - v2, changed2 := fastpathTV.DecMapFloat32Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]uint64: - fastpathTV.DecMapFloat32Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[float32]uint64: - v2, changed2 := fastpathTV.DecMapFloat32Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]uintptr: - fastpathTV.DecMapFloat32UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[float32]uintptr: - v2, changed2 := fastpathTV.DecMapFloat32UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]int: - fastpathTV.DecMapFloat32IntV(v, fastpathCheckNilFalse, false, d) - case *map[float32]int: - v2, changed2 := fastpathTV.DecMapFloat32IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]int8: - fastpathTV.DecMapFloat32Int8V(v, fastpathCheckNilFalse, false, d) - case *map[float32]int8: - v2, changed2 := fastpathTV.DecMapFloat32Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]int16: - fastpathTV.DecMapFloat32Int16V(v, fastpathCheckNilFalse, false, d) - case *map[float32]int16: - v2, changed2 := fastpathTV.DecMapFloat32Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]int32: - fastpathTV.DecMapFloat32Int32V(v, fastpathCheckNilFalse, false, d) - case *map[float32]int32: - v2, changed2 := fastpathTV.DecMapFloat32Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]int64: - fastpathTV.DecMapFloat32Int64V(v, fastpathCheckNilFalse, false, d) - case *map[float32]int64: - v2, changed2 := fastpathTV.DecMapFloat32Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]float32: - fastpathTV.DecMapFloat32Float32V(v, fastpathCheckNilFalse, false, d) - case *map[float32]float32: - v2, changed2 := fastpathTV.DecMapFloat32Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]float64: - fastpathTV.DecMapFloat32Float64V(v, fastpathCheckNilFalse, false, d) - case *map[float32]float64: - v2, changed2 := fastpathTV.DecMapFloat32Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float32]bool: - fastpathTV.DecMapFloat32BoolV(v, fastpathCheckNilFalse, false, d) - case *map[float32]bool: - v2, changed2 := fastpathTV.DecMapFloat32BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []float64: - fastpathTV.DecSliceFloat64V(v, fastpathCheckNilFalse, false, d) - case *[]float64: - v2, changed2 := fastpathTV.DecSliceFloat64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]interface{}: - fastpathTV.DecMapFloat64IntfV(v, fastpathCheckNilFalse, false, d) - case *map[float64]interface{}: - v2, changed2 := fastpathTV.DecMapFloat64IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]string: - fastpathTV.DecMapFloat64StringV(v, fastpathCheckNilFalse, false, d) - case *map[float64]string: - v2, changed2 := fastpathTV.DecMapFloat64StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]uint: - fastpathTV.DecMapFloat64UintV(v, fastpathCheckNilFalse, false, d) - case *map[float64]uint: - v2, changed2 := fastpathTV.DecMapFloat64UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]uint8: - fastpathTV.DecMapFloat64Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[float64]uint8: - v2, changed2 := fastpathTV.DecMapFloat64Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]uint16: - fastpathTV.DecMapFloat64Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[float64]uint16: - v2, changed2 := fastpathTV.DecMapFloat64Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]uint32: - fastpathTV.DecMapFloat64Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[float64]uint32: - v2, changed2 := fastpathTV.DecMapFloat64Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]uint64: - fastpathTV.DecMapFloat64Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[float64]uint64: - v2, changed2 := fastpathTV.DecMapFloat64Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]uintptr: - fastpathTV.DecMapFloat64UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[float64]uintptr: - v2, changed2 := fastpathTV.DecMapFloat64UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]int: - fastpathTV.DecMapFloat64IntV(v, fastpathCheckNilFalse, false, d) - case *map[float64]int: - v2, changed2 := fastpathTV.DecMapFloat64IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]int8: - fastpathTV.DecMapFloat64Int8V(v, fastpathCheckNilFalse, false, d) - case *map[float64]int8: - v2, changed2 := fastpathTV.DecMapFloat64Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]int16: - fastpathTV.DecMapFloat64Int16V(v, fastpathCheckNilFalse, false, d) - case *map[float64]int16: - v2, changed2 := fastpathTV.DecMapFloat64Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]int32: - fastpathTV.DecMapFloat64Int32V(v, fastpathCheckNilFalse, false, d) - case *map[float64]int32: - v2, changed2 := fastpathTV.DecMapFloat64Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]int64: - fastpathTV.DecMapFloat64Int64V(v, fastpathCheckNilFalse, false, d) - case *map[float64]int64: - v2, changed2 := fastpathTV.DecMapFloat64Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]float32: - fastpathTV.DecMapFloat64Float32V(v, fastpathCheckNilFalse, false, d) - case *map[float64]float32: - v2, changed2 := fastpathTV.DecMapFloat64Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]float64: - fastpathTV.DecMapFloat64Float64V(v, fastpathCheckNilFalse, false, d) - case *map[float64]float64: - v2, changed2 := fastpathTV.DecMapFloat64Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[float64]bool: - fastpathTV.DecMapFloat64BoolV(v, fastpathCheckNilFalse, false, d) - case *map[float64]bool: - v2, changed2 := fastpathTV.DecMapFloat64BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []uint: - fastpathTV.DecSliceUintV(v, fastpathCheckNilFalse, false, d) - case *[]uint: - v2, changed2 := fastpathTV.DecSliceUintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]interface{}: - fastpathTV.DecMapUintIntfV(v, fastpathCheckNilFalse, false, d) - case *map[uint]interface{}: - v2, changed2 := fastpathTV.DecMapUintIntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]string: - fastpathTV.DecMapUintStringV(v, fastpathCheckNilFalse, false, d) - case *map[uint]string: - v2, changed2 := fastpathTV.DecMapUintStringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]uint: - fastpathTV.DecMapUintUintV(v, fastpathCheckNilFalse, false, d) - case *map[uint]uint: - v2, changed2 := fastpathTV.DecMapUintUintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]uint8: - fastpathTV.DecMapUintUint8V(v, fastpathCheckNilFalse, false, d) - case *map[uint]uint8: - v2, changed2 := fastpathTV.DecMapUintUint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]uint16: - fastpathTV.DecMapUintUint16V(v, fastpathCheckNilFalse, false, d) - case *map[uint]uint16: - v2, changed2 := fastpathTV.DecMapUintUint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]uint32: - fastpathTV.DecMapUintUint32V(v, fastpathCheckNilFalse, false, d) - case *map[uint]uint32: - v2, changed2 := fastpathTV.DecMapUintUint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]uint64: - fastpathTV.DecMapUintUint64V(v, fastpathCheckNilFalse, false, d) - case *map[uint]uint64: - v2, changed2 := fastpathTV.DecMapUintUint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]uintptr: - fastpathTV.DecMapUintUintptrV(v, fastpathCheckNilFalse, false, d) - case *map[uint]uintptr: - v2, changed2 := fastpathTV.DecMapUintUintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]int: - fastpathTV.DecMapUintIntV(v, fastpathCheckNilFalse, false, d) - case *map[uint]int: - v2, changed2 := fastpathTV.DecMapUintIntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]int8: - fastpathTV.DecMapUintInt8V(v, fastpathCheckNilFalse, false, d) - case *map[uint]int8: - v2, changed2 := fastpathTV.DecMapUintInt8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]int16: - fastpathTV.DecMapUintInt16V(v, fastpathCheckNilFalse, false, d) - case *map[uint]int16: - v2, changed2 := fastpathTV.DecMapUintInt16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]int32: - fastpathTV.DecMapUintInt32V(v, fastpathCheckNilFalse, false, d) - case *map[uint]int32: - v2, changed2 := fastpathTV.DecMapUintInt32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]int64: - fastpathTV.DecMapUintInt64V(v, fastpathCheckNilFalse, false, d) - case *map[uint]int64: - v2, changed2 := fastpathTV.DecMapUintInt64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]float32: - fastpathTV.DecMapUintFloat32V(v, fastpathCheckNilFalse, false, d) - case *map[uint]float32: - v2, changed2 := fastpathTV.DecMapUintFloat32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]float64: - fastpathTV.DecMapUintFloat64V(v, fastpathCheckNilFalse, false, d) - case *map[uint]float64: - v2, changed2 := fastpathTV.DecMapUintFloat64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint]bool: - fastpathTV.DecMapUintBoolV(v, fastpathCheckNilFalse, false, d) - case *map[uint]bool: - v2, changed2 := fastpathTV.DecMapUintBoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]interface{}: - fastpathTV.DecMapUint8IntfV(v, fastpathCheckNilFalse, false, d) - case *map[uint8]interface{}: - v2, changed2 := fastpathTV.DecMapUint8IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]string: - fastpathTV.DecMapUint8StringV(v, fastpathCheckNilFalse, false, d) - case *map[uint8]string: - v2, changed2 := fastpathTV.DecMapUint8StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]uint: - fastpathTV.DecMapUint8UintV(v, fastpathCheckNilFalse, false, d) - case *map[uint8]uint: - v2, changed2 := fastpathTV.DecMapUint8UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]uint8: - fastpathTV.DecMapUint8Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]uint8: - v2, changed2 := fastpathTV.DecMapUint8Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]uint16: - fastpathTV.DecMapUint8Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]uint16: - v2, changed2 := fastpathTV.DecMapUint8Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]uint32: - fastpathTV.DecMapUint8Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]uint32: - v2, changed2 := fastpathTV.DecMapUint8Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]uint64: - fastpathTV.DecMapUint8Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]uint64: - v2, changed2 := fastpathTV.DecMapUint8Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]uintptr: - fastpathTV.DecMapUint8UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[uint8]uintptr: - v2, changed2 := fastpathTV.DecMapUint8UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]int: - fastpathTV.DecMapUint8IntV(v, fastpathCheckNilFalse, false, d) - case *map[uint8]int: - v2, changed2 := fastpathTV.DecMapUint8IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]int8: - fastpathTV.DecMapUint8Int8V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]int8: - v2, changed2 := fastpathTV.DecMapUint8Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]int16: - fastpathTV.DecMapUint8Int16V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]int16: - v2, changed2 := fastpathTV.DecMapUint8Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]int32: - fastpathTV.DecMapUint8Int32V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]int32: - v2, changed2 := fastpathTV.DecMapUint8Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]int64: - fastpathTV.DecMapUint8Int64V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]int64: - v2, changed2 := fastpathTV.DecMapUint8Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]float32: - fastpathTV.DecMapUint8Float32V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]float32: - v2, changed2 := fastpathTV.DecMapUint8Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]float64: - fastpathTV.DecMapUint8Float64V(v, fastpathCheckNilFalse, false, d) - case *map[uint8]float64: - v2, changed2 := fastpathTV.DecMapUint8Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint8]bool: - fastpathTV.DecMapUint8BoolV(v, fastpathCheckNilFalse, false, d) - case *map[uint8]bool: - v2, changed2 := fastpathTV.DecMapUint8BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []uint16: - fastpathTV.DecSliceUint16V(v, fastpathCheckNilFalse, false, d) - case *[]uint16: - v2, changed2 := fastpathTV.DecSliceUint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]interface{}: - fastpathTV.DecMapUint16IntfV(v, fastpathCheckNilFalse, false, d) - case *map[uint16]interface{}: - v2, changed2 := fastpathTV.DecMapUint16IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]string: - fastpathTV.DecMapUint16StringV(v, fastpathCheckNilFalse, false, d) - case *map[uint16]string: - v2, changed2 := fastpathTV.DecMapUint16StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]uint: - fastpathTV.DecMapUint16UintV(v, fastpathCheckNilFalse, false, d) - case *map[uint16]uint: - v2, changed2 := fastpathTV.DecMapUint16UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]uint8: - fastpathTV.DecMapUint16Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]uint8: - v2, changed2 := fastpathTV.DecMapUint16Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]uint16: - fastpathTV.DecMapUint16Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]uint16: - v2, changed2 := fastpathTV.DecMapUint16Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]uint32: - fastpathTV.DecMapUint16Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]uint32: - v2, changed2 := fastpathTV.DecMapUint16Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]uint64: - fastpathTV.DecMapUint16Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]uint64: - v2, changed2 := fastpathTV.DecMapUint16Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]uintptr: - fastpathTV.DecMapUint16UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[uint16]uintptr: - v2, changed2 := fastpathTV.DecMapUint16UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]int: - fastpathTV.DecMapUint16IntV(v, fastpathCheckNilFalse, false, d) - case *map[uint16]int: - v2, changed2 := fastpathTV.DecMapUint16IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]int8: - fastpathTV.DecMapUint16Int8V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]int8: - v2, changed2 := fastpathTV.DecMapUint16Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]int16: - fastpathTV.DecMapUint16Int16V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]int16: - v2, changed2 := fastpathTV.DecMapUint16Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]int32: - fastpathTV.DecMapUint16Int32V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]int32: - v2, changed2 := fastpathTV.DecMapUint16Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]int64: - fastpathTV.DecMapUint16Int64V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]int64: - v2, changed2 := fastpathTV.DecMapUint16Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]float32: - fastpathTV.DecMapUint16Float32V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]float32: - v2, changed2 := fastpathTV.DecMapUint16Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]float64: - fastpathTV.DecMapUint16Float64V(v, fastpathCheckNilFalse, false, d) - case *map[uint16]float64: - v2, changed2 := fastpathTV.DecMapUint16Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint16]bool: - fastpathTV.DecMapUint16BoolV(v, fastpathCheckNilFalse, false, d) - case *map[uint16]bool: - v2, changed2 := fastpathTV.DecMapUint16BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []uint32: - fastpathTV.DecSliceUint32V(v, fastpathCheckNilFalse, false, d) - case *[]uint32: - v2, changed2 := fastpathTV.DecSliceUint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]interface{}: - fastpathTV.DecMapUint32IntfV(v, fastpathCheckNilFalse, false, d) - case *map[uint32]interface{}: - v2, changed2 := fastpathTV.DecMapUint32IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]string: - fastpathTV.DecMapUint32StringV(v, fastpathCheckNilFalse, false, d) - case *map[uint32]string: - v2, changed2 := fastpathTV.DecMapUint32StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]uint: - fastpathTV.DecMapUint32UintV(v, fastpathCheckNilFalse, false, d) - case *map[uint32]uint: - v2, changed2 := fastpathTV.DecMapUint32UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]uint8: - fastpathTV.DecMapUint32Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]uint8: - v2, changed2 := fastpathTV.DecMapUint32Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]uint16: - fastpathTV.DecMapUint32Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]uint16: - v2, changed2 := fastpathTV.DecMapUint32Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]uint32: - fastpathTV.DecMapUint32Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]uint32: - v2, changed2 := fastpathTV.DecMapUint32Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]uint64: - fastpathTV.DecMapUint32Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]uint64: - v2, changed2 := fastpathTV.DecMapUint32Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]uintptr: - fastpathTV.DecMapUint32UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[uint32]uintptr: - v2, changed2 := fastpathTV.DecMapUint32UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]int: - fastpathTV.DecMapUint32IntV(v, fastpathCheckNilFalse, false, d) - case *map[uint32]int: - v2, changed2 := fastpathTV.DecMapUint32IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]int8: - fastpathTV.DecMapUint32Int8V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]int8: - v2, changed2 := fastpathTV.DecMapUint32Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]int16: - fastpathTV.DecMapUint32Int16V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]int16: - v2, changed2 := fastpathTV.DecMapUint32Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]int32: - fastpathTV.DecMapUint32Int32V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]int32: - v2, changed2 := fastpathTV.DecMapUint32Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]int64: - fastpathTV.DecMapUint32Int64V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]int64: - v2, changed2 := fastpathTV.DecMapUint32Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]float32: - fastpathTV.DecMapUint32Float32V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]float32: - v2, changed2 := fastpathTV.DecMapUint32Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]float64: - fastpathTV.DecMapUint32Float64V(v, fastpathCheckNilFalse, false, d) - case *map[uint32]float64: - v2, changed2 := fastpathTV.DecMapUint32Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint32]bool: - fastpathTV.DecMapUint32BoolV(v, fastpathCheckNilFalse, false, d) - case *map[uint32]bool: - v2, changed2 := fastpathTV.DecMapUint32BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []uint64: - fastpathTV.DecSliceUint64V(v, fastpathCheckNilFalse, false, d) - case *[]uint64: - v2, changed2 := fastpathTV.DecSliceUint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]interface{}: - fastpathTV.DecMapUint64IntfV(v, fastpathCheckNilFalse, false, d) - case *map[uint64]interface{}: - v2, changed2 := fastpathTV.DecMapUint64IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]string: - fastpathTV.DecMapUint64StringV(v, fastpathCheckNilFalse, false, d) - case *map[uint64]string: - v2, changed2 := fastpathTV.DecMapUint64StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]uint: - fastpathTV.DecMapUint64UintV(v, fastpathCheckNilFalse, false, d) - case *map[uint64]uint: - v2, changed2 := fastpathTV.DecMapUint64UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]uint8: - fastpathTV.DecMapUint64Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]uint8: - v2, changed2 := fastpathTV.DecMapUint64Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]uint16: - fastpathTV.DecMapUint64Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]uint16: - v2, changed2 := fastpathTV.DecMapUint64Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]uint32: - fastpathTV.DecMapUint64Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]uint32: - v2, changed2 := fastpathTV.DecMapUint64Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]uint64: - fastpathTV.DecMapUint64Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]uint64: - v2, changed2 := fastpathTV.DecMapUint64Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]uintptr: - fastpathTV.DecMapUint64UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[uint64]uintptr: - v2, changed2 := fastpathTV.DecMapUint64UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]int: - fastpathTV.DecMapUint64IntV(v, fastpathCheckNilFalse, false, d) - case *map[uint64]int: - v2, changed2 := fastpathTV.DecMapUint64IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]int8: - fastpathTV.DecMapUint64Int8V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]int8: - v2, changed2 := fastpathTV.DecMapUint64Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]int16: - fastpathTV.DecMapUint64Int16V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]int16: - v2, changed2 := fastpathTV.DecMapUint64Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]int32: - fastpathTV.DecMapUint64Int32V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]int32: - v2, changed2 := fastpathTV.DecMapUint64Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]int64: - fastpathTV.DecMapUint64Int64V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]int64: - v2, changed2 := fastpathTV.DecMapUint64Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]float32: - fastpathTV.DecMapUint64Float32V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]float32: - v2, changed2 := fastpathTV.DecMapUint64Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]float64: - fastpathTV.DecMapUint64Float64V(v, fastpathCheckNilFalse, false, d) - case *map[uint64]float64: - v2, changed2 := fastpathTV.DecMapUint64Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uint64]bool: - fastpathTV.DecMapUint64BoolV(v, fastpathCheckNilFalse, false, d) - case *map[uint64]bool: - v2, changed2 := fastpathTV.DecMapUint64BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []uintptr: - fastpathTV.DecSliceUintptrV(v, fastpathCheckNilFalse, false, d) - case *[]uintptr: - v2, changed2 := fastpathTV.DecSliceUintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]interface{}: - fastpathTV.DecMapUintptrIntfV(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]interface{}: - v2, changed2 := fastpathTV.DecMapUintptrIntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]string: - fastpathTV.DecMapUintptrStringV(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]string: - v2, changed2 := fastpathTV.DecMapUintptrStringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]uint: - fastpathTV.DecMapUintptrUintV(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]uint: - v2, changed2 := fastpathTV.DecMapUintptrUintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]uint8: - fastpathTV.DecMapUintptrUint8V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]uint8: - v2, changed2 := fastpathTV.DecMapUintptrUint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]uint16: - fastpathTV.DecMapUintptrUint16V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]uint16: - v2, changed2 := fastpathTV.DecMapUintptrUint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]uint32: - fastpathTV.DecMapUintptrUint32V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]uint32: - v2, changed2 := fastpathTV.DecMapUintptrUint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]uint64: - fastpathTV.DecMapUintptrUint64V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]uint64: - v2, changed2 := fastpathTV.DecMapUintptrUint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]uintptr: - fastpathTV.DecMapUintptrUintptrV(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]uintptr: - v2, changed2 := fastpathTV.DecMapUintptrUintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]int: - fastpathTV.DecMapUintptrIntV(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]int: - v2, changed2 := fastpathTV.DecMapUintptrIntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]int8: - fastpathTV.DecMapUintptrInt8V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]int8: - v2, changed2 := fastpathTV.DecMapUintptrInt8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]int16: - fastpathTV.DecMapUintptrInt16V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]int16: - v2, changed2 := fastpathTV.DecMapUintptrInt16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]int32: - fastpathTV.DecMapUintptrInt32V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]int32: - v2, changed2 := fastpathTV.DecMapUintptrInt32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]int64: - fastpathTV.DecMapUintptrInt64V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]int64: - v2, changed2 := fastpathTV.DecMapUintptrInt64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]float32: - fastpathTV.DecMapUintptrFloat32V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]float32: - v2, changed2 := fastpathTV.DecMapUintptrFloat32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]float64: - fastpathTV.DecMapUintptrFloat64V(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]float64: - v2, changed2 := fastpathTV.DecMapUintptrFloat64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[uintptr]bool: - fastpathTV.DecMapUintptrBoolV(v, fastpathCheckNilFalse, false, d) - case *map[uintptr]bool: - v2, changed2 := fastpathTV.DecMapUintptrBoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []int: - fastpathTV.DecSliceIntV(v, fastpathCheckNilFalse, false, d) - case *[]int: - v2, changed2 := fastpathTV.DecSliceIntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]interface{}: - fastpathTV.DecMapIntIntfV(v, fastpathCheckNilFalse, false, d) - case *map[int]interface{}: - v2, changed2 := fastpathTV.DecMapIntIntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]string: - fastpathTV.DecMapIntStringV(v, fastpathCheckNilFalse, false, d) - case *map[int]string: - v2, changed2 := fastpathTV.DecMapIntStringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]uint: - fastpathTV.DecMapIntUintV(v, fastpathCheckNilFalse, false, d) - case *map[int]uint: - v2, changed2 := fastpathTV.DecMapIntUintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]uint8: - fastpathTV.DecMapIntUint8V(v, fastpathCheckNilFalse, false, d) - case *map[int]uint8: - v2, changed2 := fastpathTV.DecMapIntUint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]uint16: - fastpathTV.DecMapIntUint16V(v, fastpathCheckNilFalse, false, d) - case *map[int]uint16: - v2, changed2 := fastpathTV.DecMapIntUint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]uint32: - fastpathTV.DecMapIntUint32V(v, fastpathCheckNilFalse, false, d) - case *map[int]uint32: - v2, changed2 := fastpathTV.DecMapIntUint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]uint64: - fastpathTV.DecMapIntUint64V(v, fastpathCheckNilFalse, false, d) - case *map[int]uint64: - v2, changed2 := fastpathTV.DecMapIntUint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]uintptr: - fastpathTV.DecMapIntUintptrV(v, fastpathCheckNilFalse, false, d) - case *map[int]uintptr: - v2, changed2 := fastpathTV.DecMapIntUintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]int: - fastpathTV.DecMapIntIntV(v, fastpathCheckNilFalse, false, d) - case *map[int]int: - v2, changed2 := fastpathTV.DecMapIntIntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]int8: - fastpathTV.DecMapIntInt8V(v, fastpathCheckNilFalse, false, d) - case *map[int]int8: - v2, changed2 := fastpathTV.DecMapIntInt8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]int16: - fastpathTV.DecMapIntInt16V(v, fastpathCheckNilFalse, false, d) - case *map[int]int16: - v2, changed2 := fastpathTV.DecMapIntInt16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]int32: - fastpathTV.DecMapIntInt32V(v, fastpathCheckNilFalse, false, d) - case *map[int]int32: - v2, changed2 := fastpathTV.DecMapIntInt32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]int64: - fastpathTV.DecMapIntInt64V(v, fastpathCheckNilFalse, false, d) - case *map[int]int64: - v2, changed2 := fastpathTV.DecMapIntInt64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]float32: - fastpathTV.DecMapIntFloat32V(v, fastpathCheckNilFalse, false, d) - case *map[int]float32: - v2, changed2 := fastpathTV.DecMapIntFloat32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]float64: - fastpathTV.DecMapIntFloat64V(v, fastpathCheckNilFalse, false, d) - case *map[int]float64: - v2, changed2 := fastpathTV.DecMapIntFloat64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int]bool: - fastpathTV.DecMapIntBoolV(v, fastpathCheckNilFalse, false, d) - case *map[int]bool: - v2, changed2 := fastpathTV.DecMapIntBoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []int8: - fastpathTV.DecSliceInt8V(v, fastpathCheckNilFalse, false, d) - case *[]int8: - v2, changed2 := fastpathTV.DecSliceInt8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]interface{}: - fastpathTV.DecMapInt8IntfV(v, fastpathCheckNilFalse, false, d) - case *map[int8]interface{}: - v2, changed2 := fastpathTV.DecMapInt8IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]string: - fastpathTV.DecMapInt8StringV(v, fastpathCheckNilFalse, false, d) - case *map[int8]string: - v2, changed2 := fastpathTV.DecMapInt8StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]uint: - fastpathTV.DecMapInt8UintV(v, fastpathCheckNilFalse, false, d) - case *map[int8]uint: - v2, changed2 := fastpathTV.DecMapInt8UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]uint8: - fastpathTV.DecMapInt8Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[int8]uint8: - v2, changed2 := fastpathTV.DecMapInt8Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]uint16: - fastpathTV.DecMapInt8Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[int8]uint16: - v2, changed2 := fastpathTV.DecMapInt8Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]uint32: - fastpathTV.DecMapInt8Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[int8]uint32: - v2, changed2 := fastpathTV.DecMapInt8Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]uint64: - fastpathTV.DecMapInt8Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[int8]uint64: - v2, changed2 := fastpathTV.DecMapInt8Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]uintptr: - fastpathTV.DecMapInt8UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[int8]uintptr: - v2, changed2 := fastpathTV.DecMapInt8UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]int: - fastpathTV.DecMapInt8IntV(v, fastpathCheckNilFalse, false, d) - case *map[int8]int: - v2, changed2 := fastpathTV.DecMapInt8IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]int8: - fastpathTV.DecMapInt8Int8V(v, fastpathCheckNilFalse, false, d) - case *map[int8]int8: - v2, changed2 := fastpathTV.DecMapInt8Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]int16: - fastpathTV.DecMapInt8Int16V(v, fastpathCheckNilFalse, false, d) - case *map[int8]int16: - v2, changed2 := fastpathTV.DecMapInt8Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]int32: - fastpathTV.DecMapInt8Int32V(v, fastpathCheckNilFalse, false, d) - case *map[int8]int32: - v2, changed2 := fastpathTV.DecMapInt8Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]int64: - fastpathTV.DecMapInt8Int64V(v, fastpathCheckNilFalse, false, d) - case *map[int8]int64: - v2, changed2 := fastpathTV.DecMapInt8Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]float32: - fastpathTV.DecMapInt8Float32V(v, fastpathCheckNilFalse, false, d) - case *map[int8]float32: - v2, changed2 := fastpathTV.DecMapInt8Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]float64: - fastpathTV.DecMapInt8Float64V(v, fastpathCheckNilFalse, false, d) - case *map[int8]float64: - v2, changed2 := fastpathTV.DecMapInt8Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int8]bool: - fastpathTV.DecMapInt8BoolV(v, fastpathCheckNilFalse, false, d) - case *map[int8]bool: - v2, changed2 := fastpathTV.DecMapInt8BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []int16: - fastpathTV.DecSliceInt16V(v, fastpathCheckNilFalse, false, d) - case *[]int16: - v2, changed2 := fastpathTV.DecSliceInt16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]interface{}: - fastpathTV.DecMapInt16IntfV(v, fastpathCheckNilFalse, false, d) - case *map[int16]interface{}: - v2, changed2 := fastpathTV.DecMapInt16IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]string: - fastpathTV.DecMapInt16StringV(v, fastpathCheckNilFalse, false, d) - case *map[int16]string: - v2, changed2 := fastpathTV.DecMapInt16StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]uint: - fastpathTV.DecMapInt16UintV(v, fastpathCheckNilFalse, false, d) - case *map[int16]uint: - v2, changed2 := fastpathTV.DecMapInt16UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]uint8: - fastpathTV.DecMapInt16Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[int16]uint8: - v2, changed2 := fastpathTV.DecMapInt16Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]uint16: - fastpathTV.DecMapInt16Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[int16]uint16: - v2, changed2 := fastpathTV.DecMapInt16Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]uint32: - fastpathTV.DecMapInt16Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[int16]uint32: - v2, changed2 := fastpathTV.DecMapInt16Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]uint64: - fastpathTV.DecMapInt16Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[int16]uint64: - v2, changed2 := fastpathTV.DecMapInt16Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]uintptr: - fastpathTV.DecMapInt16UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[int16]uintptr: - v2, changed2 := fastpathTV.DecMapInt16UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]int: - fastpathTV.DecMapInt16IntV(v, fastpathCheckNilFalse, false, d) - case *map[int16]int: - v2, changed2 := fastpathTV.DecMapInt16IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]int8: - fastpathTV.DecMapInt16Int8V(v, fastpathCheckNilFalse, false, d) - case *map[int16]int8: - v2, changed2 := fastpathTV.DecMapInt16Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]int16: - fastpathTV.DecMapInt16Int16V(v, fastpathCheckNilFalse, false, d) - case *map[int16]int16: - v2, changed2 := fastpathTV.DecMapInt16Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]int32: - fastpathTV.DecMapInt16Int32V(v, fastpathCheckNilFalse, false, d) - case *map[int16]int32: - v2, changed2 := fastpathTV.DecMapInt16Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]int64: - fastpathTV.DecMapInt16Int64V(v, fastpathCheckNilFalse, false, d) - case *map[int16]int64: - v2, changed2 := fastpathTV.DecMapInt16Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]float32: - fastpathTV.DecMapInt16Float32V(v, fastpathCheckNilFalse, false, d) - case *map[int16]float32: - v2, changed2 := fastpathTV.DecMapInt16Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]float64: - fastpathTV.DecMapInt16Float64V(v, fastpathCheckNilFalse, false, d) - case *map[int16]float64: - v2, changed2 := fastpathTV.DecMapInt16Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int16]bool: - fastpathTV.DecMapInt16BoolV(v, fastpathCheckNilFalse, false, d) - case *map[int16]bool: - v2, changed2 := fastpathTV.DecMapInt16BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []int32: - fastpathTV.DecSliceInt32V(v, fastpathCheckNilFalse, false, d) - case *[]int32: - v2, changed2 := fastpathTV.DecSliceInt32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]interface{}: - fastpathTV.DecMapInt32IntfV(v, fastpathCheckNilFalse, false, d) - case *map[int32]interface{}: - v2, changed2 := fastpathTV.DecMapInt32IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]string: - fastpathTV.DecMapInt32StringV(v, fastpathCheckNilFalse, false, d) - case *map[int32]string: - v2, changed2 := fastpathTV.DecMapInt32StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]uint: - fastpathTV.DecMapInt32UintV(v, fastpathCheckNilFalse, false, d) - case *map[int32]uint: - v2, changed2 := fastpathTV.DecMapInt32UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]uint8: - fastpathTV.DecMapInt32Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[int32]uint8: - v2, changed2 := fastpathTV.DecMapInt32Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]uint16: - fastpathTV.DecMapInt32Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[int32]uint16: - v2, changed2 := fastpathTV.DecMapInt32Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]uint32: - fastpathTV.DecMapInt32Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[int32]uint32: - v2, changed2 := fastpathTV.DecMapInt32Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]uint64: - fastpathTV.DecMapInt32Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[int32]uint64: - v2, changed2 := fastpathTV.DecMapInt32Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]uintptr: - fastpathTV.DecMapInt32UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[int32]uintptr: - v2, changed2 := fastpathTV.DecMapInt32UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]int: - fastpathTV.DecMapInt32IntV(v, fastpathCheckNilFalse, false, d) - case *map[int32]int: - v2, changed2 := fastpathTV.DecMapInt32IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]int8: - fastpathTV.DecMapInt32Int8V(v, fastpathCheckNilFalse, false, d) - case *map[int32]int8: - v2, changed2 := fastpathTV.DecMapInt32Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]int16: - fastpathTV.DecMapInt32Int16V(v, fastpathCheckNilFalse, false, d) - case *map[int32]int16: - v2, changed2 := fastpathTV.DecMapInt32Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]int32: - fastpathTV.DecMapInt32Int32V(v, fastpathCheckNilFalse, false, d) - case *map[int32]int32: - v2, changed2 := fastpathTV.DecMapInt32Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]int64: - fastpathTV.DecMapInt32Int64V(v, fastpathCheckNilFalse, false, d) - case *map[int32]int64: - v2, changed2 := fastpathTV.DecMapInt32Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]float32: - fastpathTV.DecMapInt32Float32V(v, fastpathCheckNilFalse, false, d) - case *map[int32]float32: - v2, changed2 := fastpathTV.DecMapInt32Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]float64: - fastpathTV.DecMapInt32Float64V(v, fastpathCheckNilFalse, false, d) - case *map[int32]float64: - v2, changed2 := fastpathTV.DecMapInt32Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int32]bool: - fastpathTV.DecMapInt32BoolV(v, fastpathCheckNilFalse, false, d) - case *map[int32]bool: - v2, changed2 := fastpathTV.DecMapInt32BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []int64: - fastpathTV.DecSliceInt64V(v, fastpathCheckNilFalse, false, d) - case *[]int64: - v2, changed2 := fastpathTV.DecSliceInt64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]interface{}: - fastpathTV.DecMapInt64IntfV(v, fastpathCheckNilFalse, false, d) - case *map[int64]interface{}: - v2, changed2 := fastpathTV.DecMapInt64IntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]string: - fastpathTV.DecMapInt64StringV(v, fastpathCheckNilFalse, false, d) - case *map[int64]string: - v2, changed2 := fastpathTV.DecMapInt64StringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]uint: - fastpathTV.DecMapInt64UintV(v, fastpathCheckNilFalse, false, d) - case *map[int64]uint: - v2, changed2 := fastpathTV.DecMapInt64UintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]uint8: - fastpathTV.DecMapInt64Uint8V(v, fastpathCheckNilFalse, false, d) - case *map[int64]uint8: - v2, changed2 := fastpathTV.DecMapInt64Uint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]uint16: - fastpathTV.DecMapInt64Uint16V(v, fastpathCheckNilFalse, false, d) - case *map[int64]uint16: - v2, changed2 := fastpathTV.DecMapInt64Uint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]uint32: - fastpathTV.DecMapInt64Uint32V(v, fastpathCheckNilFalse, false, d) - case *map[int64]uint32: - v2, changed2 := fastpathTV.DecMapInt64Uint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]uint64: - fastpathTV.DecMapInt64Uint64V(v, fastpathCheckNilFalse, false, d) - case *map[int64]uint64: - v2, changed2 := fastpathTV.DecMapInt64Uint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]uintptr: - fastpathTV.DecMapInt64UintptrV(v, fastpathCheckNilFalse, false, d) - case *map[int64]uintptr: - v2, changed2 := fastpathTV.DecMapInt64UintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]int: - fastpathTV.DecMapInt64IntV(v, fastpathCheckNilFalse, false, d) - case *map[int64]int: - v2, changed2 := fastpathTV.DecMapInt64IntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]int8: - fastpathTV.DecMapInt64Int8V(v, fastpathCheckNilFalse, false, d) - case *map[int64]int8: - v2, changed2 := fastpathTV.DecMapInt64Int8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]int16: - fastpathTV.DecMapInt64Int16V(v, fastpathCheckNilFalse, false, d) - case *map[int64]int16: - v2, changed2 := fastpathTV.DecMapInt64Int16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]int32: - fastpathTV.DecMapInt64Int32V(v, fastpathCheckNilFalse, false, d) - case *map[int64]int32: - v2, changed2 := fastpathTV.DecMapInt64Int32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]int64: - fastpathTV.DecMapInt64Int64V(v, fastpathCheckNilFalse, false, d) - case *map[int64]int64: - v2, changed2 := fastpathTV.DecMapInt64Int64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]float32: - fastpathTV.DecMapInt64Float32V(v, fastpathCheckNilFalse, false, d) - case *map[int64]float32: - v2, changed2 := fastpathTV.DecMapInt64Float32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]float64: - fastpathTV.DecMapInt64Float64V(v, fastpathCheckNilFalse, false, d) - case *map[int64]float64: - v2, changed2 := fastpathTV.DecMapInt64Float64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[int64]bool: - fastpathTV.DecMapInt64BoolV(v, fastpathCheckNilFalse, false, d) - case *map[int64]bool: - v2, changed2 := fastpathTV.DecMapInt64BoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case []bool: - fastpathTV.DecSliceBoolV(v, fastpathCheckNilFalse, false, d) - case *[]bool: - v2, changed2 := fastpathTV.DecSliceBoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]interface{}: - fastpathTV.DecMapBoolIntfV(v, fastpathCheckNilFalse, false, d) - case *map[bool]interface{}: - v2, changed2 := fastpathTV.DecMapBoolIntfV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]string: - fastpathTV.DecMapBoolStringV(v, fastpathCheckNilFalse, false, d) - case *map[bool]string: - v2, changed2 := fastpathTV.DecMapBoolStringV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]uint: - fastpathTV.DecMapBoolUintV(v, fastpathCheckNilFalse, false, d) - case *map[bool]uint: - v2, changed2 := fastpathTV.DecMapBoolUintV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]uint8: - fastpathTV.DecMapBoolUint8V(v, fastpathCheckNilFalse, false, d) - case *map[bool]uint8: - v2, changed2 := fastpathTV.DecMapBoolUint8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]uint16: - fastpathTV.DecMapBoolUint16V(v, fastpathCheckNilFalse, false, d) - case *map[bool]uint16: - v2, changed2 := fastpathTV.DecMapBoolUint16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]uint32: - fastpathTV.DecMapBoolUint32V(v, fastpathCheckNilFalse, false, d) - case *map[bool]uint32: - v2, changed2 := fastpathTV.DecMapBoolUint32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]uint64: - fastpathTV.DecMapBoolUint64V(v, fastpathCheckNilFalse, false, d) - case *map[bool]uint64: - v2, changed2 := fastpathTV.DecMapBoolUint64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]uintptr: - fastpathTV.DecMapBoolUintptrV(v, fastpathCheckNilFalse, false, d) - case *map[bool]uintptr: - v2, changed2 := fastpathTV.DecMapBoolUintptrV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]int: - fastpathTV.DecMapBoolIntV(v, fastpathCheckNilFalse, false, d) - case *map[bool]int: - v2, changed2 := fastpathTV.DecMapBoolIntV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]int8: - fastpathTV.DecMapBoolInt8V(v, fastpathCheckNilFalse, false, d) - case *map[bool]int8: - v2, changed2 := fastpathTV.DecMapBoolInt8V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]int16: - fastpathTV.DecMapBoolInt16V(v, fastpathCheckNilFalse, false, d) - case *map[bool]int16: - v2, changed2 := fastpathTV.DecMapBoolInt16V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]int32: - fastpathTV.DecMapBoolInt32V(v, fastpathCheckNilFalse, false, d) - case *map[bool]int32: - v2, changed2 := fastpathTV.DecMapBoolInt32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]int64: - fastpathTV.DecMapBoolInt64V(v, fastpathCheckNilFalse, false, d) - case *map[bool]int64: - v2, changed2 := fastpathTV.DecMapBoolInt64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]float32: - fastpathTV.DecMapBoolFloat32V(v, fastpathCheckNilFalse, false, d) - case *map[bool]float32: - v2, changed2 := fastpathTV.DecMapBoolFloat32V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]float64: - fastpathTV.DecMapBoolFloat64V(v, fastpathCheckNilFalse, false, d) - case *map[bool]float64: - v2, changed2 := fastpathTV.DecMapBoolFloat64V(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - case map[bool]bool: - fastpathTV.DecMapBoolBoolV(v, fastpathCheckNilFalse, false, d) - case *map[bool]bool: - v2, changed2 := fastpathTV.DecMapBoolBoolV(*v, fastpathCheckNilFalse, true, d) - if changed2 { - *v = v2 - } - - default: - _ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release) - return false - } - return true -} - -// -- -- fast path functions - -func (f *decFnInfo) fastpathDecSliceIntfR(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]interface{}) - v, changed := fastpathTV.DecSliceIntfV(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]interface{}) - fastpathTV.DecSliceIntfV(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceIntfX(vp *[]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecSliceIntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceIntfV(v []interface{}, checkNil bool, canChange bool, d *Decoder) (_ []interface{}, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []interface{}{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 16) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]interface{}, xlen) - } - } else { - v = make([]interface{}, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - d.decode(&v[j]) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, nil) - slh.ElemContainerState(j) - d.decode(&v[j]) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []interface{}{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]interface{}, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, nil) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - d.decode(&v[j]) - - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceStringR(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]string) - v, changed := fastpathTV.DecSliceStringV(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]string) - fastpathTV.DecSliceStringV(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceStringX(vp *[]string, checkNil bool, d *Decoder) { - v, changed := f.DecSliceStringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceStringV(v []string, checkNil bool, canChange bool, d *Decoder) (_ []string, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []string{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 16) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]string, xlen) - } - } else { - v = make([]string, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = dd.DecodeString() - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, "") - slh.ElemContainerState(j) - v[j] = dd.DecodeString() - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []string{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]string, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, "") - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = dd.DecodeString() - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceFloat32R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]float32) - v, changed := fastpathTV.DecSliceFloat32V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]float32) - fastpathTV.DecSliceFloat32V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceFloat32X(vp *[]float32, checkNil bool, d *Decoder) { - v, changed := f.DecSliceFloat32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceFloat32V(v []float32, checkNil bool, canChange bool, d *Decoder) (_ []float32, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []float32{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]float32, xlen) - } - } else { - v = make([]float32, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = float32(dd.DecodeFloat(true)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = float32(dd.DecodeFloat(true)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []float32{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]float32, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = float32(dd.DecodeFloat(true)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceFloat64R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]float64) - v, changed := fastpathTV.DecSliceFloat64V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]float64) - fastpathTV.DecSliceFloat64V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceFloat64X(vp *[]float64, checkNil bool, d *Decoder) { - v, changed := f.DecSliceFloat64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceFloat64V(v []float64, checkNil bool, canChange bool, d *Decoder) (_ []float64, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []float64{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]float64, xlen) - } - } else { - v = make([]float64, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = dd.DecodeFloat(false) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = dd.DecodeFloat(false) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []float64{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]float64, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = dd.DecodeFloat(false) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceUintR(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]uint) - v, changed := fastpathTV.DecSliceUintV(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]uint) - fastpathTV.DecSliceUintV(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceUintX(vp *[]uint, checkNil bool, d *Decoder) { - v, changed := f.DecSliceUintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceUintV(v []uint, checkNil bool, canChange bool, d *Decoder) (_ []uint, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []uint{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]uint, xlen) - } - } else { - v = make([]uint, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = uint(dd.DecodeUint(uintBitsize)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = uint(dd.DecodeUint(uintBitsize)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []uint{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]uint, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = uint(dd.DecodeUint(uintBitsize)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceUint16R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]uint16) - v, changed := fastpathTV.DecSliceUint16V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]uint16) - fastpathTV.DecSliceUint16V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceUint16X(vp *[]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecSliceUint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceUint16V(v []uint16, checkNil bool, canChange bool, d *Decoder) (_ []uint16, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []uint16{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 2) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]uint16, xlen) - } - } else { - v = make([]uint16, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = uint16(dd.DecodeUint(16)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = uint16(dd.DecodeUint(16)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []uint16{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]uint16, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = uint16(dd.DecodeUint(16)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceUint32R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]uint32) - v, changed := fastpathTV.DecSliceUint32V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]uint32) - fastpathTV.DecSliceUint32V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceUint32X(vp *[]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecSliceUint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceUint32V(v []uint32, checkNil bool, canChange bool, d *Decoder) (_ []uint32, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []uint32{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]uint32, xlen) - } - } else { - v = make([]uint32, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = uint32(dd.DecodeUint(32)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = uint32(dd.DecodeUint(32)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []uint32{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]uint32, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = uint32(dd.DecodeUint(32)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceUint64R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]uint64) - v, changed := fastpathTV.DecSliceUint64V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]uint64) - fastpathTV.DecSliceUint64V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceUint64X(vp *[]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecSliceUint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceUint64V(v []uint64, checkNil bool, canChange bool, d *Decoder) (_ []uint64, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []uint64{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]uint64, xlen) - } - } else { - v = make([]uint64, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = dd.DecodeUint(64) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = dd.DecodeUint(64) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []uint64{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]uint64, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = dd.DecodeUint(64) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceUintptrR(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]uintptr) - v, changed := fastpathTV.DecSliceUintptrV(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]uintptr) - fastpathTV.DecSliceUintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceUintptrX(vp *[]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecSliceUintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceUintptrV(v []uintptr, checkNil bool, canChange bool, d *Decoder) (_ []uintptr, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []uintptr{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]uintptr, xlen) - } - } else { - v = make([]uintptr, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = uintptr(dd.DecodeUint(uintBitsize)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = uintptr(dd.DecodeUint(uintBitsize)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []uintptr{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]uintptr, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = uintptr(dd.DecodeUint(uintBitsize)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceIntR(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]int) - v, changed := fastpathTV.DecSliceIntV(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]int) - fastpathTV.DecSliceIntV(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceIntX(vp *[]int, checkNil bool, d *Decoder) { - v, changed := f.DecSliceIntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceIntV(v []int, checkNil bool, canChange bool, d *Decoder) (_ []int, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []int{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]int, xlen) - } - } else { - v = make([]int, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = int(dd.DecodeInt(intBitsize)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = int(dd.DecodeInt(intBitsize)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []int{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]int, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = int(dd.DecodeInt(intBitsize)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceInt8R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]int8) - v, changed := fastpathTV.DecSliceInt8V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]int8) - fastpathTV.DecSliceInt8V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceInt8X(vp *[]int8, checkNil bool, d *Decoder) { - v, changed := f.DecSliceInt8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceInt8V(v []int8, checkNil bool, canChange bool, d *Decoder) (_ []int8, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []int8{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 1) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]int8, xlen) - } - } else { - v = make([]int8, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = int8(dd.DecodeInt(8)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = int8(dd.DecodeInt(8)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []int8{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]int8, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = int8(dd.DecodeInt(8)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceInt16R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]int16) - v, changed := fastpathTV.DecSliceInt16V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]int16) - fastpathTV.DecSliceInt16V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceInt16X(vp *[]int16, checkNil bool, d *Decoder) { - v, changed := f.DecSliceInt16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceInt16V(v []int16, checkNil bool, canChange bool, d *Decoder) (_ []int16, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []int16{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 2) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]int16, xlen) - } - } else { - v = make([]int16, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = int16(dd.DecodeInt(16)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = int16(dd.DecodeInt(16)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []int16{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]int16, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = int16(dd.DecodeInt(16)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceInt32R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]int32) - v, changed := fastpathTV.DecSliceInt32V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]int32) - fastpathTV.DecSliceInt32V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceInt32X(vp *[]int32, checkNil bool, d *Decoder) { - v, changed := f.DecSliceInt32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceInt32V(v []int32, checkNil bool, canChange bool, d *Decoder) (_ []int32, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []int32{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]int32, xlen) - } - } else { - v = make([]int32, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = int32(dd.DecodeInt(32)) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = int32(dd.DecodeInt(32)) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []int32{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]int32, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = int32(dd.DecodeInt(32)) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceInt64R(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]int64) - v, changed := fastpathTV.DecSliceInt64V(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]int64) - fastpathTV.DecSliceInt64V(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceInt64X(vp *[]int64, checkNil bool, d *Decoder) { - v, changed := f.DecSliceInt64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceInt64V(v []int64, checkNil bool, canChange bool, d *Decoder) (_ []int64, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []int64{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]int64, xlen) - } - } else { - v = make([]int64, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = dd.DecodeInt(64) - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, 0) - slh.ElemContainerState(j) - v[j] = dd.DecodeInt(64) - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []int64{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]int64, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, 0) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = dd.DecodeInt(64) - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecSliceBoolR(rv reflect.Value) { - array := f.seq == seqTypeArray - if !array && rv.CanAddr() { - vp := rv.Addr().Interface().(*[]bool) - v, changed := fastpathTV.DecSliceBoolV(*vp, fastpathCheckNilFalse, !array, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().([]bool) - fastpathTV.DecSliceBoolV(v, fastpathCheckNilFalse, false, f.d) - } -} - -func (f fastpathT) DecSliceBoolX(vp *[]bool, checkNil bool, d *Decoder) { - v, changed := f.DecSliceBoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecSliceBoolV(v []bool, checkNil bool, canChange bool, d *Decoder) (_ []bool, changed bool) { - dd := d.d - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - slh, containerLenS := d.decSliceHelperStart() - if containerLenS == 0 { - if canChange { - if v == nil { - v = []bool{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - - if containerLenS > 0 { - x2read := containerLenS - var xtrunc bool - if containerLenS > cap(v) { - if canChange { - var xlen int - xlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 1) - if xtrunc { - if xlen <= cap(v) { - v = v[:xlen] - } else { - v = make([]bool, xlen) - } - } else { - v = make([]bool, xlen) - } - changed = true - } else { - d.arrayCannotExpand(len(v), containerLenS) - } - x2read = len(v) - } else if containerLenS != len(v) { - if canChange { - v = v[:containerLenS] - changed = true - } - } - j := 0 - for ; j < x2read; j++ { - slh.ElemContainerState(j) - v[j] = dd.DecodeBool() - } - if xtrunc { - for ; j < containerLenS; j++ { - v = append(v, false) - slh.ElemContainerState(j) - v[j] = dd.DecodeBool() - } - } else if !canChange { - for ; j < containerLenS; j++ { - slh.ElemContainerState(j) - d.swallow() - } - } - } else { - breakFound := dd.CheckBreak() - if breakFound { - if canChange { - if v == nil { - v = []bool{} - } else if len(v) != 0 { - v = v[:0] - } - changed = true - } - slh.End() - return v, changed - } - if cap(v) == 0 { - v = make([]bool, 1, 4) - changed = true - } - j := 0 - for ; !breakFound; j++ { - if j >= len(v) { - if canChange { - v = append(v, false) - changed = true - } else { - d.arrayCannotExpand(len(v), j+1) - } - } - slh.ElemContainerState(j) - if j < len(v) { - v[j] = dd.DecodeBool() - } else { - d.swallow() - } - breakFound = dd.CheckBreak() - } - if canChange && j < len(v) { - v = v[:j] - changed = true - } - } - slh.End() - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfIntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]interface{}) - v, changed := fastpathTV.DecMapIntfIntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]interface{}) - fastpathTV.DecMapIntfIntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfIntfX(vp *map[interface{}]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfIntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfIntfV(v map[interface{}]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32) - v = make(map[interface{}]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk interface{} - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfStringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]string) - v, changed := fastpathTV.DecMapIntfStringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]string) - fastpathTV.DecMapIntfStringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfStringX(vp *map[interface{}]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfStringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfStringV(v map[interface{}]string, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32) - v = make(map[interface{}]string, xlen) - changed = true - } - - var mk interface{} - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfUintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]uint) - v, changed := fastpathTV.DecMapIntfUintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]uint) - fastpathTV.DecMapIntfUintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfUintX(vp *map[interface{}]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfUintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfUintV(v map[interface{}]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[interface{}]uint, xlen) - changed = true - } - - var mk interface{} - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfUint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]uint8) - v, changed := fastpathTV.DecMapIntfUint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]uint8) - fastpathTV.DecMapIntfUint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfUint8X(vp *map[interface{}]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfUint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfUint8V(v map[interface{}]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[interface{}]uint8, xlen) - changed = true - } - - var mk interface{} - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfUint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]uint16) - v, changed := fastpathTV.DecMapIntfUint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]uint16) - fastpathTV.DecMapIntfUint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfUint16X(vp *map[interface{}]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfUint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfUint16V(v map[interface{}]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18) - v = make(map[interface{}]uint16, xlen) - changed = true - } - - var mk interface{} - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfUint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]uint32) - v, changed := fastpathTV.DecMapIntfUint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]uint32) - fastpathTV.DecMapIntfUint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfUint32X(vp *map[interface{}]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfUint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfUint32V(v map[interface{}]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[interface{}]uint32, xlen) - changed = true - } - - var mk interface{} - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfUint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]uint64) - v, changed := fastpathTV.DecMapIntfUint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]uint64) - fastpathTV.DecMapIntfUint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfUint64X(vp *map[interface{}]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfUint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfUint64V(v map[interface{}]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[interface{}]uint64, xlen) - changed = true - } - - var mk interface{} - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfUintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]uintptr) - v, changed := fastpathTV.DecMapIntfUintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]uintptr) - fastpathTV.DecMapIntfUintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfUintptrX(vp *map[interface{}]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfUintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfUintptrV(v map[interface{}]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[interface{}]uintptr, xlen) - changed = true - } - - var mk interface{} - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfIntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]int) - v, changed := fastpathTV.DecMapIntfIntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]int) - fastpathTV.DecMapIntfIntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfIntX(vp *map[interface{}]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfIntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfIntV(v map[interface{}]int, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[interface{}]int, xlen) - changed = true - } - - var mk interface{} - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfInt8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]int8) - v, changed := fastpathTV.DecMapIntfInt8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]int8) - fastpathTV.DecMapIntfInt8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfInt8X(vp *map[interface{}]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfInt8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfInt8V(v map[interface{}]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[interface{}]int8, xlen) - changed = true - } - - var mk interface{} - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfInt16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]int16) - v, changed := fastpathTV.DecMapIntfInt16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]int16) - fastpathTV.DecMapIntfInt16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfInt16X(vp *map[interface{}]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfInt16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfInt16V(v map[interface{}]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18) - v = make(map[interface{}]int16, xlen) - changed = true - } - - var mk interface{} - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfInt32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]int32) - v, changed := fastpathTV.DecMapIntfInt32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]int32) - fastpathTV.DecMapIntfInt32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfInt32X(vp *map[interface{}]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfInt32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfInt32V(v map[interface{}]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[interface{}]int32, xlen) - changed = true - } - - var mk interface{} - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfInt64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]int64) - v, changed := fastpathTV.DecMapIntfInt64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]int64) - fastpathTV.DecMapIntfInt64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfInt64X(vp *map[interface{}]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfInt64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfInt64V(v map[interface{}]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[interface{}]int64, xlen) - changed = true - } - - var mk interface{} - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfFloat32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]float32) - v, changed := fastpathTV.DecMapIntfFloat32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]float32) - fastpathTV.DecMapIntfFloat32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfFloat32X(vp *map[interface{}]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfFloat32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfFloat32V(v map[interface{}]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[interface{}]float32, xlen) - changed = true - } - - var mk interface{} - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfFloat64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]float64) - v, changed := fastpathTV.DecMapIntfFloat64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]float64) - fastpathTV.DecMapIntfFloat64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfFloat64X(vp *map[interface{}]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfFloat64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfFloat64V(v map[interface{}]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[interface{}]float64, xlen) - changed = true - } - - var mk interface{} - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntfBoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[interface{}]bool) - v, changed := fastpathTV.DecMapIntfBoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[interface{}]bool) - fastpathTV.DecMapIntfBoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntfBoolX(vp *map[interface{}]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntfBoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntfBoolV(v map[interface{}]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[interface{}]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[interface{}]bool, xlen) - changed = true - } - - var mk interface{} - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = nil - d.decode(&mk) - if bv, bok := mk.([]byte); bok { - mk = d.string(bv) - } - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringIntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]interface{}) - v, changed := fastpathTV.DecMapStringIntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]interface{}) - fastpathTV.DecMapStringIntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringIntfX(vp *map[string]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringIntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringIntfV(v map[string]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[string]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32) - v = make(map[string]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk string - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringStringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]string) - v, changed := fastpathTV.DecMapStringStringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]string) - fastpathTV.DecMapStringStringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringStringX(vp *map[string]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringStringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringStringV(v map[string]string, checkNil bool, canChange bool, - d *Decoder) (_ map[string]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32) - v = make(map[string]string, xlen) - changed = true - } - - var mk string - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringUintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]uint) - v, changed := fastpathTV.DecMapStringUintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]uint) - fastpathTV.DecMapStringUintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringUintX(vp *map[string]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringUintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringUintV(v map[string]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[string]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[string]uint, xlen) - changed = true - } - - var mk string - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringUint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]uint8) - v, changed := fastpathTV.DecMapStringUint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]uint8) - fastpathTV.DecMapStringUint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringUint8X(vp *map[string]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringUint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringUint8V(v map[string]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[string]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[string]uint8, xlen) - changed = true - } - - var mk string - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringUint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]uint16) - v, changed := fastpathTV.DecMapStringUint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]uint16) - fastpathTV.DecMapStringUint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringUint16X(vp *map[string]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringUint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringUint16V(v map[string]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[string]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18) - v = make(map[string]uint16, xlen) - changed = true - } - - var mk string - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringUint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]uint32) - v, changed := fastpathTV.DecMapStringUint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]uint32) - fastpathTV.DecMapStringUint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringUint32X(vp *map[string]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringUint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringUint32V(v map[string]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[string]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[string]uint32, xlen) - changed = true - } - - var mk string - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringUint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]uint64) - v, changed := fastpathTV.DecMapStringUint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]uint64) - fastpathTV.DecMapStringUint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringUint64X(vp *map[string]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringUint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringUint64V(v map[string]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[string]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[string]uint64, xlen) - changed = true - } - - var mk string - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringUintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]uintptr) - v, changed := fastpathTV.DecMapStringUintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]uintptr) - fastpathTV.DecMapStringUintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringUintptrX(vp *map[string]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringUintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringUintptrV(v map[string]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[string]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[string]uintptr, xlen) - changed = true - } - - var mk string - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringIntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]int) - v, changed := fastpathTV.DecMapStringIntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]int) - fastpathTV.DecMapStringIntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringIntX(vp *map[string]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringIntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringIntV(v map[string]int, checkNil bool, canChange bool, - d *Decoder) (_ map[string]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[string]int, xlen) - changed = true - } - - var mk string - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringInt8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]int8) - v, changed := fastpathTV.DecMapStringInt8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]int8) - fastpathTV.DecMapStringInt8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringInt8X(vp *map[string]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringInt8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringInt8V(v map[string]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[string]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[string]int8, xlen) - changed = true - } - - var mk string - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringInt16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]int16) - v, changed := fastpathTV.DecMapStringInt16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]int16) - fastpathTV.DecMapStringInt16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringInt16X(vp *map[string]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringInt16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringInt16V(v map[string]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[string]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18) - v = make(map[string]int16, xlen) - changed = true - } - - var mk string - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringInt32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]int32) - v, changed := fastpathTV.DecMapStringInt32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]int32) - fastpathTV.DecMapStringInt32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringInt32X(vp *map[string]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringInt32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringInt32V(v map[string]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[string]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[string]int32, xlen) - changed = true - } - - var mk string - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringInt64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]int64) - v, changed := fastpathTV.DecMapStringInt64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]int64) - fastpathTV.DecMapStringInt64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringInt64X(vp *map[string]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringInt64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringInt64V(v map[string]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[string]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[string]int64, xlen) - changed = true - } - - var mk string - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringFloat32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]float32) - v, changed := fastpathTV.DecMapStringFloat32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]float32) - fastpathTV.DecMapStringFloat32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringFloat32X(vp *map[string]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringFloat32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringFloat32V(v map[string]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[string]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[string]float32, xlen) - changed = true - } - - var mk string - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringFloat64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]float64) - v, changed := fastpathTV.DecMapStringFloat64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]float64) - fastpathTV.DecMapStringFloat64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringFloat64X(vp *map[string]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringFloat64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringFloat64V(v map[string]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[string]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[string]float64, xlen) - changed = true - } - - var mk string - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapStringBoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[string]bool) - v, changed := fastpathTV.DecMapStringBoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[string]bool) - fastpathTV.DecMapStringBoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapStringBoolX(vp *map[string]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapStringBoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapStringBoolV(v map[string]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[string]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[string]bool, xlen) - changed = true - } - - var mk string - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeString() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]interface{}) - v, changed := fastpathTV.DecMapFloat32IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]interface{}) - fastpathTV.DecMapFloat32IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32IntfX(vp *map[float32]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32IntfV(v map[float32]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[float32]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk float32 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]string) - v, changed := fastpathTV.DecMapFloat32StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]string) - fastpathTV.DecMapFloat32StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32StringX(vp *map[float32]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32StringV(v map[float32]string, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[float32]string, xlen) - changed = true - } - - var mk float32 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]uint) - v, changed := fastpathTV.DecMapFloat32UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]uint) - fastpathTV.DecMapFloat32UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32UintX(vp *map[float32]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32UintV(v map[float32]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float32]uint, xlen) - changed = true - } - - var mk float32 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]uint8) - v, changed := fastpathTV.DecMapFloat32Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]uint8) - fastpathTV.DecMapFloat32Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Uint8X(vp *map[float32]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Uint8V(v map[float32]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[float32]uint8, xlen) - changed = true - } - - var mk float32 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]uint16) - v, changed := fastpathTV.DecMapFloat32Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]uint16) - fastpathTV.DecMapFloat32Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Uint16X(vp *map[float32]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Uint16V(v map[float32]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[float32]uint16, xlen) - changed = true - } - - var mk float32 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]uint32) - v, changed := fastpathTV.DecMapFloat32Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]uint32) - fastpathTV.DecMapFloat32Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Uint32X(vp *map[float32]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Uint32V(v map[float32]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[float32]uint32, xlen) - changed = true - } - - var mk float32 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]uint64) - v, changed := fastpathTV.DecMapFloat32Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]uint64) - fastpathTV.DecMapFloat32Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Uint64X(vp *map[float32]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Uint64V(v map[float32]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float32]uint64, xlen) - changed = true - } - - var mk float32 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]uintptr) - v, changed := fastpathTV.DecMapFloat32UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]uintptr) - fastpathTV.DecMapFloat32UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32UintptrX(vp *map[float32]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32UintptrV(v map[float32]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float32]uintptr, xlen) - changed = true - } - - var mk float32 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]int) - v, changed := fastpathTV.DecMapFloat32IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]int) - fastpathTV.DecMapFloat32IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32IntX(vp *map[float32]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32IntV(v map[float32]int, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float32]int, xlen) - changed = true - } - - var mk float32 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]int8) - v, changed := fastpathTV.DecMapFloat32Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]int8) - fastpathTV.DecMapFloat32Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Int8X(vp *map[float32]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Int8V(v map[float32]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[float32]int8, xlen) - changed = true - } - - var mk float32 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]int16) - v, changed := fastpathTV.DecMapFloat32Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]int16) - fastpathTV.DecMapFloat32Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Int16X(vp *map[float32]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Int16V(v map[float32]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[float32]int16, xlen) - changed = true - } - - var mk float32 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]int32) - v, changed := fastpathTV.DecMapFloat32Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]int32) - fastpathTV.DecMapFloat32Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Int32X(vp *map[float32]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Int32V(v map[float32]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[float32]int32, xlen) - changed = true - } - - var mk float32 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]int64) - v, changed := fastpathTV.DecMapFloat32Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]int64) - fastpathTV.DecMapFloat32Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Int64X(vp *map[float32]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Int64V(v map[float32]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float32]int64, xlen) - changed = true - } - - var mk float32 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]float32) - v, changed := fastpathTV.DecMapFloat32Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]float32) - fastpathTV.DecMapFloat32Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Float32X(vp *map[float32]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Float32V(v map[float32]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[float32]float32, xlen) - changed = true - } - - var mk float32 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]float64) - v, changed := fastpathTV.DecMapFloat32Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]float64) - fastpathTV.DecMapFloat32Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32Float64X(vp *map[float32]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32Float64V(v map[float32]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float32]float64, xlen) - changed = true - } - - var mk float32 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat32BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float32]bool) - v, changed := fastpathTV.DecMapFloat32BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float32]bool) - fastpathTV.DecMapFloat32BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat32BoolX(vp *map[float32]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat32BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat32BoolV(v map[float32]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[float32]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[float32]bool, xlen) - changed = true - } - - var mk float32 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = float32(dd.DecodeFloat(true)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]interface{}) - v, changed := fastpathTV.DecMapFloat64IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]interface{}) - fastpathTV.DecMapFloat64IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64IntfX(vp *map[float64]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64IntfV(v map[float64]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[float64]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk float64 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]string) - v, changed := fastpathTV.DecMapFloat64StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]string) - fastpathTV.DecMapFloat64StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64StringX(vp *map[float64]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64StringV(v map[float64]string, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[float64]string, xlen) - changed = true - } - - var mk float64 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]uint) - v, changed := fastpathTV.DecMapFloat64UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]uint) - fastpathTV.DecMapFloat64UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64UintX(vp *map[float64]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64UintV(v map[float64]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[float64]uint, xlen) - changed = true - } - - var mk float64 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]uint8) - v, changed := fastpathTV.DecMapFloat64Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]uint8) - fastpathTV.DecMapFloat64Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Uint8X(vp *map[float64]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Uint8V(v map[float64]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[float64]uint8, xlen) - changed = true - } - - var mk float64 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]uint16) - v, changed := fastpathTV.DecMapFloat64Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]uint16) - fastpathTV.DecMapFloat64Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Uint16X(vp *map[float64]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Uint16V(v map[float64]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[float64]uint16, xlen) - changed = true - } - - var mk float64 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]uint32) - v, changed := fastpathTV.DecMapFloat64Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]uint32) - fastpathTV.DecMapFloat64Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Uint32X(vp *map[float64]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Uint32V(v map[float64]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float64]uint32, xlen) - changed = true - } - - var mk float64 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]uint64) - v, changed := fastpathTV.DecMapFloat64Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]uint64) - fastpathTV.DecMapFloat64Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Uint64X(vp *map[float64]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Uint64V(v map[float64]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[float64]uint64, xlen) - changed = true - } - - var mk float64 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]uintptr) - v, changed := fastpathTV.DecMapFloat64UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]uintptr) - fastpathTV.DecMapFloat64UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64UintptrX(vp *map[float64]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64UintptrV(v map[float64]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[float64]uintptr, xlen) - changed = true - } - - var mk float64 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]int) - v, changed := fastpathTV.DecMapFloat64IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]int) - fastpathTV.DecMapFloat64IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64IntX(vp *map[float64]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64IntV(v map[float64]int, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[float64]int, xlen) - changed = true - } - - var mk float64 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]int8) - v, changed := fastpathTV.DecMapFloat64Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]int8) - fastpathTV.DecMapFloat64Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Int8X(vp *map[float64]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Int8V(v map[float64]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[float64]int8, xlen) - changed = true - } - - var mk float64 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]int16) - v, changed := fastpathTV.DecMapFloat64Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]int16) - fastpathTV.DecMapFloat64Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Int16X(vp *map[float64]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Int16V(v map[float64]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[float64]int16, xlen) - changed = true - } - - var mk float64 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]int32) - v, changed := fastpathTV.DecMapFloat64Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]int32) - fastpathTV.DecMapFloat64Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Int32X(vp *map[float64]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Int32V(v map[float64]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float64]int32, xlen) - changed = true - } - - var mk float64 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]int64) - v, changed := fastpathTV.DecMapFloat64Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]int64) - fastpathTV.DecMapFloat64Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Int64X(vp *map[float64]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Int64V(v map[float64]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[float64]int64, xlen) - changed = true - } - - var mk float64 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]float32) - v, changed := fastpathTV.DecMapFloat64Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]float32) - fastpathTV.DecMapFloat64Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Float32X(vp *map[float64]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Float32V(v map[float64]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[float64]float32, xlen) - changed = true - } - - var mk float64 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]float64) - v, changed := fastpathTV.DecMapFloat64Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]float64) - fastpathTV.DecMapFloat64Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64Float64X(vp *map[float64]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64Float64V(v map[float64]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[float64]float64, xlen) - changed = true - } - - var mk float64 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapFloat64BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[float64]bool) - v, changed := fastpathTV.DecMapFloat64BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[float64]bool) - fastpathTV.DecMapFloat64BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapFloat64BoolX(vp *map[float64]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapFloat64BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapFloat64BoolV(v map[float64]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[float64]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[float64]bool, xlen) - changed = true - } - - var mk float64 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeFloat(false) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintIntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]interface{}) - v, changed := fastpathTV.DecMapUintIntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]interface{}) - fastpathTV.DecMapUintIntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintIntfX(vp *map[uint]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintIntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintIntfV(v map[uint]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[uint]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk uint - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintStringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]string) - v, changed := fastpathTV.DecMapUintStringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]string) - fastpathTV.DecMapUintStringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintStringX(vp *map[uint]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintStringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintStringV(v map[uint]string, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[uint]string, xlen) - changed = true - } - - var mk uint - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintUintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]uint) - v, changed := fastpathTV.DecMapUintUintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]uint) - fastpathTV.DecMapUintUintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintUintX(vp *map[uint]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintUintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintUintV(v map[uint]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint]uint, xlen) - changed = true - } - - var mk uint - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintUint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]uint8) - v, changed := fastpathTV.DecMapUintUint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]uint8) - fastpathTV.DecMapUintUint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintUint8X(vp *map[uint]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintUint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintUint8V(v map[uint]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint]uint8, xlen) - changed = true - } - - var mk uint - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintUint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]uint16) - v, changed := fastpathTV.DecMapUintUint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]uint16) - fastpathTV.DecMapUintUint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintUint16X(vp *map[uint]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintUint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintUint16V(v map[uint]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint]uint16, xlen) - changed = true - } - - var mk uint - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintUint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]uint32) - v, changed := fastpathTV.DecMapUintUint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]uint32) - fastpathTV.DecMapUintUint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintUint32X(vp *map[uint]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintUint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintUint32V(v map[uint]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint]uint32, xlen) - changed = true - } - - var mk uint - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintUint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]uint64) - v, changed := fastpathTV.DecMapUintUint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]uint64) - fastpathTV.DecMapUintUint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintUint64X(vp *map[uint]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintUint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintUint64V(v map[uint]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint]uint64, xlen) - changed = true - } - - var mk uint - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintUintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]uintptr) - v, changed := fastpathTV.DecMapUintUintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]uintptr) - fastpathTV.DecMapUintUintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintUintptrX(vp *map[uint]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintUintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintUintptrV(v map[uint]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint]uintptr, xlen) - changed = true - } - - var mk uint - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintIntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]int) - v, changed := fastpathTV.DecMapUintIntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]int) - fastpathTV.DecMapUintIntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintIntX(vp *map[uint]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintIntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintIntV(v map[uint]int, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint]int, xlen) - changed = true - } - - var mk uint - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintInt8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]int8) - v, changed := fastpathTV.DecMapUintInt8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]int8) - fastpathTV.DecMapUintInt8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintInt8X(vp *map[uint]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintInt8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintInt8V(v map[uint]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint]int8, xlen) - changed = true - } - - var mk uint - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintInt16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]int16) - v, changed := fastpathTV.DecMapUintInt16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]int16) - fastpathTV.DecMapUintInt16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintInt16X(vp *map[uint]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintInt16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintInt16V(v map[uint]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint]int16, xlen) - changed = true - } - - var mk uint - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintInt32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]int32) - v, changed := fastpathTV.DecMapUintInt32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]int32) - fastpathTV.DecMapUintInt32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintInt32X(vp *map[uint]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintInt32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintInt32V(v map[uint]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint]int32, xlen) - changed = true - } - - var mk uint - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintInt64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]int64) - v, changed := fastpathTV.DecMapUintInt64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]int64) - fastpathTV.DecMapUintInt64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintInt64X(vp *map[uint]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintInt64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintInt64V(v map[uint]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint]int64, xlen) - changed = true - } - - var mk uint - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintFloat32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]float32) - v, changed := fastpathTV.DecMapUintFloat32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]float32) - fastpathTV.DecMapUintFloat32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintFloat32X(vp *map[uint]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintFloat32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintFloat32V(v map[uint]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint]float32, xlen) - changed = true - } - - var mk uint - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintFloat64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]float64) - v, changed := fastpathTV.DecMapUintFloat64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]float64) - fastpathTV.DecMapUintFloat64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintFloat64X(vp *map[uint]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintFloat64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintFloat64V(v map[uint]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint]float64, xlen) - changed = true - } - - var mk uint - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintBoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint]bool) - v, changed := fastpathTV.DecMapUintBoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint]bool) - fastpathTV.DecMapUintBoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintBoolX(vp *map[uint]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintBoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintBoolV(v map[uint]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[uint]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint]bool, xlen) - changed = true - } - - var mk uint - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]interface{}) - v, changed := fastpathTV.DecMapUint8IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]interface{}) - fastpathTV.DecMapUint8IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8IntfX(vp *map[uint8]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8IntfV(v map[uint8]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[uint8]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk uint8 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]string) - v, changed := fastpathTV.DecMapUint8StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]string) - fastpathTV.DecMapUint8StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8StringX(vp *map[uint8]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8StringV(v map[uint8]string, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[uint8]string, xlen) - changed = true - } - - var mk uint8 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]uint) - v, changed := fastpathTV.DecMapUint8UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]uint) - fastpathTV.DecMapUint8UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8UintX(vp *map[uint8]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8UintV(v map[uint8]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint8]uint, xlen) - changed = true - } - - var mk uint8 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]uint8) - v, changed := fastpathTV.DecMapUint8Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]uint8) - fastpathTV.DecMapUint8Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Uint8X(vp *map[uint8]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Uint8V(v map[uint8]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[uint8]uint8, xlen) - changed = true - } - - var mk uint8 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]uint16) - v, changed := fastpathTV.DecMapUint8Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]uint16) - fastpathTV.DecMapUint8Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Uint16X(vp *map[uint8]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Uint16V(v map[uint8]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[uint8]uint16, xlen) - changed = true - } - - var mk uint8 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]uint32) - v, changed := fastpathTV.DecMapUint8Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]uint32) - fastpathTV.DecMapUint8Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Uint32X(vp *map[uint8]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Uint32V(v map[uint8]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[uint8]uint32, xlen) - changed = true - } - - var mk uint8 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]uint64) - v, changed := fastpathTV.DecMapUint8Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]uint64) - fastpathTV.DecMapUint8Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Uint64X(vp *map[uint8]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Uint64V(v map[uint8]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint8]uint64, xlen) - changed = true - } - - var mk uint8 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]uintptr) - v, changed := fastpathTV.DecMapUint8UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]uintptr) - fastpathTV.DecMapUint8UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8UintptrX(vp *map[uint8]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8UintptrV(v map[uint8]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint8]uintptr, xlen) - changed = true - } - - var mk uint8 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]int) - v, changed := fastpathTV.DecMapUint8IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]int) - fastpathTV.DecMapUint8IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8IntX(vp *map[uint8]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8IntV(v map[uint8]int, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint8]int, xlen) - changed = true - } - - var mk uint8 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]int8) - v, changed := fastpathTV.DecMapUint8Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]int8) - fastpathTV.DecMapUint8Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Int8X(vp *map[uint8]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Int8V(v map[uint8]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[uint8]int8, xlen) - changed = true - } - - var mk uint8 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]int16) - v, changed := fastpathTV.DecMapUint8Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]int16) - fastpathTV.DecMapUint8Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Int16X(vp *map[uint8]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Int16V(v map[uint8]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[uint8]int16, xlen) - changed = true - } - - var mk uint8 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]int32) - v, changed := fastpathTV.DecMapUint8Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]int32) - fastpathTV.DecMapUint8Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Int32X(vp *map[uint8]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Int32V(v map[uint8]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[uint8]int32, xlen) - changed = true - } - - var mk uint8 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]int64) - v, changed := fastpathTV.DecMapUint8Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]int64) - fastpathTV.DecMapUint8Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Int64X(vp *map[uint8]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Int64V(v map[uint8]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint8]int64, xlen) - changed = true - } - - var mk uint8 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]float32) - v, changed := fastpathTV.DecMapUint8Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]float32) - fastpathTV.DecMapUint8Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Float32X(vp *map[uint8]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Float32V(v map[uint8]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[uint8]float32, xlen) - changed = true - } - - var mk uint8 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]float64) - v, changed := fastpathTV.DecMapUint8Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]float64) - fastpathTV.DecMapUint8Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8Float64X(vp *map[uint8]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8Float64V(v map[uint8]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint8]float64, xlen) - changed = true - } - - var mk uint8 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint8BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint8]bool) - v, changed := fastpathTV.DecMapUint8BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint8]bool) - fastpathTV.DecMapUint8BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint8BoolX(vp *map[uint8]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint8BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint8BoolV(v map[uint8]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[uint8]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[uint8]bool, xlen) - changed = true - } - - var mk uint8 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint8(dd.DecodeUint(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]interface{}) - v, changed := fastpathTV.DecMapUint16IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]interface{}) - fastpathTV.DecMapUint16IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16IntfX(vp *map[uint16]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16IntfV(v map[uint16]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18) - v = make(map[uint16]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk uint16 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]string) - v, changed := fastpathTV.DecMapUint16StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]string) - fastpathTV.DecMapUint16StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16StringX(vp *map[uint16]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16StringV(v map[uint16]string, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18) - v = make(map[uint16]string, xlen) - changed = true - } - - var mk uint16 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]uint) - v, changed := fastpathTV.DecMapUint16UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]uint) - fastpathTV.DecMapUint16UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16UintX(vp *map[uint16]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16UintV(v map[uint16]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint16]uint, xlen) - changed = true - } - - var mk uint16 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]uint8) - v, changed := fastpathTV.DecMapUint16Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]uint8) - fastpathTV.DecMapUint16Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Uint8X(vp *map[uint16]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Uint8V(v map[uint16]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[uint16]uint8, xlen) - changed = true - } - - var mk uint16 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]uint16) - v, changed := fastpathTV.DecMapUint16Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]uint16) - fastpathTV.DecMapUint16Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Uint16X(vp *map[uint16]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Uint16V(v map[uint16]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4) - v = make(map[uint16]uint16, xlen) - changed = true - } - - var mk uint16 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]uint32) - v, changed := fastpathTV.DecMapUint16Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]uint32) - fastpathTV.DecMapUint16Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Uint32X(vp *map[uint16]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Uint32V(v map[uint16]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[uint16]uint32, xlen) - changed = true - } - - var mk uint16 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]uint64) - v, changed := fastpathTV.DecMapUint16Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]uint64) - fastpathTV.DecMapUint16Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Uint64X(vp *map[uint16]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Uint64V(v map[uint16]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint16]uint64, xlen) - changed = true - } - - var mk uint16 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]uintptr) - v, changed := fastpathTV.DecMapUint16UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]uintptr) - fastpathTV.DecMapUint16UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16UintptrX(vp *map[uint16]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16UintptrV(v map[uint16]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint16]uintptr, xlen) - changed = true - } - - var mk uint16 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]int) - v, changed := fastpathTV.DecMapUint16IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]int) - fastpathTV.DecMapUint16IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16IntX(vp *map[uint16]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16IntV(v map[uint16]int, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint16]int, xlen) - changed = true - } - - var mk uint16 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]int8) - v, changed := fastpathTV.DecMapUint16Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]int8) - fastpathTV.DecMapUint16Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Int8X(vp *map[uint16]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Int8V(v map[uint16]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[uint16]int8, xlen) - changed = true - } - - var mk uint16 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]int16) - v, changed := fastpathTV.DecMapUint16Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]int16) - fastpathTV.DecMapUint16Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Int16X(vp *map[uint16]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Int16V(v map[uint16]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4) - v = make(map[uint16]int16, xlen) - changed = true - } - - var mk uint16 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]int32) - v, changed := fastpathTV.DecMapUint16Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]int32) - fastpathTV.DecMapUint16Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Int32X(vp *map[uint16]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Int32V(v map[uint16]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[uint16]int32, xlen) - changed = true - } - - var mk uint16 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]int64) - v, changed := fastpathTV.DecMapUint16Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]int64) - fastpathTV.DecMapUint16Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Int64X(vp *map[uint16]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Int64V(v map[uint16]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint16]int64, xlen) - changed = true - } - - var mk uint16 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]float32) - v, changed := fastpathTV.DecMapUint16Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]float32) - fastpathTV.DecMapUint16Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Float32X(vp *map[uint16]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Float32V(v map[uint16]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[uint16]float32, xlen) - changed = true - } - - var mk uint16 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]float64) - v, changed := fastpathTV.DecMapUint16Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]float64) - fastpathTV.DecMapUint16Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16Float64X(vp *map[uint16]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16Float64V(v map[uint16]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint16]float64, xlen) - changed = true - } - - var mk uint16 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint16BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint16]bool) - v, changed := fastpathTV.DecMapUint16BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint16]bool) - fastpathTV.DecMapUint16BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint16BoolX(vp *map[uint16]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint16BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint16BoolV(v map[uint16]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[uint16]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[uint16]bool, xlen) - changed = true - } - - var mk uint16 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint16(dd.DecodeUint(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]interface{}) - v, changed := fastpathTV.DecMapUint32IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]interface{}) - fastpathTV.DecMapUint32IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32IntfX(vp *map[uint32]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32IntfV(v map[uint32]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[uint32]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk uint32 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]string) - v, changed := fastpathTV.DecMapUint32StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]string) - fastpathTV.DecMapUint32StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32StringX(vp *map[uint32]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32StringV(v map[uint32]string, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[uint32]string, xlen) - changed = true - } - - var mk uint32 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]uint) - v, changed := fastpathTV.DecMapUint32UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]uint) - fastpathTV.DecMapUint32UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32UintX(vp *map[uint32]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32UintV(v map[uint32]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint32]uint, xlen) - changed = true - } - - var mk uint32 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]uint8) - v, changed := fastpathTV.DecMapUint32Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]uint8) - fastpathTV.DecMapUint32Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Uint8X(vp *map[uint32]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Uint8V(v map[uint32]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[uint32]uint8, xlen) - changed = true - } - - var mk uint32 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]uint16) - v, changed := fastpathTV.DecMapUint32Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]uint16) - fastpathTV.DecMapUint32Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Uint16X(vp *map[uint32]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Uint16V(v map[uint32]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[uint32]uint16, xlen) - changed = true - } - - var mk uint32 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]uint32) - v, changed := fastpathTV.DecMapUint32Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]uint32) - fastpathTV.DecMapUint32Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Uint32X(vp *map[uint32]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Uint32V(v map[uint32]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[uint32]uint32, xlen) - changed = true - } - - var mk uint32 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]uint64) - v, changed := fastpathTV.DecMapUint32Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]uint64) - fastpathTV.DecMapUint32Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Uint64X(vp *map[uint32]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Uint64V(v map[uint32]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint32]uint64, xlen) - changed = true - } - - var mk uint32 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]uintptr) - v, changed := fastpathTV.DecMapUint32UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]uintptr) - fastpathTV.DecMapUint32UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32UintptrX(vp *map[uint32]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32UintptrV(v map[uint32]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint32]uintptr, xlen) - changed = true - } - - var mk uint32 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]int) - v, changed := fastpathTV.DecMapUint32IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]int) - fastpathTV.DecMapUint32IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32IntX(vp *map[uint32]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32IntV(v map[uint32]int, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint32]int, xlen) - changed = true - } - - var mk uint32 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]int8) - v, changed := fastpathTV.DecMapUint32Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]int8) - fastpathTV.DecMapUint32Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Int8X(vp *map[uint32]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Int8V(v map[uint32]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[uint32]int8, xlen) - changed = true - } - - var mk uint32 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]int16) - v, changed := fastpathTV.DecMapUint32Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]int16) - fastpathTV.DecMapUint32Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Int16X(vp *map[uint32]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Int16V(v map[uint32]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[uint32]int16, xlen) - changed = true - } - - var mk uint32 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]int32) - v, changed := fastpathTV.DecMapUint32Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]int32) - fastpathTV.DecMapUint32Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Int32X(vp *map[uint32]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Int32V(v map[uint32]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[uint32]int32, xlen) - changed = true - } - - var mk uint32 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]int64) - v, changed := fastpathTV.DecMapUint32Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]int64) - fastpathTV.DecMapUint32Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Int64X(vp *map[uint32]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Int64V(v map[uint32]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint32]int64, xlen) - changed = true - } - - var mk uint32 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]float32) - v, changed := fastpathTV.DecMapUint32Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]float32) - fastpathTV.DecMapUint32Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Float32X(vp *map[uint32]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Float32V(v map[uint32]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[uint32]float32, xlen) - changed = true - } - - var mk uint32 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]float64) - v, changed := fastpathTV.DecMapUint32Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]float64) - fastpathTV.DecMapUint32Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32Float64X(vp *map[uint32]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32Float64V(v map[uint32]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint32]float64, xlen) - changed = true - } - - var mk uint32 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint32BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint32]bool) - v, changed := fastpathTV.DecMapUint32BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint32]bool) - fastpathTV.DecMapUint32BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint32BoolX(vp *map[uint32]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint32BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint32BoolV(v map[uint32]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[uint32]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[uint32]bool, xlen) - changed = true - } - - var mk uint32 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uint32(dd.DecodeUint(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]interface{}) - v, changed := fastpathTV.DecMapUint64IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]interface{}) - fastpathTV.DecMapUint64IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64IntfX(vp *map[uint64]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64IntfV(v map[uint64]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[uint64]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk uint64 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]string) - v, changed := fastpathTV.DecMapUint64StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]string) - fastpathTV.DecMapUint64StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64StringX(vp *map[uint64]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64StringV(v map[uint64]string, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[uint64]string, xlen) - changed = true - } - - var mk uint64 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]uint) - v, changed := fastpathTV.DecMapUint64UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]uint) - fastpathTV.DecMapUint64UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64UintX(vp *map[uint64]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64UintV(v map[uint64]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint64]uint, xlen) - changed = true - } - - var mk uint64 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]uint8) - v, changed := fastpathTV.DecMapUint64Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]uint8) - fastpathTV.DecMapUint64Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Uint8X(vp *map[uint64]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Uint8V(v map[uint64]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint64]uint8, xlen) - changed = true - } - - var mk uint64 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]uint16) - v, changed := fastpathTV.DecMapUint64Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]uint16) - fastpathTV.DecMapUint64Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Uint16X(vp *map[uint64]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Uint16V(v map[uint64]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint64]uint16, xlen) - changed = true - } - - var mk uint64 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]uint32) - v, changed := fastpathTV.DecMapUint64Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]uint32) - fastpathTV.DecMapUint64Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Uint32X(vp *map[uint64]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Uint32V(v map[uint64]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint64]uint32, xlen) - changed = true - } - - var mk uint64 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]uint64) - v, changed := fastpathTV.DecMapUint64Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]uint64) - fastpathTV.DecMapUint64Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Uint64X(vp *map[uint64]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Uint64V(v map[uint64]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint64]uint64, xlen) - changed = true - } - - var mk uint64 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]uintptr) - v, changed := fastpathTV.DecMapUint64UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]uintptr) - fastpathTV.DecMapUint64UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64UintptrX(vp *map[uint64]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64UintptrV(v map[uint64]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint64]uintptr, xlen) - changed = true - } - - var mk uint64 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]int) - v, changed := fastpathTV.DecMapUint64IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]int) - fastpathTV.DecMapUint64IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64IntX(vp *map[uint64]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64IntV(v map[uint64]int, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint64]int, xlen) - changed = true - } - - var mk uint64 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]int8) - v, changed := fastpathTV.DecMapUint64Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]int8) - fastpathTV.DecMapUint64Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Int8X(vp *map[uint64]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Int8V(v map[uint64]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint64]int8, xlen) - changed = true - } - - var mk uint64 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]int16) - v, changed := fastpathTV.DecMapUint64Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]int16) - fastpathTV.DecMapUint64Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Int16X(vp *map[uint64]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Int16V(v map[uint64]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uint64]int16, xlen) - changed = true - } - - var mk uint64 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]int32) - v, changed := fastpathTV.DecMapUint64Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]int32) - fastpathTV.DecMapUint64Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Int32X(vp *map[uint64]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Int32V(v map[uint64]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint64]int32, xlen) - changed = true - } - - var mk uint64 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]int64) - v, changed := fastpathTV.DecMapUint64Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]int64) - fastpathTV.DecMapUint64Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Int64X(vp *map[uint64]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Int64V(v map[uint64]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint64]int64, xlen) - changed = true - } - - var mk uint64 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]float32) - v, changed := fastpathTV.DecMapUint64Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]float32) - fastpathTV.DecMapUint64Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Float32X(vp *map[uint64]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Float32V(v map[uint64]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uint64]float32, xlen) - changed = true - } - - var mk uint64 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]float64) - v, changed := fastpathTV.DecMapUint64Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]float64) - fastpathTV.DecMapUint64Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64Float64X(vp *map[uint64]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64Float64V(v map[uint64]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uint64]float64, xlen) - changed = true - } - - var mk uint64 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUint64BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uint64]bool) - v, changed := fastpathTV.DecMapUint64BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uint64]bool) - fastpathTV.DecMapUint64BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUint64BoolX(vp *map[uint64]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapUint64BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUint64BoolV(v map[uint64]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[uint64]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uint64]bool, xlen) - changed = true - } - - var mk uint64 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeUint(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrIntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]interface{}) - v, changed := fastpathTV.DecMapUintptrIntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]interface{}) - fastpathTV.DecMapUintptrIntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrIntfX(vp *map[uintptr]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrIntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrIntfV(v map[uintptr]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[uintptr]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk uintptr - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrStringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]string) - v, changed := fastpathTV.DecMapUintptrStringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]string) - fastpathTV.DecMapUintptrStringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrStringX(vp *map[uintptr]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrStringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrStringV(v map[uintptr]string, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[uintptr]string, xlen) - changed = true - } - - var mk uintptr - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrUintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]uint) - v, changed := fastpathTV.DecMapUintptrUintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]uint) - fastpathTV.DecMapUintptrUintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrUintX(vp *map[uintptr]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrUintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrUintV(v map[uintptr]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uintptr]uint, xlen) - changed = true - } - - var mk uintptr - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrUint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]uint8) - v, changed := fastpathTV.DecMapUintptrUint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]uint8) - fastpathTV.DecMapUintptrUint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrUint8X(vp *map[uintptr]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrUint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrUint8V(v map[uintptr]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uintptr]uint8, xlen) - changed = true - } - - var mk uintptr - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrUint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]uint16) - v, changed := fastpathTV.DecMapUintptrUint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]uint16) - fastpathTV.DecMapUintptrUint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrUint16X(vp *map[uintptr]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrUint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrUint16V(v map[uintptr]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uintptr]uint16, xlen) - changed = true - } - - var mk uintptr - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrUint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]uint32) - v, changed := fastpathTV.DecMapUintptrUint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]uint32) - fastpathTV.DecMapUintptrUint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrUint32X(vp *map[uintptr]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrUint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrUint32V(v map[uintptr]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uintptr]uint32, xlen) - changed = true - } - - var mk uintptr - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrUint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]uint64) - v, changed := fastpathTV.DecMapUintptrUint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]uint64) - fastpathTV.DecMapUintptrUint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrUint64X(vp *map[uintptr]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrUint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrUint64V(v map[uintptr]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uintptr]uint64, xlen) - changed = true - } - - var mk uintptr - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrUintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]uintptr) - v, changed := fastpathTV.DecMapUintptrUintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]uintptr) - fastpathTV.DecMapUintptrUintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrUintptrX(vp *map[uintptr]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrUintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrUintptrV(v map[uintptr]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uintptr]uintptr, xlen) - changed = true - } - - var mk uintptr - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrIntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]int) - v, changed := fastpathTV.DecMapUintptrIntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]int) - fastpathTV.DecMapUintptrIntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrIntX(vp *map[uintptr]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrIntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrIntV(v map[uintptr]int, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uintptr]int, xlen) - changed = true - } - - var mk uintptr - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrInt8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]int8) - v, changed := fastpathTV.DecMapUintptrInt8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]int8) - fastpathTV.DecMapUintptrInt8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrInt8X(vp *map[uintptr]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrInt8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrInt8V(v map[uintptr]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uintptr]int8, xlen) - changed = true - } - - var mk uintptr - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrInt16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]int16) - v, changed := fastpathTV.DecMapUintptrInt16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]int16) - fastpathTV.DecMapUintptrInt16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrInt16X(vp *map[uintptr]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrInt16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrInt16V(v map[uintptr]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[uintptr]int16, xlen) - changed = true - } - - var mk uintptr - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrInt32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]int32) - v, changed := fastpathTV.DecMapUintptrInt32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]int32) - fastpathTV.DecMapUintptrInt32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrInt32X(vp *map[uintptr]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrInt32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrInt32V(v map[uintptr]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uintptr]int32, xlen) - changed = true - } - - var mk uintptr - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrInt64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]int64) - v, changed := fastpathTV.DecMapUintptrInt64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]int64) - fastpathTV.DecMapUintptrInt64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrInt64X(vp *map[uintptr]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrInt64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrInt64V(v map[uintptr]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uintptr]int64, xlen) - changed = true - } - - var mk uintptr - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrFloat32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]float32) - v, changed := fastpathTV.DecMapUintptrFloat32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]float32) - fastpathTV.DecMapUintptrFloat32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrFloat32X(vp *map[uintptr]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrFloat32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrFloat32V(v map[uintptr]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[uintptr]float32, xlen) - changed = true - } - - var mk uintptr - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrFloat64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]float64) - v, changed := fastpathTV.DecMapUintptrFloat64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]float64) - fastpathTV.DecMapUintptrFloat64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrFloat64X(vp *map[uintptr]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrFloat64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrFloat64V(v map[uintptr]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[uintptr]float64, xlen) - changed = true - } - - var mk uintptr - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapUintptrBoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[uintptr]bool) - v, changed := fastpathTV.DecMapUintptrBoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[uintptr]bool) - fastpathTV.DecMapUintptrBoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapUintptrBoolX(vp *map[uintptr]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapUintptrBoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapUintptrBoolV(v map[uintptr]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[uintptr]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[uintptr]bool, xlen) - changed = true - } - - var mk uintptr - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = uintptr(dd.DecodeUint(uintBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntIntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]interface{}) - v, changed := fastpathTV.DecMapIntIntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]interface{}) - fastpathTV.DecMapIntIntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntIntfX(vp *map[int]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntIntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntIntfV(v map[int]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[int]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[int]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk int - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntStringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]string) - v, changed := fastpathTV.DecMapIntStringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]string) - fastpathTV.DecMapIntStringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntStringX(vp *map[int]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntStringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntStringV(v map[int]string, checkNil bool, canChange bool, - d *Decoder) (_ map[int]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[int]string, xlen) - changed = true - } - - var mk int - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntUintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]uint) - v, changed := fastpathTV.DecMapIntUintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]uint) - fastpathTV.DecMapIntUintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntUintX(vp *map[int]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntUintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntUintV(v map[int]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[int]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int]uint, xlen) - changed = true - } - - var mk int - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntUint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]uint8) - v, changed := fastpathTV.DecMapIntUint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]uint8) - fastpathTV.DecMapIntUint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntUint8X(vp *map[int]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntUint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntUint8V(v map[int]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[int]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int]uint8, xlen) - changed = true - } - - var mk int - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntUint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]uint16) - v, changed := fastpathTV.DecMapIntUint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]uint16) - fastpathTV.DecMapIntUint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntUint16X(vp *map[int]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntUint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntUint16V(v map[int]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[int]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int]uint16, xlen) - changed = true - } - - var mk int - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntUint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]uint32) - v, changed := fastpathTV.DecMapIntUint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]uint32) - fastpathTV.DecMapIntUint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntUint32X(vp *map[int]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntUint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntUint32V(v map[int]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[int]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int]uint32, xlen) - changed = true - } - - var mk int - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntUint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]uint64) - v, changed := fastpathTV.DecMapIntUint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]uint64) - fastpathTV.DecMapIntUint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntUint64X(vp *map[int]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntUint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntUint64V(v map[int]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[int]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int]uint64, xlen) - changed = true - } - - var mk int - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntUintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]uintptr) - v, changed := fastpathTV.DecMapIntUintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]uintptr) - fastpathTV.DecMapIntUintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntUintptrX(vp *map[int]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntUintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntUintptrV(v map[int]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[int]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int]uintptr, xlen) - changed = true - } - - var mk int - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntIntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]int) - v, changed := fastpathTV.DecMapIntIntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]int) - fastpathTV.DecMapIntIntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntIntX(vp *map[int]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntIntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntIntV(v map[int]int, checkNil bool, canChange bool, - d *Decoder) (_ map[int]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int]int, xlen) - changed = true - } - - var mk int - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntInt8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]int8) - v, changed := fastpathTV.DecMapIntInt8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]int8) - fastpathTV.DecMapIntInt8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntInt8X(vp *map[int]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntInt8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntInt8V(v map[int]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[int]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int]int8, xlen) - changed = true - } - - var mk int - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntInt16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]int16) - v, changed := fastpathTV.DecMapIntInt16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]int16) - fastpathTV.DecMapIntInt16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntInt16X(vp *map[int]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntInt16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntInt16V(v map[int]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[int]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int]int16, xlen) - changed = true - } - - var mk int - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntInt32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]int32) - v, changed := fastpathTV.DecMapIntInt32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]int32) - fastpathTV.DecMapIntInt32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntInt32X(vp *map[int]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntInt32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntInt32V(v map[int]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[int]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int]int32, xlen) - changed = true - } - - var mk int - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntInt64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]int64) - v, changed := fastpathTV.DecMapIntInt64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]int64) - fastpathTV.DecMapIntInt64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntInt64X(vp *map[int]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntInt64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntInt64V(v map[int]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[int]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int]int64, xlen) - changed = true - } - - var mk int - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntFloat32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]float32) - v, changed := fastpathTV.DecMapIntFloat32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]float32) - fastpathTV.DecMapIntFloat32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntFloat32X(vp *map[int]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntFloat32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntFloat32V(v map[int]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[int]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int]float32, xlen) - changed = true - } - - var mk int - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntFloat64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]float64) - v, changed := fastpathTV.DecMapIntFloat64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]float64) - fastpathTV.DecMapIntFloat64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntFloat64X(vp *map[int]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntFloat64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntFloat64V(v map[int]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[int]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int]float64, xlen) - changed = true - } - - var mk int - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapIntBoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int]bool) - v, changed := fastpathTV.DecMapIntBoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int]bool) - fastpathTV.DecMapIntBoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapIntBoolX(vp *map[int]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapIntBoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapIntBoolV(v map[int]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[int]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int]bool, xlen) - changed = true - } - - var mk int - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int(dd.DecodeInt(intBitsize)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]interface{}) - v, changed := fastpathTV.DecMapInt8IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]interface{}) - fastpathTV.DecMapInt8IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8IntfX(vp *map[int8]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8IntfV(v map[int8]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[int8]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk int8 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]string) - v, changed := fastpathTV.DecMapInt8StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]string) - fastpathTV.DecMapInt8StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8StringX(vp *map[int8]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8StringV(v map[int8]string, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[int8]string, xlen) - changed = true - } - - var mk int8 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]uint) - v, changed := fastpathTV.DecMapInt8UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]uint) - fastpathTV.DecMapInt8UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8UintX(vp *map[int8]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8UintV(v map[int8]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int8]uint, xlen) - changed = true - } - - var mk int8 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]uint8) - v, changed := fastpathTV.DecMapInt8Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]uint8) - fastpathTV.DecMapInt8Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Uint8X(vp *map[int8]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Uint8V(v map[int8]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[int8]uint8, xlen) - changed = true - } - - var mk int8 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]uint16) - v, changed := fastpathTV.DecMapInt8Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]uint16) - fastpathTV.DecMapInt8Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Uint16X(vp *map[int8]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Uint16V(v map[int8]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[int8]uint16, xlen) - changed = true - } - - var mk int8 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]uint32) - v, changed := fastpathTV.DecMapInt8Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]uint32) - fastpathTV.DecMapInt8Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Uint32X(vp *map[int8]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Uint32V(v map[int8]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[int8]uint32, xlen) - changed = true - } - - var mk int8 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]uint64) - v, changed := fastpathTV.DecMapInt8Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]uint64) - fastpathTV.DecMapInt8Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Uint64X(vp *map[int8]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Uint64V(v map[int8]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int8]uint64, xlen) - changed = true - } - - var mk int8 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]uintptr) - v, changed := fastpathTV.DecMapInt8UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]uintptr) - fastpathTV.DecMapInt8UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8UintptrX(vp *map[int8]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8UintptrV(v map[int8]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int8]uintptr, xlen) - changed = true - } - - var mk int8 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]int) - v, changed := fastpathTV.DecMapInt8IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]int) - fastpathTV.DecMapInt8IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8IntX(vp *map[int8]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8IntV(v map[int8]int, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int8]int, xlen) - changed = true - } - - var mk int8 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]int8) - v, changed := fastpathTV.DecMapInt8Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]int8) - fastpathTV.DecMapInt8Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Int8X(vp *map[int8]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Int8V(v map[int8]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[int8]int8, xlen) - changed = true - } - - var mk int8 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]int16) - v, changed := fastpathTV.DecMapInt8Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]int16) - fastpathTV.DecMapInt8Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Int16X(vp *map[int8]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Int16V(v map[int8]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[int8]int16, xlen) - changed = true - } - - var mk int8 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]int32) - v, changed := fastpathTV.DecMapInt8Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]int32) - fastpathTV.DecMapInt8Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Int32X(vp *map[int8]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Int32V(v map[int8]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[int8]int32, xlen) - changed = true - } - - var mk int8 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]int64) - v, changed := fastpathTV.DecMapInt8Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]int64) - fastpathTV.DecMapInt8Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Int64X(vp *map[int8]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Int64V(v map[int8]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int8]int64, xlen) - changed = true - } - - var mk int8 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]float32) - v, changed := fastpathTV.DecMapInt8Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]float32) - fastpathTV.DecMapInt8Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Float32X(vp *map[int8]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Float32V(v map[int8]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[int8]float32, xlen) - changed = true - } - - var mk int8 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]float64) - v, changed := fastpathTV.DecMapInt8Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]float64) - fastpathTV.DecMapInt8Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8Float64X(vp *map[int8]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8Float64V(v map[int8]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int8]float64, xlen) - changed = true - } - - var mk int8 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt8BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int8]bool) - v, changed := fastpathTV.DecMapInt8BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int8]bool) - fastpathTV.DecMapInt8BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt8BoolX(vp *map[int8]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt8BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt8BoolV(v map[int8]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[int8]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[int8]bool, xlen) - changed = true - } - - var mk int8 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int8(dd.DecodeInt(8)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]interface{}) - v, changed := fastpathTV.DecMapInt16IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]interface{}) - fastpathTV.DecMapInt16IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16IntfX(vp *map[int16]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16IntfV(v map[int16]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18) - v = make(map[int16]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk int16 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]string) - v, changed := fastpathTV.DecMapInt16StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]string) - fastpathTV.DecMapInt16StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16StringX(vp *map[int16]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16StringV(v map[int16]string, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18) - v = make(map[int16]string, xlen) - changed = true - } - - var mk int16 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]uint) - v, changed := fastpathTV.DecMapInt16UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]uint) - fastpathTV.DecMapInt16UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16UintX(vp *map[int16]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16UintV(v map[int16]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int16]uint, xlen) - changed = true - } - - var mk int16 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]uint8) - v, changed := fastpathTV.DecMapInt16Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]uint8) - fastpathTV.DecMapInt16Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Uint8X(vp *map[int16]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Uint8V(v map[int16]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[int16]uint8, xlen) - changed = true - } - - var mk int16 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]uint16) - v, changed := fastpathTV.DecMapInt16Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]uint16) - fastpathTV.DecMapInt16Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Uint16X(vp *map[int16]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Uint16V(v map[int16]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4) - v = make(map[int16]uint16, xlen) - changed = true - } - - var mk int16 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]uint32) - v, changed := fastpathTV.DecMapInt16Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]uint32) - fastpathTV.DecMapInt16Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Uint32X(vp *map[int16]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Uint32V(v map[int16]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[int16]uint32, xlen) - changed = true - } - - var mk int16 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]uint64) - v, changed := fastpathTV.DecMapInt16Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]uint64) - fastpathTV.DecMapInt16Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Uint64X(vp *map[int16]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Uint64V(v map[int16]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int16]uint64, xlen) - changed = true - } - - var mk int16 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]uintptr) - v, changed := fastpathTV.DecMapInt16UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]uintptr) - fastpathTV.DecMapInt16UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16UintptrX(vp *map[int16]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16UintptrV(v map[int16]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int16]uintptr, xlen) - changed = true - } - - var mk int16 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]int) - v, changed := fastpathTV.DecMapInt16IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]int) - fastpathTV.DecMapInt16IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16IntX(vp *map[int16]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16IntV(v map[int16]int, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int16]int, xlen) - changed = true - } - - var mk int16 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]int8) - v, changed := fastpathTV.DecMapInt16Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]int8) - fastpathTV.DecMapInt16Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Int8X(vp *map[int16]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Int8V(v map[int16]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[int16]int8, xlen) - changed = true - } - - var mk int16 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]int16) - v, changed := fastpathTV.DecMapInt16Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]int16) - fastpathTV.DecMapInt16Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Int16X(vp *map[int16]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Int16V(v map[int16]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4) - v = make(map[int16]int16, xlen) - changed = true - } - - var mk int16 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]int32) - v, changed := fastpathTV.DecMapInt16Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]int32) - fastpathTV.DecMapInt16Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Int32X(vp *map[int16]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Int32V(v map[int16]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[int16]int32, xlen) - changed = true - } - - var mk int16 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]int64) - v, changed := fastpathTV.DecMapInt16Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]int64) - fastpathTV.DecMapInt16Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Int64X(vp *map[int16]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Int64V(v map[int16]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int16]int64, xlen) - changed = true - } - - var mk int16 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]float32) - v, changed := fastpathTV.DecMapInt16Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]float32) - fastpathTV.DecMapInt16Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Float32X(vp *map[int16]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Float32V(v map[int16]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[int16]float32, xlen) - changed = true - } - - var mk int16 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]float64) - v, changed := fastpathTV.DecMapInt16Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]float64) - fastpathTV.DecMapInt16Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16Float64X(vp *map[int16]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16Float64V(v map[int16]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int16]float64, xlen) - changed = true - } - - var mk int16 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt16BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int16]bool) - v, changed := fastpathTV.DecMapInt16BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int16]bool) - fastpathTV.DecMapInt16BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt16BoolX(vp *map[int16]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt16BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt16BoolV(v map[int16]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[int16]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[int16]bool, xlen) - changed = true - } - - var mk int16 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int16(dd.DecodeInt(16)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]interface{}) - v, changed := fastpathTV.DecMapInt32IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]interface{}) - fastpathTV.DecMapInt32IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32IntfX(vp *map[int32]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32IntfV(v map[int32]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[int32]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk int32 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]string) - v, changed := fastpathTV.DecMapInt32StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]string) - fastpathTV.DecMapInt32StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32StringX(vp *map[int32]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32StringV(v map[int32]string, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20) - v = make(map[int32]string, xlen) - changed = true - } - - var mk int32 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]uint) - v, changed := fastpathTV.DecMapInt32UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]uint) - fastpathTV.DecMapInt32UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32UintX(vp *map[int32]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32UintV(v map[int32]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int32]uint, xlen) - changed = true - } - - var mk int32 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]uint8) - v, changed := fastpathTV.DecMapInt32Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]uint8) - fastpathTV.DecMapInt32Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Uint8X(vp *map[int32]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Uint8V(v map[int32]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[int32]uint8, xlen) - changed = true - } - - var mk int32 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]uint16) - v, changed := fastpathTV.DecMapInt32Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]uint16) - fastpathTV.DecMapInt32Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Uint16X(vp *map[int32]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Uint16V(v map[int32]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[int32]uint16, xlen) - changed = true - } - - var mk int32 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]uint32) - v, changed := fastpathTV.DecMapInt32Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]uint32) - fastpathTV.DecMapInt32Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Uint32X(vp *map[int32]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Uint32V(v map[int32]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[int32]uint32, xlen) - changed = true - } - - var mk int32 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]uint64) - v, changed := fastpathTV.DecMapInt32Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]uint64) - fastpathTV.DecMapInt32Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Uint64X(vp *map[int32]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Uint64V(v map[int32]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int32]uint64, xlen) - changed = true - } - - var mk int32 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]uintptr) - v, changed := fastpathTV.DecMapInt32UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]uintptr) - fastpathTV.DecMapInt32UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32UintptrX(vp *map[int32]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32UintptrV(v map[int32]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int32]uintptr, xlen) - changed = true - } - - var mk int32 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]int) - v, changed := fastpathTV.DecMapInt32IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]int) - fastpathTV.DecMapInt32IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32IntX(vp *map[int32]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32IntV(v map[int32]int, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int32]int, xlen) - changed = true - } - - var mk int32 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]int8) - v, changed := fastpathTV.DecMapInt32Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]int8) - fastpathTV.DecMapInt32Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Int8X(vp *map[int32]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Int8V(v map[int32]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[int32]int8, xlen) - changed = true - } - - var mk int32 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]int16) - v, changed := fastpathTV.DecMapInt32Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]int16) - fastpathTV.DecMapInt32Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Int16X(vp *map[int32]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Int16V(v map[int32]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6) - v = make(map[int32]int16, xlen) - changed = true - } - - var mk int32 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]int32) - v, changed := fastpathTV.DecMapInt32Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]int32) - fastpathTV.DecMapInt32Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Int32X(vp *map[int32]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Int32V(v map[int32]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[int32]int32, xlen) - changed = true - } - - var mk int32 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]int64) - v, changed := fastpathTV.DecMapInt32Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]int64) - fastpathTV.DecMapInt32Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Int64X(vp *map[int32]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Int64V(v map[int32]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int32]int64, xlen) - changed = true - } - - var mk int32 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]float32) - v, changed := fastpathTV.DecMapInt32Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]float32) - fastpathTV.DecMapInt32Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Float32X(vp *map[int32]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Float32V(v map[int32]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8) - v = make(map[int32]float32, xlen) - changed = true - } - - var mk int32 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]float64) - v, changed := fastpathTV.DecMapInt32Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]float64) - fastpathTV.DecMapInt32Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32Float64X(vp *map[int32]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32Float64V(v map[int32]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int32]float64, xlen) - changed = true - } - - var mk int32 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt32BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int32]bool) - v, changed := fastpathTV.DecMapInt32BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int32]bool) - fastpathTV.DecMapInt32BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt32BoolX(vp *map[int32]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt32BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt32BoolV(v map[int32]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[int32]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[int32]bool, xlen) - changed = true - } - - var mk int32 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = int32(dd.DecodeInt(32)) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64IntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]interface{}) - v, changed := fastpathTV.DecMapInt64IntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]interface{}) - fastpathTV.DecMapInt64IntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64IntfX(vp *map[int64]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64IntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64IntfV(v map[int64]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[int64]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk int64 - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64StringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]string) - v, changed := fastpathTV.DecMapInt64StringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]string) - fastpathTV.DecMapInt64StringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64StringX(vp *map[int64]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64StringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64StringV(v map[int64]string, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24) - v = make(map[int64]string, xlen) - changed = true - } - - var mk int64 - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64UintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]uint) - v, changed := fastpathTV.DecMapInt64UintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]uint) - fastpathTV.DecMapInt64UintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64UintX(vp *map[int64]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64UintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64UintV(v map[int64]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int64]uint, xlen) - changed = true - } - - var mk int64 - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Uint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]uint8) - v, changed := fastpathTV.DecMapInt64Uint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]uint8) - fastpathTV.DecMapInt64Uint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Uint8X(vp *map[int64]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Uint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Uint8V(v map[int64]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int64]uint8, xlen) - changed = true - } - - var mk int64 - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Uint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]uint16) - v, changed := fastpathTV.DecMapInt64Uint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]uint16) - fastpathTV.DecMapInt64Uint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Uint16X(vp *map[int64]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Uint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Uint16V(v map[int64]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int64]uint16, xlen) - changed = true - } - - var mk int64 - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Uint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]uint32) - v, changed := fastpathTV.DecMapInt64Uint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]uint32) - fastpathTV.DecMapInt64Uint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Uint32X(vp *map[int64]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Uint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Uint32V(v map[int64]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int64]uint32, xlen) - changed = true - } - - var mk int64 - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Uint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]uint64) - v, changed := fastpathTV.DecMapInt64Uint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]uint64) - fastpathTV.DecMapInt64Uint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Uint64X(vp *map[int64]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Uint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Uint64V(v map[int64]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int64]uint64, xlen) - changed = true - } - - var mk int64 - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64UintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]uintptr) - v, changed := fastpathTV.DecMapInt64UintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]uintptr) - fastpathTV.DecMapInt64UintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64UintptrX(vp *map[int64]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64UintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64UintptrV(v map[int64]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int64]uintptr, xlen) - changed = true - } - - var mk int64 - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64IntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]int) - v, changed := fastpathTV.DecMapInt64IntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]int) - fastpathTV.DecMapInt64IntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64IntX(vp *map[int64]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64IntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64IntV(v map[int64]int, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int64]int, xlen) - changed = true - } - - var mk int64 - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Int8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]int8) - v, changed := fastpathTV.DecMapInt64Int8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]int8) - fastpathTV.DecMapInt64Int8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Int8X(vp *map[int64]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Int8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Int8V(v map[int64]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int64]int8, xlen) - changed = true - } - - var mk int64 - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Int16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]int16) - v, changed := fastpathTV.DecMapInt64Int16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]int16) - fastpathTV.DecMapInt64Int16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Int16X(vp *map[int64]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Int16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Int16V(v map[int64]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10) - v = make(map[int64]int16, xlen) - changed = true - } - - var mk int64 - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Int32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]int32) - v, changed := fastpathTV.DecMapInt64Int32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]int32) - fastpathTV.DecMapInt64Int32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Int32X(vp *map[int64]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Int32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Int32V(v map[int64]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int64]int32, xlen) - changed = true - } - - var mk int64 - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Int64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]int64) - v, changed := fastpathTV.DecMapInt64Int64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]int64) - fastpathTV.DecMapInt64Int64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Int64X(vp *map[int64]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Int64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Int64V(v map[int64]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int64]int64, xlen) - changed = true - } - - var mk int64 - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Float32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]float32) - v, changed := fastpathTV.DecMapInt64Float32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]float32) - fastpathTV.DecMapInt64Float32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Float32X(vp *map[int64]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Float32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Float32V(v map[int64]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12) - v = make(map[int64]float32, xlen) - changed = true - } - - var mk int64 - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64Float64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]float64) - v, changed := fastpathTV.DecMapInt64Float64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]float64) - fastpathTV.DecMapInt64Float64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64Float64X(vp *map[int64]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64Float64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64Float64V(v map[int64]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16) - v = make(map[int64]float64, xlen) - changed = true - } - - var mk int64 - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapInt64BoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[int64]bool) - v, changed := fastpathTV.DecMapInt64BoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[int64]bool) - fastpathTV.DecMapInt64BoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapInt64BoolX(vp *map[int64]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapInt64BoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapInt64BoolV(v map[int64]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[int64]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[int64]bool, xlen) - changed = true - } - - var mk int64 - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeInt(64) - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolIntfR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]interface{}) - v, changed := fastpathTV.DecMapBoolIntfV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]interface{}) - fastpathTV.DecMapBoolIntfV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolIntfX(vp *map[bool]interface{}, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolIntfV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolIntfV(v map[bool]interface{}, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]interface{}, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[bool]interface{}, xlen) - changed = true - } - mapGet := !d.h.MapValueReset && !d.h.InterfaceReset - var mk bool - var mv interface{} - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - if mapGet { - mv = v[mk] - } else { - mv = nil - } - d.decode(&mv) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolStringR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]string) - v, changed := fastpathTV.DecMapBoolStringV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]string) - fastpathTV.DecMapBoolStringV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolStringX(vp *map[bool]string, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolStringV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolStringV(v map[bool]string, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]string, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17) - v = make(map[bool]string, xlen) - changed = true - } - - var mk bool - var mv string - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeString() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolUintR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]uint) - v, changed := fastpathTV.DecMapBoolUintV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]uint) - fastpathTV.DecMapBoolUintV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolUintX(vp *map[bool]uint, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolUintV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolUintV(v map[bool]uint, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]uint, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[bool]uint, xlen) - changed = true - } - - var mk bool - var mv uint - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolUint8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]uint8) - v, changed := fastpathTV.DecMapBoolUint8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]uint8) - fastpathTV.DecMapBoolUint8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolUint8X(vp *map[bool]uint8, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolUint8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolUint8V(v map[bool]uint8, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]uint8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[bool]uint8, xlen) - changed = true - } - - var mk bool - var mv uint8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint8(dd.DecodeUint(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolUint16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]uint16) - v, changed := fastpathTV.DecMapBoolUint16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]uint16) - fastpathTV.DecMapBoolUint16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolUint16X(vp *map[bool]uint16, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolUint16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolUint16V(v map[bool]uint16, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]uint16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[bool]uint16, xlen) - changed = true - } - - var mk bool - var mv uint16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint16(dd.DecodeUint(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolUint32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]uint32) - v, changed := fastpathTV.DecMapBoolUint32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]uint32) - fastpathTV.DecMapBoolUint32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolUint32X(vp *map[bool]uint32, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolUint32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolUint32V(v map[bool]uint32, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]uint32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[bool]uint32, xlen) - changed = true - } - - var mk bool - var mv uint32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uint32(dd.DecodeUint(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolUint64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]uint64) - v, changed := fastpathTV.DecMapBoolUint64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]uint64) - fastpathTV.DecMapBoolUint64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolUint64X(vp *map[bool]uint64, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolUint64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolUint64V(v map[bool]uint64, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]uint64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[bool]uint64, xlen) - changed = true - } - - var mk bool - var mv uint64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeUint(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolUintptrR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]uintptr) - v, changed := fastpathTV.DecMapBoolUintptrV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]uintptr) - fastpathTV.DecMapBoolUintptrV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolUintptrX(vp *map[bool]uintptr, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolUintptrV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolUintptrV(v map[bool]uintptr, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]uintptr, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[bool]uintptr, xlen) - changed = true - } - - var mk bool - var mv uintptr - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = uintptr(dd.DecodeUint(uintBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolIntR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]int) - v, changed := fastpathTV.DecMapBoolIntV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]int) - fastpathTV.DecMapBoolIntV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolIntX(vp *map[bool]int, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolIntV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolIntV(v map[bool]int, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]int, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[bool]int, xlen) - changed = true - } - - var mk bool - var mv int - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int(dd.DecodeInt(intBitsize)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolInt8R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]int8) - v, changed := fastpathTV.DecMapBoolInt8V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]int8) - fastpathTV.DecMapBoolInt8V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolInt8X(vp *map[bool]int8, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolInt8V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolInt8V(v map[bool]int8, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]int8, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[bool]int8, xlen) - changed = true - } - - var mk bool - var mv int8 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int8(dd.DecodeInt(8)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolInt16R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]int16) - v, changed := fastpathTV.DecMapBoolInt16V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]int16) - fastpathTV.DecMapBoolInt16V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolInt16X(vp *map[bool]int16, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolInt16V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolInt16V(v map[bool]int16, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]int16, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3) - v = make(map[bool]int16, xlen) - changed = true - } - - var mk bool - var mv int16 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int16(dd.DecodeInt(16)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolInt32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]int32) - v, changed := fastpathTV.DecMapBoolInt32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]int32) - fastpathTV.DecMapBoolInt32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolInt32X(vp *map[bool]int32, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolInt32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolInt32V(v map[bool]int32, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]int32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[bool]int32, xlen) - changed = true - } - - var mk bool - var mv int32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = int32(dd.DecodeInt(32)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolInt64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]int64) - v, changed := fastpathTV.DecMapBoolInt64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]int64) - fastpathTV.DecMapBoolInt64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolInt64X(vp *map[bool]int64, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolInt64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolInt64V(v map[bool]int64, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]int64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[bool]int64, xlen) - changed = true - } - - var mk bool - var mv int64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeInt(64) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolFloat32R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]float32) - v, changed := fastpathTV.DecMapBoolFloat32V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]float32) - fastpathTV.DecMapBoolFloat32V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolFloat32X(vp *map[bool]float32, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolFloat32V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolFloat32V(v map[bool]float32, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]float32, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5) - v = make(map[bool]float32, xlen) - changed = true - } - - var mk bool - var mv float32 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = float32(dd.DecodeFloat(true)) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolFloat64R(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]float64) - v, changed := fastpathTV.DecMapBoolFloat64V(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]float64) - fastpathTV.DecMapBoolFloat64V(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolFloat64X(vp *map[bool]float64, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolFloat64V(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolFloat64V(v map[bool]float64, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]float64, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9) - v = make(map[bool]float64, xlen) - changed = true - } - - var mk bool - var mv float64 - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeFloat(false) - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} - -func (f *decFnInfo) fastpathDecMapBoolBoolR(rv reflect.Value) { - if rv.CanAddr() { - vp := rv.Addr().Interface().(*map[bool]bool) - v, changed := fastpathTV.DecMapBoolBoolV(*vp, fastpathCheckNilFalse, true, f.d) - if changed { - *vp = v - } - } else { - v := rv.Interface().(map[bool]bool) - fastpathTV.DecMapBoolBoolV(v, fastpathCheckNilFalse, false, f.d) - } -} -func (f fastpathT) DecMapBoolBoolX(vp *map[bool]bool, checkNil bool, d *Decoder) { - v, changed := f.DecMapBoolBoolV(*vp, checkNil, true, d) - if changed { - *vp = v - } -} -func (_ fastpathT) DecMapBoolBoolV(v map[bool]bool, checkNil bool, canChange bool, - d *Decoder) (_ map[bool]bool, changed bool) { - dd := d.d - cr := d.cr - - if checkNil && dd.TryDecodeAsNil() { - if v != nil { - changed = true - } - return nil, changed - } - - containerLen := dd.ReadMapStart() - if canChange && v == nil { - xlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2) - v = make(map[bool]bool, xlen) - changed = true - } - - var mk bool - var mv bool - if containerLen > 0 { - for j := 0; j < containerLen; j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } else if containerLen < 0 { - for j := 0; !dd.CheckBreak(); j++ { - if cr != nil { - cr.sendContainerState(containerMapKey) - } - mk = dd.DecodeBool() - if cr != nil { - cr.sendContainerState(containerMapValue) - } - mv = dd.DecodeBool() - if v != nil { - v[mk] = mv - } - } - } - if cr != nil { - cr.sendContainerState(containerMapEnd) - } - return v, changed -} diff --git a/vendor/github.com/ugorji/go/codec/fast-path.not.go b/vendor/github.com/ugorji/go/codec/fast-path.not.go deleted file mode 100644 index d6f5f0c91..000000000 --- a/vendor/github.com/ugorji/go/codec/fast-path.not.go +++ /dev/null @@ -1,32 +0,0 @@ -// +build notfastpath - -package codec - -import "reflect" - -// The generated fast-path code is very large, and adds a few seconds to the build time. -// This causes test execution, execution of small tools which use codec, etc -// to take a long time. -// -// To mitigate, we now support the notfastpath tag. -// This tag disables fastpath during build, allowing for faster build, test execution, -// short-program runs, etc. - -func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool { return false } -func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool { return false } -func fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool { return false } -func fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool { return false } - -type fastpathT struct{} -type fastpathE struct { - rtid uintptr - rt reflect.Type - encfn func(*encFnInfo, reflect.Value) - decfn func(*decFnInfo, reflect.Value) -} -type fastpathA [0]fastpathE - -func (x fastpathA) index(rtid uintptr) int { return -1 } - -var fastpathAV fastpathA -var fastpathTV fastpathT diff --git a/vendor/github.com/ugorji/go/codec/gen-helper.generated.go b/vendor/github.com/ugorji/go/codec/gen-helper.generated.go deleted file mode 100644 index 22bce776b..000000000 --- a/vendor/github.com/ugorji/go/codec/gen-helper.generated.go +++ /dev/null @@ -1,233 +0,0 @@ -// //+build ignore - -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// ************************************************************ -// DO NOT EDIT. -// THIS FILE IS AUTO-GENERATED from gen-helper.go.tmpl -// ************************************************************ - -package codec - -import ( - "encoding" - "reflect" -) - -// This file is used to generate helper code for codecgen. -// The values here i.e. genHelper(En|De)coder are not to be used directly by -// library users. They WILL change continously and without notice. -// -// To help enforce this, we create an unexported type with exported members. -// The only way to get the type is via the one exported type that we control (somewhat). -// -// When static codecs are created for types, they will use this value -// to perform encoding or decoding of primitives or known slice or map types. - -// GenHelperEncoder is exported so that it can be used externally by codecgen. -// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE. -func GenHelperEncoder(e *Encoder) (genHelperEncoder, encDriver) { - return genHelperEncoder{e: e}, e.e -} - -// GenHelperDecoder is exported so that it can be used externally by codecgen. -// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE. -func GenHelperDecoder(d *Decoder) (genHelperDecoder, decDriver) { - return genHelperDecoder{d: d}, d.d -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -type genHelperEncoder struct { - e *Encoder - F fastpathT -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -type genHelperDecoder struct { - d *Decoder - F fastpathT -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBasicHandle() *BasicHandle { - return f.e.h -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBinary() bool { - return f.e.be // f.e.hh.isBinaryEncoding() -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncFallback(iv interface{}) { - // println(">>>>>>>>> EncFallback") - f.e.encodeI(iv, false, false) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncTextMarshal(iv encoding.TextMarshaler) { - bs, fnerr := iv.MarshalText() - f.e.marshal(bs, fnerr, false, c_UTF8) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncJSONMarshal(iv jsonMarshaler) { - bs, fnerr := iv.MarshalJSON() - f.e.marshal(bs, fnerr, true, c_UTF8) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncBinaryMarshal(iv encoding.BinaryMarshaler) { - bs, fnerr := iv.MarshalBinary() - f.e.marshal(bs, fnerr, false, c_RAW) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) TimeRtidIfBinc() uintptr { - if _, ok := f.e.hh.(*BincHandle); ok { - return timeTypId - } - return 0 -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) IsJSONHandle() bool { - return f.e.js -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) HasExtensions() bool { - return len(f.e.h.extHandle) != 0 -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncExt(v interface{}) (r bool) { - rt := reflect.TypeOf(v) - if rt.Kind() == reflect.Ptr { - rt = rt.Elem() - } - rtid := reflect.ValueOf(rt).Pointer() - if xfFn := f.e.h.getExt(rtid); xfFn != nil { - f.e.e.EncodeExt(v, xfFn.tag, xfFn.ext, f.e) - return true - } - return false -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperEncoder) EncSendContainerState(c containerState) { - if f.e.cr != nil { - f.e.cr.sendContainerState(c) - } -} - -// ---------------- DECODER FOLLOWS ----------------- - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBasicHandle() *BasicHandle { - return f.d.h -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBinary() bool { - return f.d.be // f.d.hh.isBinaryEncoding() -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecSwallow() { - f.d.swallow() -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecScratchBuffer() []byte { - return f.d.b[:] -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecFallback(iv interface{}, chkPtr bool) { - // println(">>>>>>>>> DecFallback") - f.d.decodeI(iv, chkPtr, false, false, false) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecSliceHelperStart() (decSliceHelper, int) { - return f.d.decSliceHelperStart() -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecStructFieldNotFound(index int, name string) { - f.d.structFieldNotFound(index, name) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecArrayCannotExpand(sliceLen, streamLen int) { - f.d.arrayCannotExpand(sliceLen, streamLen) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecTextUnmarshal(tm encoding.TextUnmarshaler) { - fnerr := tm.UnmarshalText(f.d.d.DecodeBytes(f.d.b[:], true, true)) - if fnerr != nil { - panic(fnerr) - } -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecJSONUnmarshal(tm jsonUnmarshaler) { - // bs := f.dd.DecodeBytes(f.d.b[:], true, true) - // grab the bytes to be read, as UnmarshalJSON needs the full JSON so as to unmarshal it itself. - fnerr := tm.UnmarshalJSON(f.d.nextValueBytes()) - if fnerr != nil { - panic(fnerr) - } -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecBinaryUnmarshal(bm encoding.BinaryUnmarshaler) { - fnerr := bm.UnmarshalBinary(f.d.d.DecodeBytes(nil, false, true)) - if fnerr != nil { - panic(fnerr) - } -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) TimeRtidIfBinc() uintptr { - if _, ok := f.d.hh.(*BincHandle); ok { - return timeTypId - } - return 0 -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) IsJSONHandle() bool { - return f.d.js -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) HasExtensions() bool { - return len(f.d.h.extHandle) != 0 -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecExt(v interface{}) (r bool) { - rt := reflect.TypeOf(v).Elem() - rtid := reflect.ValueOf(rt).Pointer() - if xfFn := f.d.h.getExt(rtid); xfFn != nil { - f.d.d.DecodeExt(v, xfFn.tag, xfFn.ext) - return true - } - return false -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecInferLen(clen, maxlen, unit int) (rvlen int, truncated bool) { - return decInferLen(clen, maxlen, unit) -} - -// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE* -func (f genHelperDecoder) DecSendContainerState(c containerState) { - if f.d.cr != nil { - f.d.cr.sendContainerState(c) - } -} diff --git a/vendor/github.com/ugorji/go/codec/gen.generated.go b/vendor/github.com/ugorji/go/codec/gen.generated.go deleted file mode 100644 index 2ace97b78..000000000 --- a/vendor/github.com/ugorji/go/codec/gen.generated.go +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -// DO NOT EDIT. THIS FILE IS AUTO-GENERATED FROM gen-dec-(map|array).go.tmpl - -const genDecMapTmpl = ` -{{var "v"}} := *{{ .Varname }} -{{var "l"}} := r.ReadMapStart() -{{var "bh"}} := z.DecBasicHandle() -if {{var "v"}} == nil { - {{var "rl"}}, _ := z.DecInferLen({{var "l"}}, {{var "bh"}}.MaxInitLen, {{ .Size }}) - {{var "v"}} = make(map[{{ .KTyp }}]{{ .Typ }}, {{var "rl"}}) - *{{ .Varname }} = {{var "v"}} -} -var {{var "mk"}} {{ .KTyp }} -var {{var "mv"}} {{ .Typ }} -var {{var "mg"}} {{if decElemKindPtr}}, {{var "ms"}}, {{var "mok"}}{{end}} bool -if {{var "bh"}}.MapValueReset { - {{if decElemKindPtr}}{{var "mg"}} = true - {{else if decElemKindIntf}}if !{{var "bh"}}.InterfaceReset { {{var "mg"}} = true } - {{else if not decElemKindImmutable}}{{var "mg"}} = true - {{end}} } -if {{var "l"}} > 0 { -for {{var "j"}} := 0; {{var "j"}} < {{var "l"}}; {{var "j"}}++ { - z.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }}) - {{ $x := printf "%vmk%v" .TempVar .Rand }}{{ decLineVarK $x }} -{{ if eq .KTyp "interface{}" }}{{/* // special case if a byte array. */}}if {{var "bv"}}, {{var "bok"}} := {{var "mk"}}.([]byte); {{var "bok"}} { - {{var "mk"}} = string({{var "bv"}}) - }{{ end }}{{if decElemKindPtr}} - {{var "ms"}} = true{{end}} - if {{var "mg"}} { - {{if decElemKindPtr}}{{var "mv"}}, {{var "mok"}} = {{var "v"}}[{{var "mk"}}] - if {{var "mok"}} { - {{var "ms"}} = false - } {{else}}{{var "mv"}} = {{var "v"}}[{{var "mk"}}] {{end}} - } {{if not decElemKindImmutable}}else { {{var "mv"}} = {{decElemZero}} }{{end}} - z.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }}) - {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ decLineVar $x }} - if {{if decElemKindPtr}} {{var "ms"}} && {{end}} {{var "v"}} != nil { - {{var "v"}}[{{var "mk"}}] = {{var "mv"}} - } -} -} else if {{var "l"}} < 0 { -for {{var "j"}} := 0; !r.CheckBreak(); {{var "j"}}++ { - z.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }}) - {{ $x := printf "%vmk%v" .TempVar .Rand }}{{ decLineVarK $x }} -{{ if eq .KTyp "interface{}" }}{{/* // special case if a byte array. */}}if {{var "bv"}}, {{var "bok"}} := {{var "mk"}}.([]byte); {{var "bok"}} { - {{var "mk"}} = string({{var "bv"}}) - }{{ end }}{{if decElemKindPtr}} - {{var "ms"}} = true {{ end }} - if {{var "mg"}} { - {{if decElemKindPtr}}{{var "mv"}}, {{var "mok"}} = {{var "v"}}[{{var "mk"}}] - if {{var "mok"}} { - {{var "ms"}} = false - } {{else}}{{var "mv"}} = {{var "v"}}[{{var "mk"}}] {{end}} - } {{if not decElemKindImmutable}}else { {{var "mv"}} = {{decElemZero}} }{{end}} - z.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }}) - {{ $x := printf "%vmv%v" .TempVar .Rand }}{{ decLineVar $x }} - if {{if decElemKindPtr}} {{var "ms"}} && {{end}} {{var "v"}} != nil { - {{var "v"}}[{{var "mk"}}] = {{var "mv"}} - } -} -} // else len==0: TODO: Should we clear map entries? -z.DecSendContainerState(codecSelfer_containerMapEnd{{ .Sfx }}) -` - -const genDecListTmpl = ` -{{var "v"}} := {{if not isArray}}*{{end}}{{ .Varname }} -{{var "h"}}, {{var "l"}} := z.DecSliceHelperStart() {{/* // helper, containerLenS */}}{{if not isArray}} -var {{var "c"}} bool {{/* // changed */}} -_ = {{var "c"}}{{end}} -if {{var "l"}} == 0 { - {{if isSlice }}if {{var "v"}} == nil { - {{var "v"}} = []{{ .Typ }}{} - {{var "c"}} = true - } else if len({{var "v"}}) != 0 { - {{var "v"}} = {{var "v"}}[:0] - {{var "c"}} = true - } {{end}} {{if isChan }}if {{var "v"}} == nil { - {{var "v"}} = make({{ .CTyp }}, 0) - {{var "c"}} = true - } {{end}} -} else if {{var "l"}} > 0 { - {{if isChan }}if {{var "v"}} == nil { - {{var "rl"}}, _ = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }}) - {{var "v"}} = make({{ .CTyp }}, {{var "rl"}}) - {{var "c"}} = true - } - for {{var "r"}} := 0; {{var "r"}} < {{var "l"}}; {{var "r"}}++ { - {{var "h"}}.ElemContainerState({{var "r"}}) - var {{var "t"}} {{ .Typ }} - {{ $x := printf "%st%s" .TempVar .Rand }}{{ decLineVar $x }} - {{var "v"}} <- {{var "t"}} - } - {{ else }} var {{var "rr"}}, {{var "rl"}} int {{/* // num2read, length of slice/array/chan */}} - var {{var "rt"}} bool {{/* truncated */}} - _, _ = {{var "rl"}}, {{var "rt"}} - {{var "rr"}} = {{var "l"}} // len({{var "v"}}) - if {{var "l"}} > cap({{var "v"}}) { - {{if isArray }}z.DecArrayCannotExpand(len({{var "v"}}), {{var "l"}}) - {{ else }}{{if not .Immutable }} - {{var "rg"}} := len({{var "v"}}) > 0 - {{var "v2"}} := {{var "v"}} {{end}} - {{var "rl"}}, {{var "rt"}} = z.DecInferLen({{var "l"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }}) - if {{var "rt"}} { - if {{var "rl"}} <= cap({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "rl"}}] - } else { - {{var "v"}} = make([]{{ .Typ }}, {{var "rl"}}) - } - } else { - {{var "v"}} = make([]{{ .Typ }}, {{var "rl"}}) - } - {{var "c"}} = true - {{var "rr"}} = len({{var "v"}}) {{if not .Immutable }} - if {{var "rg"}} { copy({{var "v"}}, {{var "v2"}}) } {{end}} {{end}}{{/* end not Immutable, isArray */}} - } {{if isSlice }} else if {{var "l"}} != len({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "l"}}] - {{var "c"}} = true - } {{end}} {{/* end isSlice:47 */}} - {{var "j"}} := 0 - for ; {{var "j"}} < {{var "rr"}} ; {{var "j"}}++ { - {{var "h"}}.ElemContainerState({{var "j"}}) - {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }} - } - {{if isArray }}for ; {{var "j"}} < {{var "l"}} ; {{var "j"}}++ { - {{var "h"}}.ElemContainerState({{var "j"}}) - z.DecSwallow() - } - {{ else }}if {{var "rt"}} { - for ; {{var "j"}} < {{var "l"}} ; {{var "j"}}++ { - {{var "v"}} = append({{var "v"}}, {{ zero}}) - {{var "h"}}.ElemContainerState({{var "j"}}) - {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }} - } - } {{end}} {{/* end isArray:56 */}} - {{end}} {{/* end isChan:16 */}} -} else { {{/* len < 0 */}} - {{var "j"}} := 0 - for ; !r.CheckBreak(); {{var "j"}}++ { - {{if isChan }} - {{var "h"}}.ElemContainerState({{var "j"}}) - var {{var "t"}} {{ .Typ }} - {{ $x := printf "%st%s" .TempVar .Rand }}{{ decLineVar $x }} - {{var "v"}} <- {{var "t"}} - {{ else }} - if {{var "j"}} >= len({{var "v"}}) { - {{if isArray }}z.DecArrayCannotExpand(len({{var "v"}}), {{var "j"}}+1) - {{ else }}{{var "v"}} = append({{var "v"}}, {{zero}})// var {{var "z"}} {{ .Typ }} - {{var "c"}} = true {{end}} - } - {{var "h"}}.ElemContainerState({{var "j"}}) - if {{var "j"}} < len({{var "v"}}) { - {{ $x := printf "%[1]vv%[2]v[%[1]vj%[2]v]" .TempVar .Rand }}{{ decLineVar $x }} - } else { - z.DecSwallow() - } - {{end}} - } - {{if isSlice }}if {{var "j"}} < len({{var "v"}}) { - {{var "v"}} = {{var "v"}}[:{{var "j"}}] - {{var "c"}} = true - } else if {{var "j"}} == 0 && {{var "v"}} == nil { - {{var "v"}} = []{{ .Typ }}{} - {{var "c"}} = true - }{{end}} -} -{{var "h"}}.End() -{{if not isArray }}if {{var "c"}} { - *{{ .Varname }} = {{var "v"}} -}{{end}} -` - diff --git a/vendor/github.com/ugorji/go/codec/gen.go b/vendor/github.com/ugorji/go/codec/gen.go deleted file mode 100644 index ac8cc6ddc..000000000 --- a/vendor/github.com/ugorji/go/codec/gen.go +++ /dev/null @@ -1,1995 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "bytes" - "encoding/base64" - "errors" - "fmt" - "go/format" - "io" - "io/ioutil" - "math/rand" - "reflect" - "regexp" - "sort" - "strconv" - "strings" - "sync" - "text/template" - "time" - "unicode" - "unicode/utf8" -) - -// --------------------------------------------------- -// codecgen supports the full cycle of reflection-based codec: -// - RawExt -// - Builtins -// - Extensions -// - (Binary|Text|JSON)(Unm|M)arshal -// - generic by-kind -// -// This means that, for dynamic things, we MUST use reflection to at least get the reflect.Type. -// In those areas, we try to only do reflection or interface-conversion when NECESSARY: -// - Extensions, only if Extensions are configured. -// -// However, codecgen doesn't support the following: -// - Canonical option. (codecgen IGNORES it currently) -// This is just because it has not been implemented. -// -// During encode/decode, Selfer takes precedence. -// A type implementing Selfer will know how to encode/decode itself statically. -// -// The following field types are supported: -// array: [n]T -// slice: []T -// map: map[K]V -// primitive: [u]int[n], float(32|64), bool, string -// struct -// -// --------------------------------------------------- -// Note that a Selfer cannot call (e|d).(En|De)code on itself, -// as this will cause a circular reference, as (En|De)code will call Selfer methods. -// Any type that implements Selfer must implement completely and not fallback to (En|De)code. -// -// In addition, code in this file manages the generation of fast-path implementations of -// encode/decode of slices/maps of primitive keys/values. -// -// Users MUST re-generate their implementations whenever the code shape changes. -// The generated code will panic if it was generated with a version older than the supporting library. -// --------------------------------------------------- -// -// codec framework is very feature rich. -// When encoding or decoding into an interface, it depends on the runtime type of the interface. -// The type of the interface may be a named type, an extension, etc. -// Consequently, we fallback to runtime codec for encoding/decoding interfaces. -// In addition, we fallback for any value which cannot be guaranteed at runtime. -// This allows us support ANY value, including any named types, specifically those which -// do not implement our interfaces (e.g. Selfer). -// -// This explains some slowness compared to other code generation codecs (e.g. msgp). -// This reduction in speed is only seen when your refers to interfaces, -// e.g. type T struct { A interface{}; B []interface{}; C map[string]interface{} } -// -// codecgen will panic if the file was generated with an old version of the library in use. -// -// Note: -// It was a concious decision to have gen.go always explicitly call EncodeNil or TryDecodeAsNil. -// This way, there isn't a function call overhead just to see that we should not enter a block of code. - -// GenVersion is the current version of codecgen. -// -// NOTE: Increment this value each time codecgen changes fundamentally. -// Fundamental changes are: -// - helper methods change (signature change, new ones added, some removed, etc) -// - codecgen command line changes -// -// v1: Initial Version -// v2: -// v3: Changes for Kubernetes: -// changes in signature of some unpublished helper methods and codecgen cmdline arguments. -// v4: Removed separator support from (en|de)cDriver, and refactored codec(gen) -// v5: changes to support faster json decoding. Let encoder/decoder maintain state of collections. -const GenVersion = 5 - -const ( - genCodecPkg = "codec1978" - genTempVarPfx = "yy" - genTopLevelVarName = "x" - - // ignore canBeNil parameter, and always set to true. - // This is because nil can appear anywhere, so we should always check. - genAnythingCanBeNil = true - - // if genUseOneFunctionForDecStructMap, make a single codecDecodeSelferFromMap function; - // else make codecDecodeSelferFromMap{LenPrefix,CheckBreak} so that conditionals - // are not executed a lot. - // - // From testing, it didn't make much difference in runtime, so keep as true (one function only) - genUseOneFunctionForDecStructMap = true -) - -type genStructMapStyle uint8 - -const ( - genStructMapStyleConsolidated genStructMapStyle = iota - genStructMapStyleLenPrefix - genStructMapStyleCheckBreak -) - -var ( - genAllTypesSamePkgErr = errors.New("All types must be in the same package") - genExpectArrayOrMapErr = errors.New("unexpected type. Expecting array/map/slice") - genBase64enc = base64.NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789__") - genQNameRegex = regexp.MustCompile(`[A-Za-z_.]+`) - genCheckVendor bool -) - -// genRunner holds some state used during a Gen run. -type genRunner struct { - w io.Writer // output - c uint64 // counter used for generating varsfx - t []reflect.Type // list of types to run selfer on - - tc reflect.Type // currently running selfer on this type - te map[uintptr]bool // types for which the encoder has been created - td map[uintptr]bool // types for which the decoder has been created - cp string // codec import path - - im map[string]reflect.Type // imports to add - imn map[string]string // package names of imports to add - imc uint64 // counter for import numbers - - is map[reflect.Type]struct{} // types seen during import search - bp string // base PkgPath, for which we are generating for - - cpfx string // codec package prefix - unsafe bool // is unsafe to be used in generated code? - - tm map[reflect.Type]struct{} // types for which enc/dec must be generated - ts []reflect.Type // types for which enc/dec must be generated - - xs string // top level variable/constant suffix - hn string // fn helper type name - - ti *TypeInfos - // rr *rand.Rand // random generator for file-specific types -} - -// Gen will write a complete go file containing Selfer implementations for each -// type passed. All the types must be in the same package. -// -// Library users: *DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.* -func Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeInfos, typ ...reflect.Type) { - // trim out all types which already implement Selfer - typ2 := make([]reflect.Type, 0, len(typ)) - for _, t := range typ { - if reflect.PtrTo(t).Implements(selferTyp) || t.Implements(selferTyp) { - continue - } - typ2 = append(typ2, t) - } - typ = typ2 - - if len(typ) == 0 { - return - } - x := genRunner{ - unsafe: useUnsafe, - w: w, - t: typ, - te: make(map[uintptr]bool), - td: make(map[uintptr]bool), - im: make(map[string]reflect.Type), - imn: make(map[string]string), - is: make(map[reflect.Type]struct{}), - tm: make(map[reflect.Type]struct{}), - ts: []reflect.Type{}, - bp: genImportPath(typ[0]), - xs: uid, - ti: ti, - } - if x.ti == nil { - x.ti = defTypeInfos - } - if x.xs == "" { - rr := rand.New(rand.NewSource(time.Now().UnixNano())) - x.xs = strconv.FormatInt(rr.Int63n(9999), 10) - } - - // gather imports first: - x.cp = genImportPath(reflect.TypeOf(x)) - x.imn[x.cp] = genCodecPkg - for _, t := range typ { - // fmt.Printf("###########: PkgPath: '%v', Name: '%s'\n", genImportPath(t), t.Name()) - if genImportPath(t) != x.bp { - panic(genAllTypesSamePkgErr) - } - x.genRefPkgs(t) - } - if buildTags != "" { - x.line("//+build " + buildTags) - x.line("") - } - x.line(` - -// ************************************************************ -// DO NOT EDIT. -// THIS FILE IS AUTO-GENERATED BY codecgen. -// ************************************************************ - -`) - x.line("package " + pkgName) - x.line("") - x.line("import (") - if x.cp != x.bp { - x.cpfx = genCodecPkg + "." - x.linef("%s \"%s\"", genCodecPkg, x.cp) - } - // use a sorted set of im keys, so that we can get consistent output - imKeys := make([]string, 0, len(x.im)) - for k, _ := range x.im { - imKeys = append(imKeys, k) - } - sort.Strings(imKeys) - for _, k := range imKeys { // for k, _ := range x.im { - x.linef("%s \"%s\"", x.imn[k], k) - } - // add required packages - for _, k := range [...]string{"reflect", "unsafe", "runtime", "fmt", "errors"} { - if _, ok := x.im[k]; !ok { - if k == "unsafe" && !x.unsafe { - continue - } - x.line("\"" + k + "\"") - } - } - x.line(")") - x.line("") - - x.line("const (") - x.linef("// ----- content types ----") - x.linef("codecSelferC_UTF8%s = %v", x.xs, int64(c_UTF8)) - x.linef("codecSelferC_RAW%s = %v", x.xs, int64(c_RAW)) - x.linef("// ----- value types used ----") - x.linef("codecSelferValueTypeArray%s = %v", x.xs, int64(valueTypeArray)) - x.linef("codecSelferValueTypeMap%s = %v", x.xs, int64(valueTypeMap)) - x.linef("// ----- containerStateValues ----") - x.linef("codecSelfer_containerMapKey%s = %v", x.xs, int64(containerMapKey)) - x.linef("codecSelfer_containerMapValue%s = %v", x.xs, int64(containerMapValue)) - x.linef("codecSelfer_containerMapEnd%s = %v", x.xs, int64(containerMapEnd)) - x.linef("codecSelfer_containerArrayElem%s = %v", x.xs, int64(containerArrayElem)) - x.linef("codecSelfer_containerArrayEnd%s = %v", x.xs, int64(containerArrayEnd)) - x.line(")") - x.line("var (") - x.line("codecSelferBitsize" + x.xs + " = uint8(reflect.TypeOf(uint(0)).Bits())") - x.line("codecSelferOnlyMapOrArrayEncodeToStructErr" + x.xs + " = errors.New(`only encoded map or array can be decoded into a struct`)") - x.line(")") - x.line("") - - if x.unsafe { - x.line("type codecSelferUnsafeString" + x.xs + " struct { Data uintptr; Len int}") - x.line("") - } - x.hn = "codecSelfer" + x.xs - x.line("type " + x.hn + " struct{}") - x.line("") - - x.varsfxreset() - x.line("func init() {") - x.linef("if %sGenVersion != %v {", x.cpfx, GenVersion) - x.line("_, file, _, _ := runtime.Caller(0)") - x.line(`err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", `) - x.linef(`%v, %sGenVersion, file)`, GenVersion, x.cpfx) - x.line("panic(err)") - x.linef("}") - x.line("if false { // reference the types, but skip this branch at build/run time") - var n int - // for k, t := range x.im { - for _, k := range imKeys { - t := x.im[k] - x.linef("var v%v %s.%s", n, x.imn[k], t.Name()) - n++ - } - if x.unsafe { - x.linef("var v%v unsafe.Pointer", n) - n++ - } - if n > 0 { - x.out("_") - for i := 1; i < n; i++ { - x.out(", _") - } - x.out(" = v0") - for i := 1; i < n; i++ { - x.outf(", v%v", i) - } - } - x.line("} ") // close if false - x.line("}") // close init - x.line("") - - // generate rest of type info - for _, t := range typ { - x.tc = t - x.selfer(true) - x.selfer(false) - } - - for _, t := range x.ts { - rtid := reflect.ValueOf(t).Pointer() - // generate enc functions for all these slice/map types. - x.varsfxreset() - x.linef("func (x %s) enc%s(v %s%s, e *%sEncoder) {", x.hn, x.genMethodNameT(t), x.arr2str(t, "*"), x.genTypeName(t), x.cpfx) - x.genRequiredMethodVars(true) - switch t.Kind() { - case reflect.Array, reflect.Slice, reflect.Chan: - x.encListFallback("v", t) - case reflect.Map: - x.encMapFallback("v", t) - default: - panic(genExpectArrayOrMapErr) - } - x.line("}") - x.line("") - - // generate dec functions for all these slice/map types. - x.varsfxreset() - x.linef("func (x %s) dec%s(v *%s, d *%sDecoder) {", x.hn, x.genMethodNameT(t), x.genTypeName(t), x.cpfx) - x.genRequiredMethodVars(false) - switch t.Kind() { - case reflect.Array, reflect.Slice, reflect.Chan: - x.decListFallback("v", rtid, t) - case reflect.Map: - x.decMapFallback("v", rtid, t) - default: - panic(genExpectArrayOrMapErr) - } - x.line("}") - x.line("") - } - - x.line("") -} - -func (x *genRunner) checkForSelfer(t reflect.Type, varname string) bool { - // return varname != genTopLevelVarName && t != x.tc - // the only time we checkForSelfer is if we are not at the TOP of the generated code. - return varname != genTopLevelVarName -} - -func (x *genRunner) arr2str(t reflect.Type, s string) string { - if t.Kind() == reflect.Array { - return s - } - return "" -} - -func (x *genRunner) genRequiredMethodVars(encode bool) { - x.line("var h " + x.hn) - if encode { - x.line("z, r := " + x.cpfx + "GenHelperEncoder(e)") - } else { - x.line("z, r := " + x.cpfx + "GenHelperDecoder(d)") - } - x.line("_, _, _ = h, z, r") -} - -func (x *genRunner) genRefPkgs(t reflect.Type) { - if _, ok := x.is[t]; ok { - return - } - // fmt.Printf(">>>>>>: PkgPath: '%v', Name: '%s'\n", genImportPath(t), t.Name()) - x.is[t] = struct{}{} - tpkg, tname := genImportPath(t), t.Name() - if tpkg != "" && tpkg != x.bp && tpkg != x.cp && tname != "" && tname[0] >= 'A' && tname[0] <= 'Z' { - if _, ok := x.im[tpkg]; !ok { - x.im[tpkg] = t - if idx := strings.LastIndex(tpkg, "/"); idx < 0 { - x.imn[tpkg] = tpkg - } else { - x.imc++ - x.imn[tpkg] = "pkg" + strconv.FormatUint(x.imc, 10) + "_" + genGoIdentifier(tpkg[idx+1:], false) - } - } - } - switch t.Kind() { - case reflect.Array, reflect.Slice, reflect.Ptr, reflect.Chan: - x.genRefPkgs(t.Elem()) - case reflect.Map: - x.genRefPkgs(t.Elem()) - x.genRefPkgs(t.Key()) - case reflect.Struct: - for i := 0; i < t.NumField(); i++ { - if fname := t.Field(i).Name; fname != "" && fname[0] >= 'A' && fname[0] <= 'Z' { - x.genRefPkgs(t.Field(i).Type) - } - } - } -} - -func (x *genRunner) line(s string) { - x.out(s) - if len(s) == 0 || s[len(s)-1] != '\n' { - x.out("\n") - } -} - -func (x *genRunner) varsfx() string { - x.c++ - return strconv.FormatUint(x.c, 10) -} - -func (x *genRunner) varsfxreset() { - x.c = 0 -} - -func (x *genRunner) out(s string) { - if _, err := io.WriteString(x.w, s); err != nil { - panic(err) - } -} - -func (x *genRunner) linef(s string, params ...interface{}) { - x.line(fmt.Sprintf(s, params...)) -} - -func (x *genRunner) outf(s string, params ...interface{}) { - x.out(fmt.Sprintf(s, params...)) -} - -func (x *genRunner) genTypeName(t reflect.Type) (n string) { - // defer func() { fmt.Printf(">>>> ####: genTypeName: t: %v, name: '%s'\n", t, n) }() - - // if the type has a PkgPath, which doesn't match the current package, - // then include it. - // We cannot depend on t.String() because it includes current package, - // or t.PkgPath because it includes full import path, - // - var ptrPfx string - for t.Kind() == reflect.Ptr { - ptrPfx += "*" - t = t.Elem() - } - if tn := t.Name(); tn != "" { - return ptrPfx + x.genTypeNamePrim(t) - } - switch t.Kind() { - case reflect.Map: - return ptrPfx + "map[" + x.genTypeName(t.Key()) + "]" + x.genTypeName(t.Elem()) - case reflect.Slice: - return ptrPfx + "[]" + x.genTypeName(t.Elem()) - case reflect.Array: - return ptrPfx + "[" + strconv.FormatInt(int64(t.Len()), 10) + "]" + x.genTypeName(t.Elem()) - case reflect.Chan: - return ptrPfx + t.ChanDir().String() + " " + x.genTypeName(t.Elem()) - default: - if t == intfTyp { - return ptrPfx + "interface{}" - } else { - return ptrPfx + x.genTypeNamePrim(t) - } - } -} - -func (x *genRunner) genTypeNamePrim(t reflect.Type) (n string) { - if t.Name() == "" { - return t.String() - } else if genImportPath(t) == "" || genImportPath(t) == genImportPath(x.tc) { - return t.Name() - } else { - return x.imn[genImportPath(t)] + "." + t.Name() - // return t.String() // best way to get the package name inclusive - } -} - -func (x *genRunner) genZeroValueR(t reflect.Type) string { - // if t is a named type, w - switch t.Kind() { - case reflect.Ptr, reflect.Interface, reflect.Chan, reflect.Func, - reflect.Slice, reflect.Map, reflect.Invalid: - return "nil" - case reflect.Bool: - return "false" - case reflect.String: - return `""` - case reflect.Struct, reflect.Array: - return x.genTypeName(t) + "{}" - default: // all numbers - return "0" - } -} - -func (x *genRunner) genMethodNameT(t reflect.Type) (s string) { - return genMethodNameT(t, x.tc) -} - -func (x *genRunner) selfer(encode bool) { - t := x.tc - t0 := t - // always make decode use a pointer receiver, - // and structs always use a ptr receiver (encode|decode) - isptr := !encode || t.Kind() == reflect.Struct - x.varsfxreset() - fnSigPfx := "func (x " - if isptr { - fnSigPfx += "*" - } - fnSigPfx += x.genTypeName(t) - - x.out(fnSigPfx) - if isptr { - t = reflect.PtrTo(t) - } - if encode { - x.line(") CodecEncodeSelf(e *" + x.cpfx + "Encoder) {") - x.genRequiredMethodVars(true) - // x.enc(genTopLevelVarName, t) - x.encVar(genTopLevelVarName, t) - } else { - x.line(") CodecDecodeSelf(d *" + x.cpfx + "Decoder) {") - x.genRequiredMethodVars(false) - // do not use decVar, as there is no need to check TryDecodeAsNil - // or way to elegantly handle that, and also setting it to a - // non-nil value doesn't affect the pointer passed. - // x.decVar(genTopLevelVarName, t, false) - x.dec(genTopLevelVarName, t0) - } - x.line("}") - x.line("") - - if encode || t0.Kind() != reflect.Struct { - return - } - - // write is containerMap - if genUseOneFunctionForDecStructMap { - x.out(fnSigPfx) - x.line(") codecDecodeSelfFromMap(l int, d *" + x.cpfx + "Decoder) {") - x.genRequiredMethodVars(false) - x.decStructMap(genTopLevelVarName, "l", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleConsolidated) - x.line("}") - x.line("") - } else { - x.out(fnSigPfx) - x.line(") codecDecodeSelfFromMapLenPrefix(l int, d *" + x.cpfx + "Decoder) {") - x.genRequiredMethodVars(false) - x.decStructMap(genTopLevelVarName, "l", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleLenPrefix) - x.line("}") - x.line("") - - x.out(fnSigPfx) - x.line(") codecDecodeSelfFromMapCheckBreak(l int, d *" + x.cpfx + "Decoder) {") - x.genRequiredMethodVars(false) - x.decStructMap(genTopLevelVarName, "l", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleCheckBreak) - x.line("}") - x.line("") - } - - // write containerArray - x.out(fnSigPfx) - x.line(") codecDecodeSelfFromArray(l int, d *" + x.cpfx + "Decoder) {") - x.genRequiredMethodVars(false) - x.decStructArray(genTopLevelVarName, "l", "return", reflect.ValueOf(t0).Pointer(), t0) - x.line("}") - x.line("") - -} - -// used for chan, array, slice, map -func (x *genRunner) xtraSM(varname string, encode bool, t reflect.Type) { - if encode { - x.linef("h.enc%s((%s%s)(%s), e)", x.genMethodNameT(t), x.arr2str(t, "*"), x.genTypeName(t), varname) - } else { - x.linef("h.dec%s((*%s)(%s), d)", x.genMethodNameT(t), x.genTypeName(t), varname) - } - x.registerXtraT(t) -} - -func (x *genRunner) registerXtraT(t reflect.Type) { - // recursively register the types - if _, ok := x.tm[t]; ok { - return - } - var tkey reflect.Type - switch t.Kind() { - case reflect.Chan, reflect.Slice, reflect.Array: - case reflect.Map: - tkey = t.Key() - default: - return - } - x.tm[t] = struct{}{} - x.ts = append(x.ts, t) - // check if this refers to any xtra types eg. a slice of array: add the array - x.registerXtraT(t.Elem()) - if tkey != nil { - x.registerXtraT(tkey) - } -} - -// encVar will encode a variable. -// The parameter, t, is the reflect.Type of the variable itself -func (x *genRunner) encVar(varname string, t reflect.Type) { - // fmt.Printf(">>>>>> varname: %s, t: %v\n", varname, t) - var checkNil bool - switch t.Kind() { - case reflect.Ptr, reflect.Interface, reflect.Slice, reflect.Map, reflect.Chan: - checkNil = true - } - if checkNil { - x.linef("if %s == nil { r.EncodeNil() } else { ", varname) - } - switch t.Kind() { - case reflect.Ptr: - switch t.Elem().Kind() { - case reflect.Struct, reflect.Array: - x.enc(varname, genNonPtr(t)) - default: - i := x.varsfx() - x.line(genTempVarPfx + i + " := *" + varname) - x.enc(genTempVarPfx+i, genNonPtr(t)) - } - case reflect.Struct, reflect.Array: - i := x.varsfx() - x.line(genTempVarPfx + i + " := &" + varname) - x.enc(genTempVarPfx+i, t) - default: - x.enc(varname, t) - } - - if checkNil { - x.line("}") - } - -} - -// enc will encode a variable (varname) of type t, -// except t is of kind reflect.Struct or reflect.Array, wherein varname is of type ptrTo(T) (to prevent copying) -func (x *genRunner) enc(varname string, t reflect.Type) { - rtid := reflect.ValueOf(t).Pointer() - // We call CodecEncodeSelf if one of the following are honored: - // - the type already implements Selfer, call that - // - the type has a Selfer implementation just created, use that - // - the type is in the list of the ones we will generate for, but it is not currently being generated - - mi := x.varsfx() - tptr := reflect.PtrTo(t) - tk := t.Kind() - if x.checkForSelfer(t, varname) { - if tk == reflect.Array || tk == reflect.Struct { // varname is of type *T - if tptr.Implements(selferTyp) || t.Implements(selferTyp) { - x.line(varname + ".CodecEncodeSelf(e)") - return - } - } else { // varname is of type T - if t.Implements(selferTyp) { - x.line(varname + ".CodecEncodeSelf(e)") - return - } else if tptr.Implements(selferTyp) { - x.linef("%ssf%s := &%s", genTempVarPfx, mi, varname) - x.linef("%ssf%s.CodecEncodeSelf(e)", genTempVarPfx, mi) - return - } - } - - if _, ok := x.te[rtid]; ok { - x.line(varname + ".CodecEncodeSelf(e)") - return - } - } - - inlist := false - for _, t0 := range x.t { - if t == t0 { - inlist = true - if x.checkForSelfer(t, varname) { - x.line(varname + ".CodecEncodeSelf(e)") - return - } - break - } - } - - var rtidAdded bool - if t == x.tc { - x.te[rtid] = true - rtidAdded = true - } - - // check if - // - type is RawExt - // - the type implements (Text|JSON|Binary)(Unm|M)arshal - x.linef("%sm%s := z.EncBinary()", genTempVarPfx, mi) - x.linef("_ = %sm%s", genTempVarPfx, mi) - x.line("if false {") //start if block - defer func() { x.line("}") }() //end if block - - if t == rawExtTyp { - x.linef("} else { r.EncodeRawExt(%v, e)", varname) - return - } - // HACK: Support for Builtins. - // Currently, only Binc supports builtins, and the only builtin type is time.Time. - // Have a method that returns the rtid for time.Time if Handle is Binc. - if t == timeTyp { - vrtid := genTempVarPfx + "m" + x.varsfx() - x.linef("} else if %s := z.TimeRtidIfBinc(); %s != 0 { ", vrtid, vrtid) - x.linef("r.EncodeBuiltin(%s, %s)", vrtid, varname) - } - // only check for extensions if the type is named, and has a packagePath. - if genImportPath(t) != "" && t.Name() != "" { - // first check if extensions are configued, before doing the interface conversion - x.linef("} else if z.HasExtensions() && z.EncExt(%s) {", varname) - } - if tk == reflect.Array || tk == reflect.Struct { // varname is of type *T - if t.Implements(binaryMarshalerTyp) || tptr.Implements(binaryMarshalerTyp) { - x.linef("} else if %sm%s { z.EncBinaryMarshal(%v) ", genTempVarPfx, mi, varname) - } - if t.Implements(jsonMarshalerTyp) || tptr.Implements(jsonMarshalerTyp) { - x.linef("} else if !%sm%s && z.IsJSONHandle() { z.EncJSONMarshal(%v) ", genTempVarPfx, mi, varname) - } else if t.Implements(textMarshalerTyp) || tptr.Implements(textMarshalerTyp) { - x.linef("} else if !%sm%s { z.EncTextMarshal(%v) ", genTempVarPfx, mi, varname) - } - } else { // varname is of type T - if t.Implements(binaryMarshalerTyp) { - x.linef("} else if %sm%s { z.EncBinaryMarshal(%v) ", genTempVarPfx, mi, varname) - } else if tptr.Implements(binaryMarshalerTyp) { - x.linef("} else if %sm%s { z.EncBinaryMarshal(&%v) ", genTempVarPfx, mi, varname) - } - if t.Implements(jsonMarshalerTyp) { - x.linef("} else if !%sm%s && z.IsJSONHandle() { z.EncJSONMarshal(%v) ", genTempVarPfx, mi, varname) - } else if tptr.Implements(jsonMarshalerTyp) { - x.linef("} else if !%sm%s && z.IsJSONHandle() { z.EncJSONMarshal(&%v) ", genTempVarPfx, mi, varname) - } else if t.Implements(textMarshalerTyp) { - x.linef("} else if !%sm%s { z.EncTextMarshal(%v) ", genTempVarPfx, mi, varname) - } else if tptr.Implements(textMarshalerTyp) { - x.linef("} else if !%sm%s { z.EncTextMarshal(&%v) ", genTempVarPfx, mi, varname) - } - } - x.line("} else {") - - switch t.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - x.line("r.EncodeInt(int64(" + varname + "))") - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - x.line("r.EncodeUint(uint64(" + varname + "))") - case reflect.Float32: - x.line("r.EncodeFloat32(float32(" + varname + "))") - case reflect.Float64: - x.line("r.EncodeFloat64(float64(" + varname + "))") - case reflect.Bool: - x.line("r.EncodeBool(bool(" + varname + "))") - case reflect.String: - x.line("r.EncodeString(codecSelferC_UTF8" + x.xs + ", string(" + varname + "))") - case reflect.Chan: - x.xtraSM(varname, true, t) - // x.encListFallback(varname, rtid, t) - case reflect.Array: - x.xtraSM(varname, true, t) - case reflect.Slice: - // if nil, call dedicated function - // if a []uint8, call dedicated function - // if a known fastpath slice, call dedicated function - // else write encode function in-line. - // - if elements are primitives or Selfers, call dedicated function on each member. - // - else call Encoder.encode(XXX) on it. - if rtid == uint8SliceTypId { - x.line("r.EncodeStringBytes(codecSelferC_RAW" + x.xs + ", []byte(" + varname + "))") - } else if fastpathAV.index(rtid) != -1 { - g := x.newGenV(t) - x.line("z.F." + g.MethodNamePfx("Enc", false) + "V(" + varname + ", false, e)") - } else { - x.xtraSM(varname, true, t) - // x.encListFallback(varname, rtid, t) - } - case reflect.Map: - // if nil, call dedicated function - // if a known fastpath map, call dedicated function - // else write encode function in-line. - // - if elements are primitives or Selfers, call dedicated function on each member. - // - else call Encoder.encode(XXX) on it. - // x.line("if " + varname + " == nil { \nr.EncodeNil()\n } else { ") - if fastpathAV.index(rtid) != -1 { - g := x.newGenV(t) - x.line("z.F." + g.MethodNamePfx("Enc", false) + "V(" + varname + ", false, e)") - } else { - x.xtraSM(varname, true, t) - // x.encMapFallback(varname, rtid, t) - } - case reflect.Struct: - if !inlist { - delete(x.te, rtid) - x.line("z.EncFallback(" + varname + ")") - break - } - x.encStruct(varname, rtid, t) - default: - if rtidAdded { - delete(x.te, rtid) - } - x.line("z.EncFallback(" + varname + ")") - } -} - -func (x *genRunner) encZero(t reflect.Type) { - switch t.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - x.line("r.EncodeInt(0)") - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - x.line("r.EncodeUint(0)") - case reflect.Float32: - x.line("r.EncodeFloat32(0)") - case reflect.Float64: - x.line("r.EncodeFloat64(0)") - case reflect.Bool: - x.line("r.EncodeBool(false)") - case reflect.String: - x.line("r.EncodeString(codecSelferC_UTF8" + x.xs + `, "")`) - default: - x.line("r.EncodeNil()") - } -} - -func (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) { - // Use knowledge from structfieldinfo (mbs, encodable fields. Ignore omitempty. ) - // replicate code in kStruct i.e. for each field, deref type to non-pointer, and call x.enc on it - - // if t === type currently running selfer on, do for all - ti := x.ti.get(rtid, t) - i := x.varsfx() - sepVarname := genTempVarPfx + "sep" + i - numfieldsvar := genTempVarPfx + "q" + i - ti2arrayvar := genTempVarPfx + "r" + i - struct2arrvar := genTempVarPfx + "2arr" + i - - x.line(sepVarname + " := !z.EncBinary()") - x.linef("%s := z.EncBasicHandle().StructToArray", struct2arrvar) - tisfi := ti.sfip // always use sequence from file. decStruct expects same thing. - // due to omitEmpty, we need to calculate the - // number of non-empty things we write out first. - // This is required as we need to pre-determine the size of the container, - // to support length-prefixing. - x.linef("var %s [%v]bool", numfieldsvar, len(tisfi)) - x.linef("_, _, _ = %s, %s, %s", sepVarname, numfieldsvar, struct2arrvar) - x.linef("const %s bool = %v", ti2arrayvar, ti.toArray) - nn := 0 - for j, si := range tisfi { - if !si.omitEmpty { - nn++ - continue - } - var t2 reflect.StructField - var omitline string - if si.i != -1 { - t2 = t.Field(int(si.i)) - } else { - t2typ := t - varname3 := varname - for _, ix := range si.is { - for t2typ.Kind() == reflect.Ptr { - t2typ = t2typ.Elem() - } - t2 = t2typ.Field(ix) - t2typ = t2.Type - varname3 = varname3 + "." + t2.Name - if t2typ.Kind() == reflect.Ptr { - omitline += varname3 + " != nil && " - } - } - } - // never check omitEmpty on a struct type, as it may contain uncomparable map/slice/etc. - // also, for maps/slices/arrays, check if len ! 0 (not if == zero value) - switch t2.Type.Kind() { - case reflect.Struct: - omitline += " true" - case reflect.Map, reflect.Slice, reflect.Array, reflect.Chan: - omitline += "len(" + varname + "." + t2.Name + ") != 0" - default: - omitline += varname + "." + t2.Name + " != " + x.genZeroValueR(t2.Type) - } - x.linef("%s[%v] = %s", numfieldsvar, j, omitline) - } - x.linef("var %snn%s int", genTempVarPfx, i) - x.linef("if %s || %s {", ti2arrayvar, struct2arrvar) // if ti.toArray { - x.line("r.EncodeArrayStart(" + strconv.FormatInt(int64(len(tisfi)), 10) + ")") - x.linef("} else {") // if not ti.toArray - x.linef("%snn%s = %v", genTempVarPfx, i, nn) - x.linef("for _, b := range %s { if b { %snn%s++ } }", numfieldsvar, genTempVarPfx, i) - x.linef("r.EncodeMapStart(%snn%s)", genTempVarPfx, i) - x.linef("%snn%s = %v", genTempVarPfx, i, 0) - // x.line("r.EncodeMapStart(" + strconv.FormatInt(int64(len(tisfi)), 10) + ")") - x.line("}") // close if not StructToArray - - for j, si := range tisfi { - i := x.varsfx() - isNilVarName := genTempVarPfx + "n" + i - var labelUsed bool - var t2 reflect.StructField - if si.i != -1 { - t2 = t.Field(int(si.i)) - } else { - t2typ := t - varname3 := varname - for _, ix := range si.is { - // fmt.Printf("%%%% %v, ix: %v\n", t2typ, ix) - for t2typ.Kind() == reflect.Ptr { - t2typ = t2typ.Elem() - } - t2 = t2typ.Field(ix) - t2typ = t2.Type - varname3 = varname3 + "." + t2.Name - if t2typ.Kind() == reflect.Ptr { - if !labelUsed { - x.line("var " + isNilVarName + " bool") - } - x.line("if " + varname3 + " == nil { " + isNilVarName + " = true ") - x.line("goto LABEL" + i) - x.line("}") - labelUsed = true - // "varname3 = new(" + x.genTypeName(t3.Elem()) + ") }") - } - } - // t2 = t.FieldByIndex(si.is) - } - if labelUsed { - x.line("LABEL" + i + ":") - } - // if the type of the field is a Selfer, or one of the ones - - x.linef("if %s || %s {", ti2arrayvar, struct2arrvar) // if ti.toArray - if labelUsed { - x.line("if " + isNilVarName + " { r.EncodeNil() } else { ") - } - x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs) - if si.omitEmpty { - x.linef("if %s[%v] {", numfieldsvar, j) - } - x.encVar(varname+"."+t2.Name, t2.Type) - if si.omitEmpty { - x.linef("} else {") - x.encZero(t2.Type) - x.linef("}") - } - if labelUsed { - x.line("}") - } - - x.linef("} else {") // if not ti.toArray - - if si.omitEmpty { - x.linef("if %s[%v] {", numfieldsvar, j) - } - x.linef("z.EncSendContainerState(codecSelfer_containerMapKey%s)", x.xs) - x.line("r.EncodeString(codecSelferC_UTF8" + x.xs + ", string(\"" + si.encName + "\"))") - x.linef("z.EncSendContainerState(codecSelfer_containerMapValue%s)", x.xs) - if labelUsed { - x.line("if " + isNilVarName + " { r.EncodeNil() } else { ") - x.encVar(varname+"."+t2.Name, t2.Type) - x.line("}") - } else { - x.encVar(varname+"."+t2.Name, t2.Type) - } - if si.omitEmpty { - x.line("}") - } - x.linef("} ") // end if/else ti.toArray - } - x.linef("if %s || %s {", ti2arrayvar, struct2arrvar) // if ti.toArray { - x.linef("z.EncSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs) - x.line("} else {") - x.linef("z.EncSendContainerState(codecSelfer_containerMapEnd%s)", x.xs) - x.line("}") - -} - -func (x *genRunner) encListFallback(varname string, t reflect.Type) { - i := x.varsfx() - g := genTempVarPfx - x.line("r.EncodeArrayStart(len(" + varname + "))") - if t.Kind() == reflect.Chan { - x.linef("for %si%s, %si2%s := 0, len(%s); %si%s < %si2%s; %si%s++ {", g, i, g, i, varname, g, i, g, i, g, i) - x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs) - x.linef("%sv%s := <-%s", g, i, varname) - } else { - // x.linef("for %si%s, %sv%s := range %s {", genTempVarPfx, i, genTempVarPfx, i, varname) - x.linef("for _, %sv%s := range %s {", genTempVarPfx, i, varname) - x.linef("z.EncSendContainerState(codecSelfer_containerArrayElem%s)", x.xs) - } - x.encVar(genTempVarPfx+"v"+i, t.Elem()) - x.line("}") - x.linef("z.EncSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs) -} - -func (x *genRunner) encMapFallback(varname string, t reflect.Type) { - // TODO: expand this to handle canonical. - i := x.varsfx() - x.line("r.EncodeMapStart(len(" + varname + "))") - x.linef("for %sk%s, %sv%s := range %s {", genTempVarPfx, i, genTempVarPfx, i, varname) - // x.line("for " + genTempVarPfx + "k" + i + ", " + genTempVarPfx + "v" + i + " := range " + varname + " {") - x.linef("z.EncSendContainerState(codecSelfer_containerMapKey%s)", x.xs) - x.encVar(genTempVarPfx+"k"+i, t.Key()) - x.linef("z.EncSendContainerState(codecSelfer_containerMapValue%s)", x.xs) - x.encVar(genTempVarPfx+"v"+i, t.Elem()) - x.line("}") - x.linef("z.EncSendContainerState(codecSelfer_containerMapEnd%s)", x.xs) -} - -func (x *genRunner) decVar(varname string, t reflect.Type, canBeNil bool) { - // We only encode as nil if a nillable value. - // This removes some of the wasted checks for TryDecodeAsNil. - // We need to think about this more, to see what happens if omitempty, etc - // cause a nil value to be stored when something is expected. - // This could happen when decoding from a struct encoded as an array. - // For that, decVar should be called with canNil=true, to force true as its value. - i := x.varsfx() - if !canBeNil { - canBeNil = genAnythingCanBeNil || !genIsImmutable(t) - } - if canBeNil { - x.line("if r.TryDecodeAsNil() {") - if t.Kind() == reflect.Ptr { - x.line("if " + varname + " != nil { ") - - // if varname is a field of a struct (has a dot in it), - // then just set it to nil - if strings.IndexByte(varname, '.') != -1 { - x.line(varname + " = nil") - } else { - x.line("*" + varname + " = " + x.genZeroValueR(t.Elem())) - } - x.line("}") - } else { - x.line(varname + " = " + x.genZeroValueR(t)) - } - x.line("} else {") - } else { - x.line("// cannot be nil") - } - if t.Kind() != reflect.Ptr { - if x.decTryAssignPrimitive(varname, t) { - x.line(genTempVarPfx + "v" + i + " := &" + varname) - x.dec(genTempVarPfx+"v"+i, t) - } - } else { - x.linef("if %s == nil { %s = new(%s) }", varname, varname, x.genTypeName(t.Elem())) - // Ensure we set underlying ptr to a non-nil value (so we can deref to it later). - // There's a chance of a **T in here which is nil. - var ptrPfx string - for t = t.Elem(); t.Kind() == reflect.Ptr; t = t.Elem() { - ptrPfx += "*" - x.linef("if %s%s == nil { %s%s = new(%s)}", - ptrPfx, varname, ptrPfx, varname, x.genTypeName(t)) - } - // if varname has [ in it, then create temp variable for this ptr thingie - if strings.Index(varname, "[") >= 0 { - varname2 := genTempVarPfx + "w" + i - x.line(varname2 + " := " + varname) - varname = varname2 - } - - if ptrPfx == "" { - x.dec(varname, t) - } else { - x.line(genTempVarPfx + "z" + i + " := " + ptrPfx + varname) - x.dec(genTempVarPfx+"z"+i, t) - } - - } - - if canBeNil { - x.line("} ") - } -} - -// dec will decode a variable (varname) of type ptrTo(t). -// t is always a basetype (i.e. not of kind reflect.Ptr). -func (x *genRunner) dec(varname string, t reflect.Type) { - // assumptions: - // - the varname is to a pointer already. No need to take address of it - // - t is always a baseType T (not a *T, etc). - rtid := reflect.ValueOf(t).Pointer() - tptr := reflect.PtrTo(t) - if x.checkForSelfer(t, varname) { - if t.Implements(selferTyp) || tptr.Implements(selferTyp) { - x.line(varname + ".CodecDecodeSelf(d)") - return - } - if _, ok := x.td[rtid]; ok { - x.line(varname + ".CodecDecodeSelf(d)") - return - } - } - - inlist := false - for _, t0 := range x.t { - if t == t0 { - inlist = true - if x.checkForSelfer(t, varname) { - x.line(varname + ".CodecDecodeSelf(d)") - return - } - break - } - } - - var rtidAdded bool - if t == x.tc { - x.td[rtid] = true - rtidAdded = true - } - - // check if - // - type is RawExt - // - the type implements (Text|JSON|Binary)(Unm|M)arshal - mi := x.varsfx() - x.linef("%sm%s := z.DecBinary()", genTempVarPfx, mi) - x.linef("_ = %sm%s", genTempVarPfx, mi) - x.line("if false {") //start if block - defer func() { x.line("}") }() //end if block - - if t == rawExtTyp { - x.linef("} else { r.DecodeExt(%v, 0, nil)", varname) - return - } - - // HACK: Support for Builtins. - // Currently, only Binc supports builtins, and the only builtin type is time.Time. - // Have a method that returns the rtid for time.Time if Handle is Binc. - if t == timeTyp { - vrtid := genTempVarPfx + "m" + x.varsfx() - x.linef("} else if %s := z.TimeRtidIfBinc(); %s != 0 { ", vrtid, vrtid) - x.linef("r.DecodeBuiltin(%s, %s)", vrtid, varname) - } - // only check for extensions if the type is named, and has a packagePath. - if genImportPath(t) != "" && t.Name() != "" { - // first check if extensions are configued, before doing the interface conversion - x.linef("} else if z.HasExtensions() && z.DecExt(%s) {", varname) - } - - if t.Implements(binaryUnmarshalerTyp) || tptr.Implements(binaryUnmarshalerTyp) { - x.linef("} else if %sm%s { z.DecBinaryUnmarshal(%v) ", genTempVarPfx, mi, varname) - } - if t.Implements(jsonUnmarshalerTyp) || tptr.Implements(jsonUnmarshalerTyp) { - x.linef("} else if !%sm%s && z.IsJSONHandle() { z.DecJSONUnmarshal(%v)", genTempVarPfx, mi, varname) - } else if t.Implements(textUnmarshalerTyp) || tptr.Implements(textUnmarshalerTyp) { - x.linef("} else if !%sm%s { z.DecTextUnmarshal(%v)", genTempVarPfx, mi, varname) - } - - x.line("} else {") - - // Since these are pointers, we cannot share, and have to use them one by one - switch t.Kind() { - case reflect.Int: - x.line("*((*int)(" + varname + ")) = int(r.DecodeInt(codecSelferBitsize" + x.xs + "))") - // x.line("z.DecInt((*int)(" + varname + "))") - case reflect.Int8: - x.line("*((*int8)(" + varname + ")) = int8(r.DecodeInt(8))") - // x.line("z.DecInt8((*int8)(" + varname + "))") - case reflect.Int16: - x.line("*((*int16)(" + varname + ")) = int16(r.DecodeInt(16))") - // x.line("z.DecInt16((*int16)(" + varname + "))") - case reflect.Int32: - x.line("*((*int32)(" + varname + ")) = int32(r.DecodeInt(32))") - // x.line("z.DecInt32((*int32)(" + varname + "))") - case reflect.Int64: - x.line("*((*int64)(" + varname + ")) = int64(r.DecodeInt(64))") - // x.line("z.DecInt64((*int64)(" + varname + "))") - - case reflect.Uint: - x.line("*((*uint)(" + varname + ")) = uint(r.DecodeUint(codecSelferBitsize" + x.xs + "))") - // x.line("z.DecUint((*uint)(" + varname + "))") - case reflect.Uint8: - x.line("*((*uint8)(" + varname + ")) = uint8(r.DecodeUint(8))") - // x.line("z.DecUint8((*uint8)(" + varname + "))") - case reflect.Uint16: - x.line("*((*uint16)(" + varname + ")) = uint16(r.DecodeUint(16))") - //x.line("z.DecUint16((*uint16)(" + varname + "))") - case reflect.Uint32: - x.line("*((*uint32)(" + varname + ")) = uint32(r.DecodeUint(32))") - //x.line("z.DecUint32((*uint32)(" + varname + "))") - case reflect.Uint64: - x.line("*((*uint64)(" + varname + ")) = uint64(r.DecodeUint(64))") - //x.line("z.DecUint64((*uint64)(" + varname + "))") - case reflect.Uintptr: - x.line("*((*uintptr)(" + varname + ")) = uintptr(r.DecodeUint(codecSelferBitsize" + x.xs + "))") - - case reflect.Float32: - x.line("*((*float32)(" + varname + ")) = float32(r.DecodeFloat(true))") - //x.line("z.DecFloat32((*float32)(" + varname + "))") - case reflect.Float64: - x.line("*((*float64)(" + varname + ")) = float64(r.DecodeFloat(false))") - // x.line("z.DecFloat64((*float64)(" + varname + "))") - - case reflect.Bool: - x.line("*((*bool)(" + varname + ")) = r.DecodeBool()") - // x.line("z.DecBool((*bool)(" + varname + "))") - case reflect.String: - x.line("*((*string)(" + varname + ")) = r.DecodeString()") - // x.line("z.DecString((*string)(" + varname + "))") - case reflect.Array, reflect.Chan: - x.xtraSM(varname, false, t) - // x.decListFallback(varname, rtid, true, t) - case reflect.Slice: - // if a []uint8, call dedicated function - // if a known fastpath slice, call dedicated function - // else write encode function in-line. - // - if elements are primitives or Selfers, call dedicated function on each member. - // - else call Encoder.encode(XXX) on it. - if rtid == uint8SliceTypId { - x.line("*" + varname + " = r.DecodeBytes(*(*[]byte)(" + varname + "), false, false)") - } else if fastpathAV.index(rtid) != -1 { - g := x.newGenV(t) - x.line("z.F." + g.MethodNamePfx("Dec", false) + "X(" + varname + ", false, d)") - } else { - x.xtraSM(varname, false, t) - // x.decListFallback(varname, rtid, false, t) - } - case reflect.Map: - // if a known fastpath map, call dedicated function - // else write encode function in-line. - // - if elements are primitives or Selfers, call dedicated function on each member. - // - else call Encoder.encode(XXX) on it. - if fastpathAV.index(rtid) != -1 { - g := x.newGenV(t) - x.line("z.F." + g.MethodNamePfx("Dec", false) + "X(" + varname + ", false, d)") - } else { - x.xtraSM(varname, false, t) - // x.decMapFallback(varname, rtid, t) - } - case reflect.Struct: - if inlist { - x.decStruct(varname, rtid, t) - } else { - // delete(x.td, rtid) - x.line("z.DecFallback(" + varname + ", false)") - } - default: - if rtidAdded { - delete(x.te, rtid) - } - x.line("z.DecFallback(" + varname + ", true)") - } -} - -func (x *genRunner) decTryAssignPrimitive(varname string, t reflect.Type) (tryAsPtr bool) { - // This should only be used for exact primitives (ie un-named types). - // Named types may be implementations of Selfer, Unmarshaler, etc. - // They should be handled by dec(...) - - if t.Name() != "" { - tryAsPtr = true - return - } - - switch t.Kind() { - case reflect.Int: - x.linef("%s = r.DecodeInt(codecSelferBitsize%s)", varname, x.xs) - case reflect.Int8: - x.linef("%s = r.DecodeInt(8)", varname) - case reflect.Int16: - x.linef("%s = r.DecodeInt(16)", varname) - case reflect.Int32: - x.linef("%s = r.DecodeInt(32)", varname) - case reflect.Int64: - x.linef("%s = r.DecodeInt(64)", varname) - - case reflect.Uint: - x.linef("%s = r.DecodeUint(codecSelferBitsize%s)", varname, x.xs) - case reflect.Uint8: - x.linef("%s = r.DecodeUint(8)", varname) - case reflect.Uint16: - x.linef("%s = r.DecodeUint(16)", varname) - case reflect.Uint32: - x.linef("%s = r.DecodeUint(32)", varname) - case reflect.Uint64: - x.linef("%s = r.DecodeUint(64)", varname) - case reflect.Uintptr: - x.linef("%s = r.DecodeUint(codecSelferBitsize%s)", varname, x.xs) - - case reflect.Float32: - x.linef("%s = r.DecodeFloat(true)", varname) - case reflect.Float64: - x.linef("%s = r.DecodeFloat(false)", varname) - - case reflect.Bool: - x.linef("%s = r.DecodeBool()", varname) - case reflect.String: - x.linef("%s = r.DecodeString()", varname) - default: - tryAsPtr = true - } - return -} - -func (x *genRunner) decListFallback(varname string, rtid uintptr, t reflect.Type) { - type tstruc struct { - TempVar string - Rand string - Varname string - CTyp string - Typ string - Immutable bool - Size int - } - telem := t.Elem() - ts := tstruc{genTempVarPfx, x.varsfx(), varname, x.genTypeName(t), x.genTypeName(telem), genIsImmutable(telem), int(telem.Size())} - - funcs := make(template.FuncMap) - - funcs["decLineVar"] = func(varname string) string { - x.decVar(varname, telem, false) - return "" - } - funcs["decLine"] = func(pfx string) string { - x.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(telem), false) - return "" - } - funcs["var"] = func(s string) string { - return ts.TempVar + s + ts.Rand - } - funcs["zero"] = func() string { - return x.genZeroValueR(telem) - } - funcs["isArray"] = func() bool { - return t.Kind() == reflect.Array - } - funcs["isSlice"] = func() bool { - return t.Kind() == reflect.Slice - } - funcs["isChan"] = func() bool { - return t.Kind() == reflect.Chan - } - tm, err := template.New("").Funcs(funcs).Parse(genDecListTmpl) - if err != nil { - panic(err) - } - if err = tm.Execute(x.w, &ts); err != nil { - panic(err) - } -} - -func (x *genRunner) decMapFallback(varname string, rtid uintptr, t reflect.Type) { - type tstruc struct { - TempVar string - Sfx string - Rand string - Varname string - KTyp string - Typ string - Size int - } - telem := t.Elem() - tkey := t.Key() - ts := tstruc{ - genTempVarPfx, x.xs, x.varsfx(), varname, x.genTypeName(tkey), - x.genTypeName(telem), int(telem.Size() + tkey.Size()), - } - - funcs := make(template.FuncMap) - funcs["decElemZero"] = func() string { - return x.genZeroValueR(telem) - } - funcs["decElemKindImmutable"] = func() bool { - return genIsImmutable(telem) - } - funcs["decElemKindPtr"] = func() bool { - return telem.Kind() == reflect.Ptr - } - funcs["decElemKindIntf"] = func() bool { - return telem.Kind() == reflect.Interface - } - funcs["decLineVarK"] = func(varname string) string { - x.decVar(varname, tkey, false) - return "" - } - funcs["decLineVar"] = func(varname string) string { - x.decVar(varname, telem, false) - return "" - } - funcs["decLineK"] = func(pfx string) string { - x.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(tkey), false) - return "" - } - funcs["decLine"] = func(pfx string) string { - x.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(telem), false) - return "" - } - funcs["var"] = func(s string) string { - return ts.TempVar + s + ts.Rand - } - - tm, err := template.New("").Funcs(funcs).Parse(genDecMapTmpl) - if err != nil { - panic(err) - } - if err = tm.Execute(x.w, &ts); err != nil { - panic(err) - } -} - -func (x *genRunner) decStructMapSwitch(kName string, varname string, rtid uintptr, t reflect.Type) { - ti := x.ti.get(rtid, t) - tisfi := ti.sfip // always use sequence from file. decStruct expects same thing. - x.line("switch (" + kName + ") {") - for _, si := range tisfi { - x.line("case \"" + si.encName + "\":") - var t2 reflect.StructField - if si.i != -1 { - t2 = t.Field(int(si.i)) - } else { - //we must accomodate anonymous fields, where the embedded field is a nil pointer in the value. - // t2 = t.FieldByIndex(si.is) - t2typ := t - varname3 := varname - for _, ix := range si.is { - for t2typ.Kind() == reflect.Ptr { - t2typ = t2typ.Elem() - } - t2 = t2typ.Field(ix) - t2typ = t2.Type - varname3 = varname3 + "." + t2.Name - if t2typ.Kind() == reflect.Ptr { - x.linef("if %s == nil { %s = new(%s) }", varname3, varname3, x.genTypeName(t2typ.Elem())) - } - } - } - x.decVar(varname+"."+t2.Name, t2.Type, false) - } - x.line("default:") - // pass the slice here, so that the string will not escape, and maybe save allocation - x.line("z.DecStructFieldNotFound(-1, " + kName + ")") - x.line("} // end switch " + kName) -} - -func (x *genRunner) decStructMap(varname, lenvarname string, rtid uintptr, t reflect.Type, style genStructMapStyle) { - tpfx := genTempVarPfx - i := x.varsfx() - kName := tpfx + "s" + i - - // We thought to use ReadStringAsBytes, as go compiler might optimize the copy out. - // However, using that was more expensive, as it seems that the switch expression - // is evaluated each time. - // - // We could depend on decodeString using a temporary/shared buffer internally. - // However, this model of creating a byte array, and using explicitly is faster, - // and allows optional use of unsafe []byte->string conversion without alloc. - - // Also, ensure that the slice array doesn't escape. - // That will help escape analysis prevent allocation when it gets better. - - // x.line("var " + kName + "Arr = [32]byte{} // default string to decode into") - // x.line("var " + kName + "Slc = " + kName + "Arr[:] // default slice to decode into") - // use the scratch buffer to avoid allocation (most field names are < 32). - - x.line("var " + kName + "Slc = z.DecScratchBuffer() // default slice to decode into") - - x.line("_ = " + kName + "Slc") - switch style { - case genStructMapStyleLenPrefix: - x.linef("for %sj%s := 0; %sj%s < %s; %sj%s++ {", tpfx, i, tpfx, i, lenvarname, tpfx, i) - case genStructMapStyleCheckBreak: - x.linef("for %sj%s := 0; !r.CheckBreak(); %sj%s++ {", tpfx, i, tpfx, i) - default: // 0, otherwise. - x.linef("var %shl%s bool = %s >= 0", tpfx, i, lenvarname) // has length - x.linef("for %sj%s := 0; ; %sj%s++ {", tpfx, i, tpfx, i) - x.linef("if %shl%s { if %sj%s >= %s { break }", tpfx, i, tpfx, i, lenvarname) - x.line("} else { if r.CheckBreak() { break }; }") - } - x.linef("z.DecSendContainerState(codecSelfer_containerMapKey%s)", x.xs) - x.line(kName + "Slc = r.DecodeBytes(" + kName + "Slc, true, true)") - // let string be scoped to this loop alone, so it doesn't escape. - if x.unsafe { - x.line(kName + "SlcHdr := codecSelferUnsafeString" + x.xs + "{uintptr(unsafe.Pointer(&" + - kName + "Slc[0])), len(" + kName + "Slc)}") - x.line(kName + " := *(*string)(unsafe.Pointer(&" + kName + "SlcHdr))") - } else { - x.line(kName + " := string(" + kName + "Slc)") - } - x.linef("z.DecSendContainerState(codecSelfer_containerMapValue%s)", x.xs) - x.decStructMapSwitch(kName, varname, rtid, t) - - x.line("} // end for " + tpfx + "j" + i) - x.linef("z.DecSendContainerState(codecSelfer_containerMapEnd%s)", x.xs) -} - -func (x *genRunner) decStructArray(varname, lenvarname, breakString string, rtid uintptr, t reflect.Type) { - tpfx := genTempVarPfx - i := x.varsfx() - ti := x.ti.get(rtid, t) - tisfi := ti.sfip // always use sequence from file. decStruct expects same thing. - x.linef("var %sj%s int", tpfx, i) - x.linef("var %sb%s bool", tpfx, i) // break - x.linef("var %shl%s bool = %s >= 0", tpfx, i, lenvarname) // has length - for _, si := range tisfi { - var t2 reflect.StructField - if si.i != -1 { - t2 = t.Field(int(si.i)) - } else { - //we must accomodate anonymous fields, where the embedded field is a nil pointer in the value. - // t2 = t.FieldByIndex(si.is) - t2typ := t - varname3 := varname - for _, ix := range si.is { - for t2typ.Kind() == reflect.Ptr { - t2typ = t2typ.Elem() - } - t2 = t2typ.Field(ix) - t2typ = t2.Type - varname3 = varname3 + "." + t2.Name - if t2typ.Kind() == reflect.Ptr { - x.linef("if %s == nil { %s = new(%s) }", varname3, varname3, x.genTypeName(t2typ.Elem())) - } - } - } - - x.linef("%sj%s++; if %shl%s { %sb%s = %sj%s > %s } else { %sb%s = r.CheckBreak() }", - tpfx, i, tpfx, i, tpfx, i, - tpfx, i, lenvarname, tpfx, i) - x.linef("if %sb%s { z.DecSendContainerState(codecSelfer_containerArrayEnd%s); %s }", - tpfx, i, x.xs, breakString) - x.linef("z.DecSendContainerState(codecSelfer_containerArrayElem%s)", x.xs) - x.decVar(varname+"."+t2.Name, t2.Type, true) - } - // read remaining values and throw away. - x.line("for {") - x.linef("%sj%s++; if %shl%s { %sb%s = %sj%s > %s } else { %sb%s = r.CheckBreak() }", - tpfx, i, tpfx, i, tpfx, i, - tpfx, i, lenvarname, tpfx, i) - x.linef("if %sb%s { break }", tpfx, i) - x.linef("z.DecSendContainerState(codecSelfer_containerArrayElem%s)", x.xs) - x.linef(`z.DecStructFieldNotFound(%sj%s - 1, "")`, tpfx, i) - x.line("}") - x.linef("z.DecSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs) -} - -func (x *genRunner) decStruct(varname string, rtid uintptr, t reflect.Type) { - // if container is map - i := x.varsfx() - x.linef("%sct%s := r.ContainerType()", genTempVarPfx, i) - x.linef("if %sct%s == codecSelferValueTypeMap%s {", genTempVarPfx, i, x.xs) - x.line(genTempVarPfx + "l" + i + " := r.ReadMapStart()") - x.linef("if %sl%s == 0 {", genTempVarPfx, i) - x.linef("z.DecSendContainerState(codecSelfer_containerMapEnd%s)", x.xs) - if genUseOneFunctionForDecStructMap { - x.line("} else { ") - x.linef("x.codecDecodeSelfFromMap(%sl%s, d)", genTempVarPfx, i) - } else { - x.line("} else if " + genTempVarPfx + "l" + i + " > 0 { ") - x.line("x.codecDecodeSelfFromMapLenPrefix(" + genTempVarPfx + "l" + i + ", d)") - x.line("} else {") - x.line("x.codecDecodeSelfFromMapCheckBreak(" + genTempVarPfx + "l" + i + ", d)") - } - x.line("}") - - // else if container is array - x.linef("} else if %sct%s == codecSelferValueTypeArray%s {", genTempVarPfx, i, x.xs) - x.line(genTempVarPfx + "l" + i + " := r.ReadArrayStart()") - x.linef("if %sl%s == 0 {", genTempVarPfx, i) - x.linef("z.DecSendContainerState(codecSelfer_containerArrayEnd%s)", x.xs) - x.line("} else { ") - x.linef("x.codecDecodeSelfFromArray(%sl%s, d)", genTempVarPfx, i) - x.line("}") - // else panic - x.line("} else { ") - x.line("panic(codecSelferOnlyMapOrArrayEncodeToStructErr" + x.xs + ")") - x.line("} ") -} - -// -------- - -type genV struct { - // genV is either a primitive (Primitive != "") or a map (MapKey != "") or a slice - MapKey string - Elem string - Primitive string - Size int -} - -func (x *genRunner) newGenV(t reflect.Type) (v genV) { - switch t.Kind() { - case reflect.Slice, reflect.Array: - te := t.Elem() - v.Elem = x.genTypeName(te) - v.Size = int(te.Size()) - case reflect.Map: - te, tk := t.Elem(), t.Key() - v.Elem = x.genTypeName(te) - v.MapKey = x.genTypeName(tk) - v.Size = int(te.Size() + tk.Size()) - default: - panic("unexpected type for newGenV. Requires map or slice type") - } - return -} - -func (x *genV) MethodNamePfx(prefix string, prim bool) string { - var name []byte - if prefix != "" { - name = append(name, prefix...) - } - if prim { - name = append(name, genTitleCaseName(x.Primitive)...) - } else { - if x.MapKey == "" { - name = append(name, "Slice"...) - } else { - name = append(name, "Map"...) - name = append(name, genTitleCaseName(x.MapKey)...) - } - name = append(name, genTitleCaseName(x.Elem)...) - } - return string(name) - -} - -// genImportPath returns import path of a non-predeclared named typed, or an empty string otherwise. -// -// This handles the misbehaviour that occurs when 1.5-style vendoring is enabled, -// where PkgPath returns the full path, including the vendoring pre-fix that should have been stripped. -// We strip it here. -func genImportPath(t reflect.Type) (s string) { - s = t.PkgPath() - if genCheckVendor { - // HACK: Misbehaviour occurs in go 1.5. May have to re-visit this later. - // if s contains /vendor/ OR startsWith vendor/, then return everything after it. - const vendorStart = "vendor/" - const vendorInline = "/vendor/" - if i := strings.LastIndex(s, vendorInline); i >= 0 { - s = s[i+len(vendorInline):] - } else if strings.HasPrefix(s, vendorStart) { - s = s[len(vendorStart):] - } - } - return -} - -// A go identifier is (letter|_)[letter|number|_]* -func genGoIdentifier(s string, checkFirstChar bool) string { - b := make([]byte, 0, len(s)) - t := make([]byte, 4) - var n int - for i, r := range s { - if checkFirstChar && i == 0 && !unicode.IsLetter(r) { - b = append(b, '_') - } - // r must be unicode_letter, unicode_digit or _ - if unicode.IsLetter(r) || unicode.IsDigit(r) { - n = utf8.EncodeRune(t, r) - b = append(b, t[:n]...) - } else { - b = append(b, '_') - } - } - return string(b) -} - -func genNonPtr(t reflect.Type) reflect.Type { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t -} - -func genTitleCaseName(s string) string { - switch s { - case "interface{}", "interface {}": - return "Intf" - default: - return strings.ToUpper(s[0:1]) + s[1:] - } -} - -func genMethodNameT(t reflect.Type, tRef reflect.Type) (n string) { - var ptrPfx string - for t.Kind() == reflect.Ptr { - ptrPfx += "Ptrto" - t = t.Elem() - } - tstr := t.String() - if tn := t.Name(); tn != "" { - if tRef != nil && genImportPath(t) == genImportPath(tRef) { - return ptrPfx + tn - } else { - if genQNameRegex.MatchString(tstr) { - return ptrPfx + strings.Replace(tstr, ".", "_", 1000) - } else { - return ptrPfx + genCustomTypeName(tstr) - } - } - } - switch t.Kind() { - case reflect.Map: - return ptrPfx + "Map" + genMethodNameT(t.Key(), tRef) + genMethodNameT(t.Elem(), tRef) - case reflect.Slice: - return ptrPfx + "Slice" + genMethodNameT(t.Elem(), tRef) - case reflect.Array: - return ptrPfx + "Array" + strconv.FormatInt(int64(t.Len()), 10) + genMethodNameT(t.Elem(), tRef) - case reflect.Chan: - var cx string - switch t.ChanDir() { - case reflect.SendDir: - cx = "ChanSend" - case reflect.RecvDir: - cx = "ChanRecv" - default: - cx = "Chan" - } - return ptrPfx + cx + genMethodNameT(t.Elem(), tRef) - default: - if t == intfTyp { - return ptrPfx + "Interface" - } else { - if tRef != nil && genImportPath(t) == genImportPath(tRef) { - if t.Name() != "" { - return ptrPfx + t.Name() - } else { - return ptrPfx + genCustomTypeName(tstr) - } - } else { - // best way to get the package name inclusive - // return ptrPfx + strings.Replace(tstr, ".", "_", 1000) - // return ptrPfx + genBase64enc.EncodeToString([]byte(tstr)) - if t.Name() != "" && genQNameRegex.MatchString(tstr) { - return ptrPfx + strings.Replace(tstr, ".", "_", 1000) - } else { - return ptrPfx + genCustomTypeName(tstr) - } - } - } - } -} - -// genCustomNameForType base64encodes the t.String() value in such a way -// that it can be used within a function name. -func genCustomTypeName(tstr string) string { - len2 := genBase64enc.EncodedLen(len(tstr)) - bufx := make([]byte, len2) - genBase64enc.Encode(bufx, []byte(tstr)) - for i := len2 - 1; i >= 0; i-- { - if bufx[i] == '=' { - len2-- - } else { - break - } - } - return string(bufx[:len2]) -} - -func genIsImmutable(t reflect.Type) (v bool) { - return isImmutableKind(t.Kind()) -} - -type genInternal struct { - Values []genV - Unsafe bool -} - -func (x genInternal) FastpathLen() (l int) { - for _, v := range x.Values { - if v.Primitive == "" { - l++ - } - } - return -} - -func genInternalZeroValue(s string) string { - switch s { - case "interface{}", "interface {}": - return "nil" - case "bool": - return "false" - case "string": - return `""` - default: - return "0" - } -} - -func genInternalEncCommandAsString(s string, vname string) string { - switch s { - case "uint", "uint8", "uint16", "uint32", "uint64": - return "ee.EncodeUint(uint64(" + vname + "))" - case "int", "int8", "int16", "int32", "int64": - return "ee.EncodeInt(int64(" + vname + "))" - case "string": - return "ee.EncodeString(c_UTF8, " + vname + ")" - case "float32": - return "ee.EncodeFloat32(" + vname + ")" - case "float64": - return "ee.EncodeFloat64(" + vname + ")" - case "bool": - return "ee.EncodeBool(" + vname + ")" - case "symbol": - return "ee.EncodeSymbol(" + vname + ")" - default: - return "e.encode(" + vname + ")" - } -} - -func genInternalDecCommandAsString(s string) string { - switch s { - case "uint": - return "uint(dd.DecodeUint(uintBitsize))" - case "uint8": - return "uint8(dd.DecodeUint(8))" - case "uint16": - return "uint16(dd.DecodeUint(16))" - case "uint32": - return "uint32(dd.DecodeUint(32))" - case "uint64": - return "dd.DecodeUint(64)" - case "uintptr": - return "uintptr(dd.DecodeUint(uintBitsize))" - case "int": - return "int(dd.DecodeInt(intBitsize))" - case "int8": - return "int8(dd.DecodeInt(8))" - case "int16": - return "int16(dd.DecodeInt(16))" - case "int32": - return "int32(dd.DecodeInt(32))" - case "int64": - return "dd.DecodeInt(64)" - - case "string": - return "dd.DecodeString()" - case "float32": - return "float32(dd.DecodeFloat(true))" - case "float64": - return "dd.DecodeFloat(false)" - case "bool": - return "dd.DecodeBool()" - default: - panic(errors.New("gen internal: unknown type for decode: " + s)) - } -} - -func genInternalSortType(s string, elem bool) string { - for _, v := range [...]string{"int", "uint", "float", "bool", "string"} { - if strings.HasPrefix(s, v) { - if elem { - if v == "int" || v == "uint" || v == "float" { - return v + "64" - } else { - return v - } - } - return v + "Slice" - } - } - panic("sorttype: unexpected type: " + s) -} - -// var genInternalMu sync.Mutex -var genInternalV genInternal -var genInternalTmplFuncs template.FuncMap -var genInternalOnce sync.Once - -func genInternalInit() { - types := [...]string{ - "interface{}", - "string", - "float32", - "float64", - "uint", - "uint8", - "uint16", - "uint32", - "uint64", - "uintptr", - "int", - "int8", - "int16", - "int32", - "int64", - "bool", - } - // keep as slice, so it is in specific iteration order. - // Initial order was uint64, string, interface{}, int, int64 - mapvaltypes := [...]string{ - "interface{}", - "string", - "uint", - "uint8", - "uint16", - "uint32", - "uint64", - "uintptr", - "int", - "int8", - "int16", - "int32", - "int64", - "float32", - "float64", - "bool", - } - wordSizeBytes := int(intBitsize) / 8 - - mapvaltypes2 := map[string]int{ - "interface{}": 2 * wordSizeBytes, - "string": 2 * wordSizeBytes, - "uint": 1 * wordSizeBytes, - "uint8": 1, - "uint16": 2, - "uint32": 4, - "uint64": 8, - "uintptr": 1 * wordSizeBytes, - "int": 1 * wordSizeBytes, - "int8": 1, - "int16": 2, - "int32": 4, - "int64": 8, - "float32": 4, - "float64": 8, - "bool": 1, - } - var gt genInternal - - // For each slice or map type, there must be a (symetrical) Encode and Decode fast-path function - for _, s := range types { - gt.Values = append(gt.Values, genV{Primitive: s, Size: mapvaltypes2[s]}) - if s != "uint8" { // do not generate fast path for slice of bytes. Treat specially already. - gt.Values = append(gt.Values, genV{Elem: s, Size: mapvaltypes2[s]}) - } - if _, ok := mapvaltypes2[s]; !ok { - gt.Values = append(gt.Values, genV{MapKey: s, Elem: s, Size: 2 * mapvaltypes2[s]}) - } - for _, ms := range mapvaltypes { - gt.Values = append(gt.Values, genV{MapKey: s, Elem: ms, Size: mapvaltypes2[s] + mapvaltypes2[ms]}) - } - } - - funcs := make(template.FuncMap) - // funcs["haspfx"] = strings.HasPrefix - funcs["encmd"] = genInternalEncCommandAsString - funcs["decmd"] = genInternalDecCommandAsString - funcs["zerocmd"] = genInternalZeroValue - funcs["hasprefix"] = strings.HasPrefix - funcs["sorttype"] = genInternalSortType - - genInternalV = gt - genInternalTmplFuncs = funcs -} - -// genInternalGoFile is used to generate source files from templates. -// It is run by the program author alone. -// Unfortunately, it has to be exported so that it can be called from a command line tool. -// *** DO NOT USE *** -func genInternalGoFile(r io.Reader, w io.Writer, safe bool) (err error) { - genInternalOnce.Do(genInternalInit) - - gt := genInternalV - gt.Unsafe = !safe - - t := template.New("").Funcs(genInternalTmplFuncs) - - tmplstr, err := ioutil.ReadAll(r) - if err != nil { - return - } - - if t, err = t.Parse(string(tmplstr)); err != nil { - return - } - - var out bytes.Buffer - err = t.Execute(&out, gt) - if err != nil { - return - } - - bout, err := format.Source(out.Bytes()) - if err != nil { - w.Write(out.Bytes()) // write out if error, so we can still see. - // w.Write(bout) // write out if error, as much as possible, so we can still see. - return - } - w.Write(bout) - return -} diff --git a/vendor/github.com/ugorji/go/codec/gen_15.go b/vendor/github.com/ugorji/go/codec/gen_15.go deleted file mode 100644 index ab76c3102..000000000 --- a/vendor/github.com/ugorji/go/codec/gen_15.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// +build go1.5,!go1.6 - -package codec - -import "os" - -func init() { - genCheckVendor = os.Getenv("GO15VENDOREXPERIMENT") == "1" -} diff --git a/vendor/github.com/ugorji/go/codec/gen_16.go b/vendor/github.com/ugorji/go/codec/gen_16.go deleted file mode 100644 index 87c04e2e1..000000000 --- a/vendor/github.com/ugorji/go/codec/gen_16.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -// +build go1.6 - -package codec - -import "os" - -func init() { - genCheckVendor = os.Getenv("GO15VENDOREXPERIMENT") != "0" -} diff --git a/vendor/github.com/ugorji/go/codec/helper.go b/vendor/github.com/ugorji/go/codec/helper.go deleted file mode 100644 index f3d2600d3..000000000 --- a/vendor/github.com/ugorji/go/codec/helper.go +++ /dev/null @@ -1,1272 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -// Contains code shared by both encode and decode. - -// Some shared ideas around encoding/decoding -// ------------------------------------------ -// -// If an interface{} is passed, we first do a type assertion to see if it is -// a primitive type or a map/slice of primitive types, and use a fastpath to handle it. -// -// If we start with a reflect.Value, we are already in reflect.Value land and -// will try to grab the function for the underlying Type and directly call that function. -// This is more performant than calling reflect.Value.Interface(). -// -// This still helps us bypass many layers of reflection, and give best performance. -// -// Containers -// ------------ -// Containers in the stream are either associative arrays (key-value pairs) or -// regular arrays (indexed by incrementing integers). -// -// Some streams support indefinite-length containers, and use a breaking -// byte-sequence to denote that the container has come to an end. -// -// Some streams also are text-based, and use explicit separators to denote the -// end/beginning of different values. -// -// During encode, we use a high-level condition to determine how to iterate through -// the container. That decision is based on whether the container is text-based (with -// separators) or binary (without separators). If binary, we do not even call the -// encoding of separators. -// -// During decode, we use a different high-level condition to determine how to iterate -// through the containers. That decision is based on whether the stream contained -// a length prefix, or if it used explicit breaks. If length-prefixed, we assume that -// it has to be binary, and we do not even try to read separators. -// -// The only codec that may suffer (slightly) is cbor, and only when decoding indefinite-length. -// It may suffer because we treat it like a text-based codec, and read separators. -// However, this read is a no-op and the cost is insignificant. -// -// Philosophy -// ------------ -// On decode, this codec will update containers appropriately: -// - If struct, update fields from stream into fields of struct. -// If field in stream not found in struct, handle appropriately (based on option). -// If a struct field has no corresponding value in the stream, leave it AS IS. -// If nil in stream, set value to nil/zero value. -// - If map, update map from stream. -// If the stream value is NIL, set the map to nil. -// - if slice, try to update up to length of array in stream. -// if container len is less than stream array length, -// and container cannot be expanded, handled (based on option). -// This means you can decode 4-element stream array into 1-element array. -// -// ------------------------------------ -// On encode, user can specify omitEmpty. This means that the value will be omitted -// if the zero value. The problem may occur during decode, where omitted values do not affect -// the value being decoded into. This means that if decoding into a struct with an -// int field with current value=5, and the field is omitted in the stream, then after -// decoding, the value will still be 5 (not 0). -// omitEmpty only works if you guarantee that you always decode into zero-values. -// -// ------------------------------------ -// We could have truncated a map to remove keys not available in the stream, -// or set values in the struct which are not in the stream to their zero values. -// We decided against it because there is no efficient way to do it. -// We may introduce it as an option later. -// However, that will require enabling it for both runtime and code generation modes. -// -// To support truncate, we need to do 2 passes over the container: -// map -// - first collect all keys (e.g. in k1) -// - for each key in stream, mark k1 that the key should not be removed -// - after updating map, do second pass and call delete for all keys in k1 which are not marked -// struct: -// - for each field, track the *typeInfo s1 -// - iterate through all s1, and for each one not marked, set value to zero -// - this involves checking the possible anonymous fields which are nil ptrs. -// too much work. -// -// ------------------------------------------ -// Error Handling is done within the library using panic. -// -// This way, the code doesn't have to keep checking if an error has happened, -// and we don't have to keep sending the error value along with each call -// or storing it in the En|Decoder and checking it constantly along the way. -// -// The disadvantage is that small functions which use panics cannot be inlined. -// The code accounts for that by only using panics behind an interface; -// since interface calls cannot be inlined, this is irrelevant. -// -// We considered storing the error is En|Decoder. -// - once it has its err field set, it cannot be used again. -// - panicing will be optional, controlled by const flag. -// - code should always check error first and return early. -// We eventually decided against it as it makes the code clumsier to always -// check for these error conditions. - -import ( - "bytes" - "encoding" - "encoding/binary" - "errors" - "fmt" - "math" - "reflect" - "sort" - "strings" - "sync" - "time" -) - -const ( - scratchByteArrayLen = 32 - initCollectionCap = 32 // 32 is defensive. 16 is preferred. - - // Support encoding.(Binary|Text)(Unm|M)arshaler. - // This constant flag will enable or disable it. - supportMarshalInterfaces = true - - // Each Encoder or Decoder uses a cache of functions based on conditionals, - // so that the conditionals are not run every time. - // - // Either a map or a slice is used to keep track of the functions. - // The map is more natural, but has a higher cost than a slice/array. - // This flag (useMapForCodecCache) controls which is used. - // - // From benchmarks, slices with linear search perform better with < 32 entries. - // We have typically seen a high threshold of about 24 entries. - useMapForCodecCache = false - - // for debugging, set this to false, to catch panic traces. - // Note that this will always cause rpc tests to fail, since they need io.EOF sent via panic. - recoverPanicToErr = true - - // Fast path functions try to create a fast path encode or decode implementation - // for common maps and slices, by by-passing reflection altogether. - fastpathEnabled = true - - // if checkStructForEmptyValue, check structs fields to see if an empty value. - // This could be an expensive call, so possibly disable it. - checkStructForEmptyValue = false - - // if derefForIsEmptyValue, deref pointers and interfaces when checking isEmptyValue - derefForIsEmptyValue = false - - // if resetSliceElemToZeroValue, then on decoding a slice, reset the element to a zero value first. - // Only concern is that, if the slice already contained some garbage, we will decode into that garbage. - // The chances of this are slim, so leave this "optimization". - // TODO: should this be true, to ensure that we always decode into a "zero" "empty" value? - resetSliceElemToZeroValue bool = false -) - -var ( - oneByteArr = [1]byte{0} - zeroByteSlice = oneByteArr[:0:0] -) - -type charEncoding uint8 - -const ( - c_RAW charEncoding = iota - c_UTF8 - c_UTF16LE - c_UTF16BE - c_UTF32LE - c_UTF32BE -) - -// valueType is the stream type -type valueType uint8 - -const ( - valueTypeUnset valueType = iota - valueTypeNil - valueTypeInt - valueTypeUint - valueTypeFloat - valueTypeBool - valueTypeString - valueTypeSymbol - valueTypeBytes - valueTypeMap - valueTypeArray - valueTypeTimestamp - valueTypeExt - - // valueTypeInvalid = 0xff -) - -type seqType uint8 - -const ( - _ seqType = iota - seqTypeArray - seqTypeSlice - seqTypeChan -) - -// note that containerMapStart and containerArraySend are not sent. -// This is because the ReadXXXStart and EncodeXXXStart already does these. -type containerState uint8 - -const ( - _ containerState = iota - - containerMapStart // slot left open, since Driver method already covers it - containerMapKey - containerMapValue - containerMapEnd - containerArrayStart // slot left open, since Driver methods already cover it - containerArrayElem - containerArrayEnd -) - -type rgetPoolT struct { - encNames [8]string - fNames [8]string - etypes [8]uintptr - sfis [8]*structFieldInfo -} - -var rgetPool = sync.Pool{ - New: func() interface{} { return new(rgetPoolT) }, -} - -type rgetT struct { - fNames []string - encNames []string - etypes []uintptr - sfis []*structFieldInfo -} - -type containerStateRecv interface { - sendContainerState(containerState) -} - -// mirror json.Marshaler and json.Unmarshaler here, -// so we don't import the encoding/json package -type jsonMarshaler interface { - MarshalJSON() ([]byte, error) -} -type jsonUnmarshaler interface { - UnmarshalJSON([]byte) error -} - -var ( - bigen = binary.BigEndian - structInfoFieldName = "_struct" - - mapStrIntfTyp = reflect.TypeOf(map[string]interface{}(nil)) - mapIntfIntfTyp = reflect.TypeOf(map[interface{}]interface{}(nil)) - intfSliceTyp = reflect.TypeOf([]interface{}(nil)) - intfTyp = intfSliceTyp.Elem() - - stringTyp = reflect.TypeOf("") - timeTyp = reflect.TypeOf(time.Time{}) - rawExtTyp = reflect.TypeOf(RawExt{}) - uint8SliceTyp = reflect.TypeOf([]uint8(nil)) - - mapBySliceTyp = reflect.TypeOf((*MapBySlice)(nil)).Elem() - - binaryMarshalerTyp = reflect.TypeOf((*encoding.BinaryMarshaler)(nil)).Elem() - binaryUnmarshalerTyp = reflect.TypeOf((*encoding.BinaryUnmarshaler)(nil)).Elem() - - textMarshalerTyp = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() - textUnmarshalerTyp = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() - - jsonMarshalerTyp = reflect.TypeOf((*jsonMarshaler)(nil)).Elem() - jsonUnmarshalerTyp = reflect.TypeOf((*jsonUnmarshaler)(nil)).Elem() - - selferTyp = reflect.TypeOf((*Selfer)(nil)).Elem() - - uint8SliceTypId = reflect.ValueOf(uint8SliceTyp).Pointer() - rawExtTypId = reflect.ValueOf(rawExtTyp).Pointer() - intfTypId = reflect.ValueOf(intfTyp).Pointer() - timeTypId = reflect.ValueOf(timeTyp).Pointer() - stringTypId = reflect.ValueOf(stringTyp).Pointer() - - mapStrIntfTypId = reflect.ValueOf(mapStrIntfTyp).Pointer() - mapIntfIntfTypId = reflect.ValueOf(mapIntfIntfTyp).Pointer() - intfSliceTypId = reflect.ValueOf(intfSliceTyp).Pointer() - // mapBySliceTypId = reflect.ValueOf(mapBySliceTyp).Pointer() - - intBitsize uint8 = uint8(reflect.TypeOf(int(0)).Bits()) - uintBitsize uint8 = uint8(reflect.TypeOf(uint(0)).Bits()) - - bsAll0x00 = []byte{0, 0, 0, 0, 0, 0, 0, 0} - bsAll0xff = []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} - - chkOvf checkOverflow - - noFieldNameToStructFieldInfoErr = errors.New("no field name passed to parseStructFieldInfo") -) - -var defTypeInfos = NewTypeInfos([]string{"codec", "json"}) - -// Selfer defines methods by which a value can encode or decode itself. -// -// Any type which implements Selfer will be able to encode or decode itself. -// Consequently, during (en|de)code, this takes precedence over -// (text|binary)(M|Unm)arshal or extension support. -type Selfer interface { - CodecEncodeSelf(*Encoder) - CodecDecodeSelf(*Decoder) -} - -// MapBySlice represents a slice which should be encoded as a map in the stream. -// The slice contains a sequence of key-value pairs. -// This affords storing a map in a specific sequence in the stream. -// -// The support of MapBySlice affords the following: -// - A slice type which implements MapBySlice will be encoded as a map -// - A slice can be decoded from a map in the stream -type MapBySlice interface { - MapBySlice() -} - -// WARNING: DO NOT USE DIRECTLY. EXPORTED FOR GODOC BENEFIT. WILL BE REMOVED. -// -// BasicHandle encapsulates the common options and extension functions. -type BasicHandle struct { - // TypeInfos is used to get the type info for any type. - // - // If not configured, the default TypeInfos is used, which uses struct tag keys: codec, json - TypeInfos *TypeInfos - - extHandle - EncodeOptions - DecodeOptions -} - -func (x *BasicHandle) getBasicHandle() *BasicHandle { - return x -} - -func (x *BasicHandle) getTypeInfo(rtid uintptr, rt reflect.Type) (pti *typeInfo) { - if x.TypeInfos != nil { - return x.TypeInfos.get(rtid, rt) - } - return defTypeInfos.get(rtid, rt) -} - -// Handle is the interface for a specific encoding format. -// -// Typically, a Handle is pre-configured before first time use, -// and not modified while in use. Such a pre-configured Handle -// is safe for concurrent access. -type Handle interface { - getBasicHandle() *BasicHandle - newEncDriver(w *Encoder) encDriver - newDecDriver(r *Decoder) decDriver - isBinary() bool -} - -// RawExt represents raw unprocessed extension data. -// Some codecs will decode extension data as a *RawExt if there is no registered extension for the tag. -// -// Only one of Data or Value is nil. If Data is nil, then the content of the RawExt is in the Value. -type RawExt struct { - Tag uint64 - // Data is the []byte which represents the raw ext. If Data is nil, ext is exposed in Value. - // Data is used by codecs (e.g. binc, msgpack, simple) which do custom serialization of the types - Data []byte - // Value represents the extension, if Data is nil. - // Value is used by codecs (e.g. cbor) which use the format to do custom serialization of the types. - Value interface{} -} - -// BytesExt handles custom (de)serialization of types to/from []byte. -// It is used by codecs (e.g. binc, msgpack, simple) which do custom serialization of the types. -type BytesExt interface { - // WriteExt converts a value to a []byte. - // - // Note: v *may* be a pointer to the extension type, if the extension type was a struct or array. - WriteExt(v interface{}) []byte - - // ReadExt updates a value from a []byte. - ReadExt(dst interface{}, src []byte) -} - -// InterfaceExt handles custom (de)serialization of types to/from another interface{} value. -// The Encoder or Decoder will then handle the further (de)serialization of that known type. -// -// It is used by codecs (e.g. cbor, json) which use the format to do custom serialization of the types. -type InterfaceExt interface { - // ConvertExt converts a value into a simpler interface for easy encoding e.g. convert time.Time to int64. - // - // Note: v *may* be a pointer to the extension type, if the extension type was a struct or array. - ConvertExt(v interface{}) interface{} - - // UpdateExt updates a value from a simpler interface for easy decoding e.g. convert int64 to time.Time. - UpdateExt(dst interface{}, src interface{}) -} - -// Ext handles custom (de)serialization of custom types / extensions. -type Ext interface { - BytesExt - InterfaceExt -} - -// addExtWrapper is a wrapper implementation to support former AddExt exported method. -type addExtWrapper struct { - encFn func(reflect.Value) ([]byte, error) - decFn func(reflect.Value, []byte) error -} - -func (x addExtWrapper) WriteExt(v interface{}) []byte { - bs, err := x.encFn(reflect.ValueOf(v)) - if err != nil { - panic(err) - } - return bs -} - -func (x addExtWrapper) ReadExt(v interface{}, bs []byte) { - if err := x.decFn(reflect.ValueOf(v), bs); err != nil { - panic(err) - } -} - -func (x addExtWrapper) ConvertExt(v interface{}) interface{} { - return x.WriteExt(v) -} - -func (x addExtWrapper) UpdateExt(dest interface{}, v interface{}) { - x.ReadExt(dest, v.([]byte)) -} - -type setExtWrapper struct { - b BytesExt - i InterfaceExt -} - -func (x *setExtWrapper) WriteExt(v interface{}) []byte { - if x.b == nil { - panic("BytesExt.WriteExt is not supported") - } - return x.b.WriteExt(v) -} - -func (x *setExtWrapper) ReadExt(v interface{}, bs []byte) { - if x.b == nil { - panic("BytesExt.WriteExt is not supported") - - } - x.b.ReadExt(v, bs) -} - -func (x *setExtWrapper) ConvertExt(v interface{}) interface{} { - if x.i == nil { - panic("InterfaceExt.ConvertExt is not supported") - - } - return x.i.ConvertExt(v) -} - -func (x *setExtWrapper) UpdateExt(dest interface{}, v interface{}) { - if x.i == nil { - panic("InterfaceExxt.UpdateExt is not supported") - - } - x.i.UpdateExt(dest, v) -} - -// type errorString string -// func (x errorString) Error() string { return string(x) } - -type binaryEncodingType struct{} - -func (_ binaryEncodingType) isBinary() bool { return true } - -type textEncodingType struct{} - -func (_ textEncodingType) isBinary() bool { return false } - -// noBuiltInTypes is embedded into many types which do not support builtins -// e.g. msgpack, simple, cbor. -type noBuiltInTypes struct{} - -func (_ noBuiltInTypes) IsBuiltinType(rt uintptr) bool { return false } -func (_ noBuiltInTypes) EncodeBuiltin(rt uintptr, v interface{}) {} -func (_ noBuiltInTypes) DecodeBuiltin(rt uintptr, v interface{}) {} - -type noStreamingCodec struct{} - -func (_ noStreamingCodec) CheckBreak() bool { return false } - -// bigenHelper. -// Users must already slice the x completely, because we will not reslice. -type bigenHelper struct { - x []byte // must be correctly sliced to appropriate len. slicing is a cost. - w encWriter -} - -func (z bigenHelper) writeUint16(v uint16) { - bigen.PutUint16(z.x, v) - z.w.writeb(z.x) -} - -func (z bigenHelper) writeUint32(v uint32) { - bigen.PutUint32(z.x, v) - z.w.writeb(z.x) -} - -func (z bigenHelper) writeUint64(v uint64) { - bigen.PutUint64(z.x, v) - z.w.writeb(z.x) -} - -type extTypeTagFn struct { - rtid uintptr - rt reflect.Type - tag uint64 - ext Ext -} - -type extHandle []extTypeTagFn - -// DEPRECATED: Use SetBytesExt or SetInterfaceExt on the Handle instead. -// -// AddExt registes an encode and decode function for a reflect.Type. -// AddExt internally calls SetExt. -// To deregister an Ext, call AddExt with nil encfn and/or nil decfn. -func (o *extHandle) AddExt( - rt reflect.Type, tag byte, - encfn func(reflect.Value) ([]byte, error), decfn func(reflect.Value, []byte) error, -) (err error) { - if encfn == nil || decfn == nil { - return o.SetExt(rt, uint64(tag), nil) - } - return o.SetExt(rt, uint64(tag), addExtWrapper{encfn, decfn}) -} - -// DEPRECATED: Use SetBytesExt or SetInterfaceExt on the Handle instead. -// -// Note that the type must be a named type, and specifically not -// a pointer or Interface. An error is returned if that is not honored. -// -// To Deregister an ext, call SetExt with nil Ext -func (o *extHandle) SetExt(rt reflect.Type, tag uint64, ext Ext) (err error) { - // o is a pointer, because we may need to initialize it - if rt.PkgPath() == "" || rt.Kind() == reflect.Interface { - err = fmt.Errorf("codec.Handle.AddExt: Takes named type, especially not a pointer or interface: %T", - reflect.Zero(rt).Interface()) - return - } - - rtid := reflect.ValueOf(rt).Pointer() - for _, v := range *o { - if v.rtid == rtid { - v.tag, v.ext = tag, ext - return - } - } - - if *o == nil { - *o = make([]extTypeTagFn, 0, 4) - } - *o = append(*o, extTypeTagFn{rtid, rt, tag, ext}) - return -} - -func (o extHandle) getExt(rtid uintptr) *extTypeTagFn { - var v *extTypeTagFn - for i := range o { - v = &o[i] - if v.rtid == rtid { - return v - } - } - return nil -} - -func (o extHandle) getExtForTag(tag uint64) *extTypeTagFn { - var v *extTypeTagFn - for i := range o { - v = &o[i] - if v.tag == tag { - return v - } - } - return nil -} - -type structFieldInfo struct { - encName string // encode name - - // only one of 'i' or 'is' can be set. If 'i' is -1, then 'is' has been set. - - is []int // (recursive/embedded) field index in struct - i int16 // field index in struct - omitEmpty bool - toArray bool // if field is _struct, is the toArray set? -} - -// func (si *structFieldInfo) isZero() bool { -// return si.encName == "" && len(si.is) == 0 && si.i == 0 && !si.omitEmpty && !si.toArray -// } - -// rv returns the field of the struct. -// If anonymous, it returns an Invalid -func (si *structFieldInfo) field(v reflect.Value, update bool) (rv2 reflect.Value) { - if si.i != -1 { - v = v.Field(int(si.i)) - return v - } - // replicate FieldByIndex - for _, x := range si.is { - for v.Kind() == reflect.Ptr { - if v.IsNil() { - if !update { - return - } - v.Set(reflect.New(v.Type().Elem())) - } - v = v.Elem() - } - v = v.Field(x) - } - return v -} - -func (si *structFieldInfo) setToZeroValue(v reflect.Value) { - if si.i != -1 { - v = v.Field(int(si.i)) - v.Set(reflect.Zero(v.Type())) - // v.Set(reflect.New(v.Type()).Elem()) - // v.Set(reflect.New(v.Type())) - } else { - // replicate FieldByIndex - for _, x := range si.is { - for v.Kind() == reflect.Ptr { - if v.IsNil() { - return - } - v = v.Elem() - } - v = v.Field(x) - } - v.Set(reflect.Zero(v.Type())) - } -} - -func parseStructFieldInfo(fname string, stag string) *structFieldInfo { - // if fname == "" { - // panic(noFieldNameToStructFieldInfoErr) - // } - si := structFieldInfo{ - encName: fname, - } - - if stag != "" { - for i, s := range strings.Split(stag, ",") { - if i == 0 { - if s != "" { - si.encName = s - } - } else { - if s == "omitempty" { - si.omitEmpty = true - } else if s == "toarray" { - si.toArray = true - } - } - } - } - // si.encNameBs = []byte(si.encName) - return &si -} - -type sfiSortedByEncName []*structFieldInfo - -func (p sfiSortedByEncName) Len() int { - return len(p) -} - -func (p sfiSortedByEncName) Less(i, j int) bool { - return p[i].encName < p[j].encName -} - -func (p sfiSortedByEncName) Swap(i, j int) { - p[i], p[j] = p[j], p[i] -} - -// typeInfo keeps information about each type referenced in the encode/decode sequence. -// -// During an encode/decode sequence, we work as below: -// - If base is a built in type, en/decode base value -// - If base is registered as an extension, en/decode base value -// - If type is binary(M/Unm)arshaler, call Binary(M/Unm)arshal method -// - If type is text(M/Unm)arshaler, call Text(M/Unm)arshal method -// - Else decode appropriately based on the reflect.Kind -type typeInfo struct { - sfi []*structFieldInfo // sorted. Used when enc/dec struct to map. - sfip []*structFieldInfo // unsorted. Used when enc/dec struct to array. - - rt reflect.Type - rtid uintptr - - numMeth uint16 // number of methods - - // baseId gives pointer to the base reflect.Type, after deferencing - // the pointers. E.g. base type of ***time.Time is time.Time. - base reflect.Type - baseId uintptr - baseIndir int8 // number of indirections to get to base - - mbs bool // base type (T or *T) is a MapBySlice - - bm bool // base type (T or *T) is a binaryMarshaler - bunm bool // base type (T or *T) is a binaryUnmarshaler - bmIndir int8 // number of indirections to get to binaryMarshaler type - bunmIndir int8 // number of indirections to get to binaryUnmarshaler type - - tm bool // base type (T or *T) is a textMarshaler - tunm bool // base type (T or *T) is a textUnmarshaler - tmIndir int8 // number of indirections to get to textMarshaler type - tunmIndir int8 // number of indirections to get to textUnmarshaler type - - jm bool // base type (T or *T) is a jsonMarshaler - junm bool // base type (T or *T) is a jsonUnmarshaler - jmIndir int8 // number of indirections to get to jsonMarshaler type - junmIndir int8 // number of indirections to get to jsonUnmarshaler type - - cs bool // base type (T or *T) is a Selfer - csIndir int8 // number of indirections to get to Selfer type - - toArray bool // whether this (struct) type should be encoded as an array -} - -func (ti *typeInfo) indexForEncName(name string) int { - // NOTE: name may be a stringView, so don't pass it to another function. - //tisfi := ti.sfi - const binarySearchThreshold = 16 - if sfilen := len(ti.sfi); sfilen < binarySearchThreshold { - // linear search. faster than binary search in my testing up to 16-field structs. - for i, si := range ti.sfi { - if si.encName == name { - return i - } - } - } else { - // binary search. adapted from sort/search.go. - h, i, j := 0, 0, sfilen - for i < j { - h = i + (j-i)/2 - if ti.sfi[h].encName < name { - i = h + 1 - } else { - j = h - } - } - if i < sfilen && ti.sfi[i].encName == name { - return i - } - } - return -1 -} - -// TypeInfos caches typeInfo for each type on first inspection. -// -// It is configured with a set of tag keys, which are used to get -// configuration for the type. -type TypeInfos struct { - infos map[uintptr]*typeInfo - mu sync.RWMutex - tags []string -} - -// NewTypeInfos creates a TypeInfos given a set of struct tags keys. -// -// This allows users customize the struct tag keys which contain configuration -// of their types. -func NewTypeInfos(tags []string) *TypeInfos { - return &TypeInfos{tags: tags, infos: make(map[uintptr]*typeInfo, 64)} -} - -func (x *TypeInfos) structTag(t reflect.StructTag) (s string) { - // check for tags: codec, json, in that order. - // this allows seamless support for many configured structs. - for _, x := range x.tags { - s = t.Get(x) - if s != "" { - return s - } - } - return -} - -func (x *TypeInfos) get(rtid uintptr, rt reflect.Type) (pti *typeInfo) { - var ok bool - x.mu.RLock() - pti, ok = x.infos[rtid] - x.mu.RUnlock() - if ok { - return - } - - // do not hold lock while computing this. - // it may lead to duplication, but that's ok. - ti := typeInfo{rt: rt, rtid: rtid} - ti.numMeth = uint16(rt.NumMethod()) - - var indir int8 - if ok, indir = implementsIntf(rt, binaryMarshalerTyp); ok { - ti.bm, ti.bmIndir = true, indir - } - if ok, indir = implementsIntf(rt, binaryUnmarshalerTyp); ok { - ti.bunm, ti.bunmIndir = true, indir - } - if ok, indir = implementsIntf(rt, textMarshalerTyp); ok { - ti.tm, ti.tmIndir = true, indir - } - if ok, indir = implementsIntf(rt, textUnmarshalerTyp); ok { - ti.tunm, ti.tunmIndir = true, indir - } - if ok, indir = implementsIntf(rt, jsonMarshalerTyp); ok { - ti.jm, ti.jmIndir = true, indir - } - if ok, indir = implementsIntf(rt, jsonUnmarshalerTyp); ok { - ti.junm, ti.junmIndir = true, indir - } - if ok, indir = implementsIntf(rt, selferTyp); ok { - ti.cs, ti.csIndir = true, indir - } - if ok, _ = implementsIntf(rt, mapBySliceTyp); ok { - ti.mbs = true - } - - pt := rt - var ptIndir int8 - // for ; pt.Kind() == reflect.Ptr; pt, ptIndir = pt.Elem(), ptIndir+1 { } - for pt.Kind() == reflect.Ptr { - pt = pt.Elem() - ptIndir++ - } - if ptIndir == 0 { - ti.base = rt - ti.baseId = rtid - } else { - ti.base = pt - ti.baseId = reflect.ValueOf(pt).Pointer() - ti.baseIndir = ptIndir - } - - if rt.Kind() == reflect.Struct { - var siInfo *structFieldInfo - if f, ok := rt.FieldByName(structInfoFieldName); ok { - siInfo = parseStructFieldInfo(structInfoFieldName, x.structTag(f.Tag)) - ti.toArray = siInfo.toArray - } - pi := rgetPool.Get() - pv := pi.(*rgetPoolT) - pv.etypes[0] = ti.baseId - vv := rgetT{pv.fNames[:0], pv.encNames[:0], pv.etypes[:1], pv.sfis[:0]} - x.rget(rt, rtid, nil, &vv, siInfo) - ti.sfip = make([]*structFieldInfo, len(vv.sfis)) - ti.sfi = make([]*structFieldInfo, len(vv.sfis)) - copy(ti.sfip, vv.sfis) - sort.Sort(sfiSortedByEncName(vv.sfis)) - copy(ti.sfi, vv.sfis) - rgetPool.Put(pi) - } - // sfi = sfip - - x.mu.Lock() - if pti, ok = x.infos[rtid]; !ok { - pti = &ti - x.infos[rtid] = pti - } - x.mu.Unlock() - return -} - -func (x *TypeInfos) rget(rt reflect.Type, rtid uintptr, - indexstack []int, pv *rgetT, siInfo *structFieldInfo, -) { - // This will read up the fields and store how to access the value. - // It uses the go language's rules for embedding, as below: - // - if a field has been seen while traversing, skip it - // - if an encName has been seen while traversing, skip it - // - if an embedded type has been seen, skip it - // - // Also, per Go's rules, embedded fields must be analyzed AFTER all top-level fields. - // - // Note: we consciously use slices, not a map, to simulate a set. - // Typically, types have < 16 fields, and iteration using equals is faster than maps there - - type anonField struct { - ft reflect.Type - idx int - } - - var anonFields []anonField - -LOOP: - for j, jlen := 0, rt.NumField(); j < jlen; j++ { - f := rt.Field(j) - fkind := f.Type.Kind() - // skip if a func type, or is unexported, or structTag value == "-" - switch fkind { - case reflect.Func, reflect.Complex64, reflect.Complex128, reflect.UnsafePointer: - continue LOOP - } - - // if r1, _ := utf8.DecodeRuneInString(f.Name); r1 == utf8.RuneError || !unicode.IsUpper(r1) { - if f.PkgPath != "" && !f.Anonymous { // unexported, not embedded - continue - } - stag := x.structTag(f.Tag) - if stag == "-" { - continue - } - var si *structFieldInfo - // if anonymous and no struct tag (or it's blank), and a struct (or pointer to struct), inline it. - if f.Anonymous && fkind != reflect.Interface { - doInline := stag == "" - if !doInline { - si = parseStructFieldInfo("", stag) - doInline = si.encName == "" - // doInline = si.isZero() - } - if doInline { - ft := f.Type - for ft.Kind() == reflect.Ptr { - ft = ft.Elem() - } - if ft.Kind() == reflect.Struct { - // handle anonymous fields after handling all the non-anon fields - anonFields = append(anonFields, anonField{ft, j}) - continue - } - } - } - - // after the anonymous dance: if an unexported field, skip - if f.PkgPath != "" { // unexported - continue - } - - if f.Name == "" { - panic(noFieldNameToStructFieldInfoErr) - } - - for _, k := range pv.fNames { - if k == f.Name { - continue LOOP - } - } - pv.fNames = append(pv.fNames, f.Name) - - if si == nil { - si = parseStructFieldInfo(f.Name, stag) - } else if si.encName == "" { - si.encName = f.Name - } - - for _, k := range pv.encNames { - if k == si.encName { - continue LOOP - } - } - pv.encNames = append(pv.encNames, si.encName) - - // si.ikind = int(f.Type.Kind()) - if len(indexstack) == 0 { - si.i = int16(j) - } else { - si.i = -1 - si.is = make([]int, len(indexstack)+1) - copy(si.is, indexstack) - si.is[len(indexstack)] = j - // si.is = append(append(make([]int, 0, len(indexstack)+4), indexstack...), j) - } - - if siInfo != nil { - if siInfo.omitEmpty { - si.omitEmpty = true - } - } - pv.sfis = append(pv.sfis, si) - } - - // now handle anonymous fields -LOOP2: - for _, af := range anonFields { - // if etypes contains this, then do not call rget again (as the fields are already seen here) - ftid := reflect.ValueOf(af.ft).Pointer() - for _, k := range pv.etypes { - if k == ftid { - continue LOOP2 - } - } - pv.etypes = append(pv.etypes, ftid) - - indexstack2 := make([]int, len(indexstack)+1) - copy(indexstack2, indexstack) - indexstack2[len(indexstack)] = af.idx - // indexstack2 := append(append(make([]int, 0, len(indexstack)+4), indexstack...), j) - x.rget(af.ft, ftid, indexstack2, pv, siInfo) - } -} - -func panicToErr(err *error) { - if recoverPanicToErr { - if x := recover(); x != nil { - //debug.PrintStack() - panicValToErr(x, err) - } - } -} - -// func doPanic(tag string, format string, params ...interface{}) { -// params2 := make([]interface{}, len(params)+1) -// params2[0] = tag -// copy(params2[1:], params) -// panic(fmt.Errorf("%s: "+format, params2...)) -// } - -func isImmutableKind(k reflect.Kind) (v bool) { - return false || - k == reflect.Int || - k == reflect.Int8 || - k == reflect.Int16 || - k == reflect.Int32 || - k == reflect.Int64 || - k == reflect.Uint || - k == reflect.Uint8 || - k == reflect.Uint16 || - k == reflect.Uint32 || - k == reflect.Uint64 || - k == reflect.Uintptr || - k == reflect.Float32 || - k == reflect.Float64 || - k == reflect.Bool || - k == reflect.String -} - -// these functions must be inlinable, and not call anybody -type checkOverflow struct{} - -func (_ checkOverflow) Float32(f float64) (overflow bool) { - if f < 0 { - f = -f - } - return math.MaxFloat32 < f && f <= math.MaxFloat64 -} - -func (_ checkOverflow) Uint(v uint64, bitsize uint8) (overflow bool) { - if bitsize == 0 || bitsize >= 64 || v == 0 { - return - } - if trunc := (v << (64 - bitsize)) >> (64 - bitsize); v != trunc { - overflow = true - } - return -} - -func (_ checkOverflow) Int(v int64, bitsize uint8) (overflow bool) { - if bitsize == 0 || bitsize >= 64 || v == 0 { - return - } - if trunc := (v << (64 - bitsize)) >> (64 - bitsize); v != trunc { - overflow = true - } - return -} - -func (_ checkOverflow) SignedInt(v uint64) (i int64, overflow bool) { - //e.g. -127 to 128 for int8 - pos := (v >> 63) == 0 - ui2 := v & 0x7fffffffffffffff - if pos { - if ui2 > math.MaxInt64 { - overflow = true - return - } - } else { - if ui2 > math.MaxInt64-1 { - overflow = true - return - } - } - i = int64(v) - return -} - -// ------------------ SORT ----------------- - -func isNaN(f float64) bool { return f != f } - -// ----------------------- - -type intSlice []int64 -type uintSlice []uint64 -type floatSlice []float64 -type boolSlice []bool -type stringSlice []string -type bytesSlice [][]byte - -func (p intSlice) Len() int { return len(p) } -func (p intSlice) Less(i, j int) bool { return p[i] < p[j] } -func (p intSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p uintSlice) Len() int { return len(p) } -func (p uintSlice) Less(i, j int) bool { return p[i] < p[j] } -func (p uintSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p floatSlice) Len() int { return len(p) } -func (p floatSlice) Less(i, j int) bool { - return p[i] < p[j] || isNaN(p[i]) && !isNaN(p[j]) -} -func (p floatSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p stringSlice) Len() int { return len(p) } -func (p stringSlice) Less(i, j int) bool { return p[i] < p[j] } -func (p stringSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p bytesSlice) Len() int { return len(p) } -func (p bytesSlice) Less(i, j int) bool { return bytes.Compare(p[i], p[j]) == -1 } -func (p bytesSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p boolSlice) Len() int { return len(p) } -func (p boolSlice) Less(i, j int) bool { return !p[i] && p[j] } -func (p boolSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -// --------------------- - -type intRv struct { - v int64 - r reflect.Value -} -type intRvSlice []intRv -type uintRv struct { - v uint64 - r reflect.Value -} -type uintRvSlice []uintRv -type floatRv struct { - v float64 - r reflect.Value -} -type floatRvSlice []floatRv -type boolRv struct { - v bool - r reflect.Value -} -type boolRvSlice []boolRv -type stringRv struct { - v string - r reflect.Value -} -type stringRvSlice []stringRv -type bytesRv struct { - v []byte - r reflect.Value -} -type bytesRvSlice []bytesRv - -func (p intRvSlice) Len() int { return len(p) } -func (p intRvSlice) Less(i, j int) bool { return p[i].v < p[j].v } -func (p intRvSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p uintRvSlice) Len() int { return len(p) } -func (p uintRvSlice) Less(i, j int) bool { return p[i].v < p[j].v } -func (p uintRvSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p floatRvSlice) Len() int { return len(p) } -func (p floatRvSlice) Less(i, j int) bool { - return p[i].v < p[j].v || isNaN(p[i].v) && !isNaN(p[j].v) -} -func (p floatRvSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p stringRvSlice) Len() int { return len(p) } -func (p stringRvSlice) Less(i, j int) bool { return p[i].v < p[j].v } -func (p stringRvSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p bytesRvSlice) Len() int { return len(p) } -func (p bytesRvSlice) Less(i, j int) bool { return bytes.Compare(p[i].v, p[j].v) == -1 } -func (p bytesRvSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func (p boolRvSlice) Len() int { return len(p) } -func (p boolRvSlice) Less(i, j int) bool { return !p[i].v && p[j].v } -func (p boolRvSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -// ----------------- - -type bytesI struct { - v []byte - i interface{} -} - -type bytesISlice []bytesI - -func (p bytesISlice) Len() int { return len(p) } -func (p bytesISlice) Less(i, j int) bool { return bytes.Compare(p[i].v, p[j].v) == -1 } -func (p bytesISlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -// ----------------- - -type set []uintptr - -func (s *set) add(v uintptr) (exists bool) { - // e.ci is always nil, or len >= 1 - // defer func() { fmt.Printf("$$$$$$$$$$$ cirRef Add: %v, exists: %v\n", v, exists) }() - x := *s - if x == nil { - x = make([]uintptr, 1, 8) - x[0] = v - *s = x - return - } - // typically, length will be 1. make this perform. - if len(x) == 1 { - if j := x[0]; j == 0 { - x[0] = v - } else if j == v { - exists = true - } else { - x = append(x, v) - *s = x - } - return - } - // check if it exists - for _, j := range x { - if j == v { - exists = true - return - } - } - // try to replace a "deleted" slot - for i, j := range x { - if j == 0 { - x[i] = v - return - } - } - // if unable to replace deleted slot, just append it. - x = append(x, v) - *s = x - return -} - -func (s *set) remove(v uintptr) (exists bool) { - // defer func() { fmt.Printf("$$$$$$$$$$$ cirRef Rm: %v, exists: %v\n", v, exists) }() - x := *s - if len(x) == 0 { - return - } - if len(x) == 1 { - if x[0] == v { - x[0] = 0 - } - return - } - for i, j := range x { - if j == v { - exists = true - x[i] = 0 // set it to 0, as way to delete it. - // copy(x[i:], x[i+1:]) - // x = x[:len(x)-1] - return - } - } - return -} diff --git a/vendor/github.com/ugorji/go/codec/helper_internal.go b/vendor/github.com/ugorji/go/codec/helper_internal.go deleted file mode 100644 index dea981fbb..000000000 --- a/vendor/github.com/ugorji/go/codec/helper_internal.go +++ /dev/null @@ -1,242 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -// All non-std package dependencies live in this file, -// so porting to different environment is easy (just update functions). - -import ( - "errors" - "fmt" - "math" - "reflect" -) - -func panicValToErr(panicVal interface{}, err *error) { - if panicVal == nil { - return - } - // case nil - switch xerr := panicVal.(type) { - case error: - *err = xerr - case string: - *err = errors.New(xerr) - default: - *err = fmt.Errorf("%v", panicVal) - } - return -} - -func hIsEmptyValue(v reflect.Value, deref, checkStruct bool) bool { - switch v.Kind() { - case reflect.Invalid: - return true - case reflect.Array, reflect.Map, reflect.Slice, reflect.String: - return v.Len() == 0 - case reflect.Bool: - return !v.Bool() - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.Interface, reflect.Ptr: - if deref { - if v.IsNil() { - return true - } - return hIsEmptyValue(v.Elem(), deref, checkStruct) - } else { - return v.IsNil() - } - case reflect.Struct: - if !checkStruct { - return false - } - // return true if all fields are empty. else return false. - // we cannot use equality check, because some fields may be maps/slices/etc - // and consequently the structs are not comparable. - // return v.Interface() == reflect.Zero(v.Type()).Interface() - for i, n := 0, v.NumField(); i < n; i++ { - if !hIsEmptyValue(v.Field(i), deref, checkStruct) { - return false - } - } - return true - } - return false -} - -func isEmptyValue(v reflect.Value) bool { - return hIsEmptyValue(v, derefForIsEmptyValue, checkStructForEmptyValue) -} - -func pruneSignExt(v []byte, pos bool) (n int) { - if len(v) < 2 { - } else if pos && v[0] == 0 { - for ; v[n] == 0 && n+1 < len(v) && (v[n+1]&(1<<7) == 0); n++ { - } - } else if !pos && v[0] == 0xff { - for ; v[n] == 0xff && n+1 < len(v) && (v[n+1]&(1<<7) != 0); n++ { - } - } - return -} - -func implementsIntf(typ, iTyp reflect.Type) (success bool, indir int8) { - if typ == nil { - return - } - rt := typ - // The type might be a pointer and we need to keep - // dereferencing to the base type until we find an implementation. - for { - if rt.Implements(iTyp) { - return true, indir - } - if p := rt; p.Kind() == reflect.Ptr { - indir++ - if indir >= math.MaxInt8 { // insane number of indirections - return false, 0 - } - rt = p.Elem() - continue - } - break - } - // No luck yet, but if this is a base type (non-pointer), the pointer might satisfy. - if typ.Kind() != reflect.Ptr { - // Not a pointer, but does the pointer work? - if reflect.PtrTo(typ).Implements(iTyp) { - return true, -1 - } - } - return false, 0 -} - -// validate that this function is correct ... -// culled from OGRE (Object-Oriented Graphics Rendering Engine) -// function: halfToFloatI (http://stderr.org/doc/ogre-doc/api/OgreBitwise_8h-source.html) -func halfFloatToFloatBits(yy uint16) (d uint32) { - y := uint32(yy) - s := (y >> 15) & 0x01 - e := (y >> 10) & 0x1f - m := y & 0x03ff - - if e == 0 { - if m == 0 { // plu or minus 0 - return s << 31 - } else { // Denormalized number -- renormalize it - for (m & 0x00000400) == 0 { - m <<= 1 - e -= 1 - } - e += 1 - const zz uint32 = 0x0400 - m &= ^zz - } - } else if e == 31 { - if m == 0 { // Inf - return (s << 31) | 0x7f800000 - } else { // NaN - return (s << 31) | 0x7f800000 | (m << 13) - } - } - e = e + (127 - 15) - m = m << 13 - return (s << 31) | (e << 23) | m -} - -// GrowCap will return a new capacity for a slice, given the following: -// - oldCap: current capacity -// - unit: in-memory size of an element -// - num: number of elements to add -func growCap(oldCap, unit, num int) (newCap int) { - // appendslice logic (if cap < 1024, *2, else *1.25): - // leads to many copy calls, especially when copying bytes. - // bytes.Buffer model (2*cap + n): much better for bytes. - // smarter way is to take the byte-size of the appended element(type) into account - - // maintain 3 thresholds: - // t1: if cap <= t1, newcap = 2x - // t2: if cap <= t2, newcap = 1.75x - // t3: if cap <= t3, newcap = 1.5x - // else newcap = 1.25x - // - // t1, t2, t3 >= 1024 always. - // i.e. if unit size >= 16, then always do 2x or 1.25x (ie t1, t2, t3 are all same) - // - // With this, appending for bytes increase by: - // 100% up to 4K - // 75% up to 8K - // 50% up to 16K - // 25% beyond that - - // unit can be 0 e.g. for struct{}{}; handle that appropriately - var t1, t2, t3 int // thresholds - if unit <= 1 { - t1, t2, t3 = 4*1024, 8*1024, 16*1024 - } else if unit < 16 { - t3 = 16 / unit * 1024 - t1 = t3 * 1 / 4 - t2 = t3 * 2 / 4 - } else { - t1, t2, t3 = 1024, 1024, 1024 - } - - var x int // temporary variable - - // x is multiplier here: one of 5, 6, 7 or 8; incr of 25%, 50%, 75% or 100% respectively - if oldCap <= t1 { // [0,t1] - x = 8 - } else if oldCap > t3 { // (t3,infinity] - x = 5 - } else if oldCap <= t2 { // (t1,t2] - x = 7 - } else { // (t2,t3] - x = 6 - } - newCap = x * oldCap / 4 - - if num > 0 { - newCap += num - } - - // ensure newCap is a multiple of 64 (if it is > 64) or 16. - if newCap > 64 { - if x = newCap % 64; x != 0 { - x = newCap / 64 - newCap = 64 * (x + 1) - } - } else { - if x = newCap % 16; x != 0 { - x = newCap / 16 - newCap = 16 * (x + 1) - } - } - return -} - -func expandSliceValue(s reflect.Value, num int) reflect.Value { - if num <= 0 { - return s - } - l0 := s.Len() - l1 := l0 + num // new slice length - if l1 < l0 { - panic("ExpandSlice: slice overflow") - } - c0 := s.Cap() - if l1 <= c0 { - return s.Slice(0, l1) - } - st := s.Type() - c1 := growCap(c0, int(st.Elem().Size()), num) - s2 := reflect.MakeSlice(st, l1, c1) - // println("expandslicevalue: cap-old: ", c0, ", cap-new: ", c1, ", len-new: ", l1) - reflect.Copy(s2, s) - return s2 -} diff --git a/vendor/github.com/ugorji/go/codec/helper_not_unsafe.go b/vendor/github.com/ugorji/go/codec/helper_not_unsafe.go deleted file mode 100644 index 7c2ffc0fd..000000000 --- a/vendor/github.com/ugorji/go/codec/helper_not_unsafe.go +++ /dev/null @@ -1,20 +0,0 @@ -//+build !unsafe - -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -// stringView returns a view of the []byte as a string. -// In unsafe mode, it doesn't incur allocation and copying caused by conversion. -// In regular safe mode, it is an allocation and copy. -func stringView(v []byte) string { - return string(v) -} - -// bytesView returns a view of the string as a []byte. -// In unsafe mode, it doesn't incur allocation and copying caused by conversion. -// In regular safe mode, it is an allocation and copy. -func bytesView(v string) []byte { - return []byte(v) -} diff --git a/vendor/github.com/ugorji/go/codec/helper_unsafe.go b/vendor/github.com/ugorji/go/codec/helper_unsafe.go deleted file mode 100644 index 2928e4f77..000000000 --- a/vendor/github.com/ugorji/go/codec/helper_unsafe.go +++ /dev/null @@ -1,49 +0,0 @@ -//+build unsafe - -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "unsafe" -) - -// This file has unsafe variants of some helper methods. - -type unsafeString struct { - Data uintptr - Len int -} - -type unsafeSlice struct { - Data uintptr - Len int - Cap int -} - -// stringView returns a view of the []byte as a string. -// In unsafe mode, it doesn't incur allocation and copying caused by conversion. -// In regular safe mode, it is an allocation and copy. -func stringView(v []byte) string { - if len(v) == 0 { - return "" - } - - bx := (*unsafeSlice)(unsafe.Pointer(&v)) - sx := unsafeString{bx.Data, bx.Len} - return *(*string)(unsafe.Pointer(&sx)) -} - -// bytesView returns a view of the string as a []byte. -// In unsafe mode, it doesn't incur allocation and copying caused by conversion. -// In regular safe mode, it is an allocation and copy. -func bytesView(v string) []byte { - if len(v) == 0 { - return zeroByteSlice - } - - sx := (*unsafeString)(unsafe.Pointer(&v)) - bx := unsafeSlice{sx.Data, sx.Len, sx.Len} - return *(*[]byte)(unsafe.Pointer(&bx)) -} diff --git a/vendor/github.com/ugorji/go/codec/json.go b/vendor/github.com/ugorji/go/codec/json.go deleted file mode 100644 index a04dfcb9d..000000000 --- a/vendor/github.com/ugorji/go/codec/json.go +++ /dev/null @@ -1,1213 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -// By default, this json support uses base64 encoding for bytes, because you cannot -// store and read any arbitrary string in json (only unicode). -// However, the user can configre how to encode/decode bytes. -// -// This library specifically supports UTF-8 for encoding and decoding only. -// -// Note that the library will happily encode/decode things which are not valid -// json e.g. a map[int64]string. We do it for consistency. With valid json, -// we will encode and decode appropriately. -// Users can specify their map type if necessary to force it. -// -// Note: -// - we cannot use strconv.Quote and strconv.Unquote because json quotes/unquotes differently. -// We implement it here. -// - Also, strconv.ParseXXX for floats and integers -// - only works on strings resulting in unnecessary allocation and []byte-string conversion. -// - it does a lot of redundant checks, because json numbers are simpler that what it supports. -// - We parse numbers (floats and integers) directly here. -// We only delegate parsing floats if it is a hairy float which could cause a loss of precision. -// In that case, we delegate to strconv.ParseFloat. -// -// Note: -// - encode does not beautify. There is no whitespace when encoding. -// - rpc calls which take single integer arguments or write single numeric arguments will need care. - -// Top-level methods of json(End|Dec)Driver (which are implementations of (en|de)cDriver -// MUST not call one-another. - -import ( - "bytes" - "encoding/base64" - "fmt" - "reflect" - "strconv" - "unicode/utf16" - "unicode/utf8" -) - -//-------------------------------- - -var ( - jsonLiterals = [...]byte{'t', 'r', 'u', 'e', 'f', 'a', 'l', 's', 'e', 'n', 'u', 'l', 'l'} - - jsonFloat64Pow10 = [...]float64{ - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, - 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, - 1e20, 1e21, 1e22, - } - - jsonUint64Pow10 = [...]uint64{ - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, - 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, - } - - // jsonTabs and jsonSpaces are used as caches for indents - jsonTabs, jsonSpaces string -) - -const ( - // jsonUnreadAfterDecNum controls whether we unread after decoding a number. - // - // instead of unreading, just update d.tok (iff it's not a whitespace char) - // However, doing this means that we may HOLD onto some data which belongs to another stream. - // Thus, it is safest to unread the data when done. - // keep behind a constant flag for now. - jsonUnreadAfterDecNum = true - - // If !jsonValidateSymbols, decoding will be faster, by skipping some checks: - // - If we see first character of null, false or true, - // do not validate subsequent characters. - // - e.g. if we see a n, assume null and skip next 3 characters, - // and do not validate they are ull. - // P.S. Do not expect a significant decoding boost from this. - jsonValidateSymbols = true - - // if jsonTruncateMantissa, truncate mantissa if trailing 0's. - // This is important because it could allow some floats to be decoded without - // deferring to strconv.ParseFloat. - jsonTruncateMantissa = true - - // if mantissa >= jsonNumUintCutoff before multiplying by 10, this is an overflow - jsonNumUintCutoff = (1<<64-1)/uint64(10) + 1 // cutoff64(base) - - // if mantissa >= jsonNumUintMaxVal, this is an overflow - jsonNumUintMaxVal = 1< 1<<53 || v < -(1<<53)) { - e.w.writen1('"') - e.w.writeb(strconv.AppendInt(e.b[:0], v, 10)) - e.w.writen1('"') - return - } - e.w.writeb(strconv.AppendInt(e.b[:0], v, 10)) -} - -func (e *jsonEncDriver) EncodeUint(v uint64) { - if x := e.h.IntegerAsString; x == 'A' || x == 'L' && v > 1<<53 { - e.w.writen1('"') - e.w.writeb(strconv.AppendUint(e.b[:0], v, 10)) - e.w.writen1('"') - return - } - e.w.writeb(strconv.AppendUint(e.b[:0], v, 10)) -} - -func (e *jsonEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, en *Encoder) { - if v := ext.ConvertExt(rv); v == nil { - e.w.writeb(jsonLiterals[9:13]) // null // e.EncodeNil() - } else { - en.encode(v) - } -} - -func (e *jsonEncDriver) EncodeRawExt(re *RawExt, en *Encoder) { - // only encodes re.Value (never re.Data) - if re.Value == nil { - e.w.writeb(jsonLiterals[9:13]) // null // e.EncodeNil() - } else { - en.encode(re.Value) - } -} - -func (e *jsonEncDriver) EncodeArrayStart(length int) { - if e.d { - e.dl++ - } - e.w.writen1('[') - e.c = containerArrayStart -} - -func (e *jsonEncDriver) EncodeMapStart(length int) { - if e.d { - e.dl++ - } - e.w.writen1('{') - e.c = containerMapStart -} - -func (e *jsonEncDriver) EncodeString(c charEncoding, v string) { - // e.w.writestr(strconv.Quote(v)) - e.quoteStr(v) -} - -func (e *jsonEncDriver) EncodeSymbol(v string) { - // e.EncodeString(c_UTF8, v) - e.quoteStr(v) -} - -func (e *jsonEncDriver) EncodeStringBytes(c charEncoding, v []byte) { - // if encoding raw bytes and RawBytesExt is configured, use it to encode - if c == c_RAW && e.se.i != nil { - e.EncodeExt(v, 0, &e.se, e.e) - return - } - if c == c_RAW { - slen := base64.StdEncoding.EncodedLen(len(v)) - if cap(e.bs) >= slen { - e.bs = e.bs[:slen] - } else { - e.bs = make([]byte, slen) - } - base64.StdEncoding.Encode(e.bs, v) - e.w.writen1('"') - e.w.writeb(e.bs) - e.w.writen1('"') - } else { - // e.EncodeString(c, string(v)) - e.quoteStr(stringView(v)) - } -} - -func (e *jsonEncDriver) EncodeAsis(v []byte) { - e.w.writeb(v) -} - -func (e *jsonEncDriver) quoteStr(s string) { - // adapted from std pkg encoding/json - const hex = "0123456789abcdef" - w := e.w - w.writen1('"') - start := 0 - for i := 0; i < len(s); { - if b := s[i]; b < utf8.RuneSelf { - if 0x20 <= b && b != '\\' && b != '"' && b != '<' && b != '>' && b != '&' { - i++ - continue - } - if start < i { - w.writestr(s[start:i]) - } - switch b { - case '\\', '"': - w.writen2('\\', b) - case '\n': - w.writen2('\\', 'n') - case '\r': - w.writen2('\\', 'r') - case '\b': - w.writen2('\\', 'b') - case '\f': - w.writen2('\\', 'f') - case '\t': - w.writen2('\\', 't') - default: - // encode all bytes < 0x20 (except \r, \n). - // also encode < > & to prevent security holes when served to some browsers. - w.writestr(`\u00`) - w.writen2(hex[b>>4], hex[b&0xF]) - } - i++ - start = i - continue - } - c, size := utf8.DecodeRuneInString(s[i:]) - if c == utf8.RuneError && size == 1 { - if start < i { - w.writestr(s[start:i]) - } - w.writestr(`\ufffd`) - i += size - start = i - continue - } - // U+2028 is LINE SEPARATOR. U+2029 is PARAGRAPH SEPARATOR. - // Both technically valid JSON, but bomb on JSONP, so fix here. - if c == '\u2028' || c == '\u2029' { - if start < i { - w.writestr(s[start:i]) - } - w.writestr(`\u202`) - w.writen1(hex[c&0xF]) - i += size - start = i - continue - } - i += size - } - if start < len(s) { - w.writestr(s[start:]) - } - w.writen1('"') -} - -//-------------------------------- - -type jsonNum struct { - // bytes []byte // may have [+-.eE0-9] - mantissa uint64 // where mantissa ends, and maybe dot begins. - exponent int16 // exponent value. - manOverflow bool - neg bool // started with -. No initial sign in the bytes above. - dot bool // has dot - explicitExponent bool // explicit exponent -} - -func (x *jsonNum) reset() { - x.manOverflow = false - x.neg = false - x.dot = false - x.explicitExponent = false - x.mantissa = 0 - x.exponent = 0 -} - -// uintExp is called only if exponent > 0. -func (x *jsonNum) uintExp() (n uint64, overflow bool) { - n = x.mantissa - e := x.exponent - if e >= int16(len(jsonUint64Pow10)) { - overflow = true - return - } - n *= jsonUint64Pow10[e] - if n < x.mantissa || n > jsonNumUintMaxVal { - overflow = true - return - } - return - // for i := int16(0); i < e; i++ { - // if n >= jsonNumUintCutoff { - // overflow = true - // return - // } - // n *= 10 - // } - // return -} - -// these constants are only used withn floatVal. -// They are brought out, so that floatVal can be inlined. -const ( - jsonUint64MantissaBits = 52 - jsonMaxExponent = int16(len(jsonFloat64Pow10)) - 1 -) - -func (x *jsonNum) floatVal() (f float64, parseUsingStrConv bool) { - // We do not want to lose precision. - // Consequently, we will delegate to strconv.ParseFloat if any of the following happen: - // - There are more digits than in math.MaxUint64: 18446744073709551615 (20 digits) - // We expect up to 99.... (19 digits) - // - The mantissa cannot fit into a 52 bits of uint64 - // - The exponent is beyond our scope ie beyong 22. - parseUsingStrConv = x.manOverflow || - x.exponent > jsonMaxExponent || - (x.exponent < 0 && -(x.exponent) > jsonMaxExponent) || - x.mantissa>>jsonUint64MantissaBits != 0 - - if parseUsingStrConv { - return - } - - // all good. so handle parse here. - f = float64(x.mantissa) - // fmt.Printf(".Float: uint64 value: %v, float: %v\n", m, f) - if x.neg { - f = -f - } - if x.exponent > 0 { - f *= jsonFloat64Pow10[x.exponent] - } else if x.exponent < 0 { - f /= jsonFloat64Pow10[-x.exponent] - } - return -} - -type jsonDecDriver struct { - noBuiltInTypes - d *Decoder - h *JsonHandle - r decReader - - c containerState - // tok is used to store the token read right after skipWhiteSpace. - tok uint8 - - bstr [8]byte // scratch used for string \UXXX parsing - b [64]byte // scratch, used for parsing strings or numbers - b2 [64]byte // scratch, used only for decodeBytes (after base64) - bs []byte // scratch. Initialized from b. Used for parsing strings or numbers. - - se setExtWrapper - - n jsonNum -} - -func jsonIsWS(b byte) bool { - return b == ' ' || b == '\t' || b == '\r' || b == '\n' -} - -// // This will skip whitespace characters and return the next byte to read. -// // The next byte determines what the value will be one of. -// func (d *jsonDecDriver) skipWhitespace() { -// // fast-path: do not enter loop. Just check first (in case no whitespace). -// b := d.r.readn1() -// if jsonIsWS(b) { -// r := d.r -// for b = r.readn1(); jsonIsWS(b); b = r.readn1() { -// } -// } -// d.tok = b -// } - -func (d *jsonDecDriver) uncacheRead() { - if d.tok != 0 { - d.r.unreadn1() - d.tok = 0 - } -} - -func (d *jsonDecDriver) sendContainerState(c containerState) { - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - var xc uint8 // char expected - if c == containerMapKey { - if d.c != containerMapStart { - xc = ',' - } - } else if c == containerMapValue { - xc = ':' - } else if c == containerMapEnd { - xc = '}' - } else if c == containerArrayElem { - if d.c != containerArrayStart { - xc = ',' - } - } else if c == containerArrayEnd { - xc = ']' - } - if xc != 0 { - if d.tok != xc { - d.d.errorf("json: expect char '%c' but got char '%c'", xc, d.tok) - } - d.tok = 0 - } - d.c = c -} - -func (d *jsonDecDriver) CheckBreak() bool { - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - if d.tok == '}' || d.tok == ']' { - // d.tok = 0 // only checking, not consuming - return true - } - return false -} - -func (d *jsonDecDriver) readStrIdx(fromIdx, toIdx uint8) { - bs := d.r.readx(int(toIdx - fromIdx)) - d.tok = 0 - if jsonValidateSymbols { - if !bytes.Equal(bs, jsonLiterals[fromIdx:toIdx]) { - d.d.errorf("json: expecting %s: got %s", jsonLiterals[fromIdx:toIdx], bs) - return - } - } -} - -func (d *jsonDecDriver) TryDecodeAsNil() bool { - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - if d.tok == 'n' { - d.readStrIdx(10, 13) // ull - return true - } - return false -} - -func (d *jsonDecDriver) DecodeBool() bool { - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - if d.tok == 'f' { - d.readStrIdx(5, 9) // alse - return false - } - if d.tok == 't' { - d.readStrIdx(1, 4) // rue - return true - } - d.d.errorf("json: decode bool: got first char %c", d.tok) - return false // "unreachable" -} - -func (d *jsonDecDriver) ReadMapStart() int { - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - if d.tok != '{' { - d.d.errorf("json: expect char '%c' but got char '%c'", '{', d.tok) - } - d.tok = 0 - d.c = containerMapStart - return -1 -} - -func (d *jsonDecDriver) ReadArrayStart() int { - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - if d.tok != '[' { - d.d.errorf("json: expect char '%c' but got char '%c'", '[', d.tok) - } - d.tok = 0 - d.c = containerArrayStart - return -1 -} - -func (d *jsonDecDriver) ContainerType() (vt valueType) { - // check container type by checking the first char - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - if b := d.tok; b == '{' { - return valueTypeMap - } else if b == '[' { - return valueTypeArray - } else if b == 'n' { - return valueTypeNil - } else if b == '"' { - return valueTypeString - } - return valueTypeUnset - // d.d.errorf("isContainerType: unsupported parameter: %v", vt) - // return false // "unreachable" -} - -func (d *jsonDecDriver) decNum(storeBytes bool) { - // If it is has a . or an e|E, decode as a float; else decode as an int. - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - b := d.tok - var str bool - if b == '"' { - str = true - b = d.r.readn1() - } - if !(b == '+' || b == '-' || b == '.' || (b >= '0' && b <= '9')) { - d.d.errorf("json: decNum: got first char '%c'", b) - return - } - d.tok = 0 - - const cutoff = (1<<64-1)/uint64(10) + 1 // cutoff64(base) - const jsonNumUintMaxVal = 1<= jsonNumUintCutoff { - n.manOverflow = true - break - } - v := uint64(b - '0') - n.mantissa *= 10 - if v != 0 { - n1 := n.mantissa + v - if n1 < n.mantissa || n1 > jsonNumUintMaxVal { - n.manOverflow = true // n+v overflows - break - } - n.mantissa = n1 - } - case 6: - state = 7 - fallthrough - case 7: - if !(b == '0' && e == 0) { - e = e*10 + int16(b-'0') - } - default: - break LOOP - } - case '"': - if str { - if storeBytes { - d.bs = append(d.bs, '"') - } - b, eof = r.readn1eof() - } - break LOOP - default: - break LOOP - } - if storeBytes { - d.bs = append(d.bs, b) - } - b, eof = r.readn1eof() - } - - if jsonTruncateMantissa && n.mantissa != 0 { - for n.mantissa%10 == 0 { - n.mantissa /= 10 - n.exponent++ - } - } - - if e != 0 { - if eNeg { - n.exponent -= e - } else { - n.exponent += e - } - } - - // d.n = n - - if !eof { - if jsonUnreadAfterDecNum { - r.unreadn1() - } else { - if !jsonIsWS(b) { - d.tok = b - } - } - } - // fmt.Printf("1: n: bytes: %s, neg: %v, dot: %v, exponent: %v, mantissaEndIndex: %v\n", - // n.bytes, n.neg, n.dot, n.exponent, n.mantissaEndIndex) - return -} - -func (d *jsonDecDriver) DecodeInt(bitsize uint8) (i int64) { - d.decNum(false) - n := &d.n - if n.manOverflow { - d.d.errorf("json: overflow integer after: %v", n.mantissa) - return - } - var u uint64 - if n.exponent == 0 { - u = n.mantissa - } else if n.exponent < 0 { - d.d.errorf("json: fractional integer") - return - } else if n.exponent > 0 { - var overflow bool - if u, overflow = n.uintExp(); overflow { - d.d.errorf("json: overflow integer") - return - } - } - i = int64(u) - if n.neg { - i = -i - } - if chkOvf.Int(i, bitsize) { - d.d.errorf("json: overflow %v bits: %s", bitsize, d.bs) - return - } - // fmt.Printf("DecodeInt: %v\n", i) - return -} - -// floatVal MUST only be called after a decNum, as d.bs now contains the bytes of the number -func (d *jsonDecDriver) floatVal() (f float64) { - f, useStrConv := d.n.floatVal() - if useStrConv { - var err error - if f, err = strconv.ParseFloat(stringView(d.bs), 64); err != nil { - panic(fmt.Errorf("parse float: %s, %v", d.bs, err)) - } - if d.n.neg { - f = -f - } - } - return -} - -func (d *jsonDecDriver) DecodeUint(bitsize uint8) (u uint64) { - d.decNum(false) - n := &d.n - if n.neg { - d.d.errorf("json: unsigned integer cannot be negative") - return - } - if n.manOverflow { - d.d.errorf("json: overflow integer after: %v", n.mantissa) - return - } - if n.exponent == 0 { - u = n.mantissa - } else if n.exponent < 0 { - d.d.errorf("json: fractional integer") - return - } else if n.exponent > 0 { - var overflow bool - if u, overflow = n.uintExp(); overflow { - d.d.errorf("json: overflow integer") - return - } - } - if chkOvf.Uint(u, bitsize) { - d.d.errorf("json: overflow %v bits: %s", bitsize, d.bs) - return - } - // fmt.Printf("DecodeUint: %v\n", u) - return -} - -func (d *jsonDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) { - d.decNum(true) - f = d.floatVal() - if chkOverflow32 && chkOvf.Float32(f) { - d.d.errorf("json: overflow float32: %v, %s", f, d.bs) - return - } - return -} - -func (d *jsonDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) { - if ext == nil { - re := rv.(*RawExt) - re.Tag = xtag - d.d.decode(&re.Value) - } else { - var v interface{} - d.d.decode(&v) - ext.UpdateExt(rv, v) - } - return -} - -func (d *jsonDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) { - // if decoding into raw bytes, and the RawBytesExt is configured, use it to decode. - if !isstring && d.se.i != nil { - bsOut = bs - d.DecodeExt(&bsOut, 0, &d.se) - return - } - d.appendStringAsBytes() - // if isstring, then just return the bytes, even if it is using the scratch buffer. - // the bytes will be converted to a string as needed. - if isstring { - return d.bs - } - bs0 := d.bs - slen := base64.StdEncoding.DecodedLen(len(bs0)) - if slen <= cap(bs) { - bsOut = bs[:slen] - } else if zerocopy && slen <= cap(d.b2) { - bsOut = d.b2[:slen] - } else { - bsOut = make([]byte, slen) - } - slen2, err := base64.StdEncoding.Decode(bsOut, bs0) - if err != nil { - d.d.errorf("json: error decoding base64 binary '%s': %v", bs0, err) - return nil - } - if slen != slen2 { - bsOut = bsOut[:slen2] - } - return -} - -func (d *jsonDecDriver) DecodeString() (s string) { - d.appendStringAsBytes() - // if x := d.s.sc; x != nil && x.so && x.st == '}' { // map key - if d.c == containerMapKey { - return d.d.string(d.bs) - } - return string(d.bs) -} - -func (d *jsonDecDriver) appendStringAsBytes() { - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - if d.tok != '"' { - d.d.errorf("json: expect char '%c' but got char '%c'", '"', d.tok) - } - d.tok = 0 - - v := d.bs[:0] - var c uint8 - r := d.r - for { - c = r.readn1() - if c == '"' { - break - } else if c == '\\' { - c = r.readn1() - switch c { - case '"', '\\', '/', '\'': - v = append(v, c) - case 'b': - v = append(v, '\b') - case 'f': - v = append(v, '\f') - case 'n': - v = append(v, '\n') - case 'r': - v = append(v, '\r') - case 't': - v = append(v, '\t') - case 'u': - rr := d.jsonU4(false) - // fmt.Printf("$$$$$$$$$: is surrogate: %v\n", utf16.IsSurrogate(rr)) - if utf16.IsSurrogate(rr) { - rr = utf16.DecodeRune(rr, d.jsonU4(true)) - } - w2 := utf8.EncodeRune(d.bstr[:], rr) - v = append(v, d.bstr[:w2]...) - default: - d.d.errorf("json: unsupported escaped value: %c", c) - } - } else { - v = append(v, c) - } - } - d.bs = v -} - -func (d *jsonDecDriver) jsonU4(checkSlashU bool) rune { - r := d.r - if checkSlashU && !(r.readn1() == '\\' && r.readn1() == 'u') { - d.d.errorf(`json: unquoteStr: invalid unicode sequence. Expecting \u`) - return 0 - } - // u, _ := strconv.ParseUint(string(d.bstr[:4]), 16, 64) - var u uint32 - for i := 0; i < 4; i++ { - v := r.readn1() - if '0' <= v && v <= '9' { - v = v - '0' - } else if 'a' <= v && v <= 'z' { - v = v - 'a' + 10 - } else if 'A' <= v && v <= 'Z' { - v = v - 'A' + 10 - } else { - d.d.errorf(`json: unquoteStr: invalid hex char in \u unicode sequence: %q`, v) - return 0 - } - u = u*16 + uint32(v) - } - return rune(u) -} - -func (d *jsonDecDriver) DecodeNaked() { - z := &d.d.n - // var decodeFurther bool - - if d.tok == 0 { - var b byte - r := d.r - for b = r.readn1(); jsonIsWS(b); b = r.readn1() { - } - d.tok = b - } - switch d.tok { - case 'n': - d.readStrIdx(10, 13) // ull - z.v = valueTypeNil - case 'f': - d.readStrIdx(5, 9) // alse - z.v = valueTypeBool - z.b = false - case 't': - d.readStrIdx(1, 4) // rue - z.v = valueTypeBool - z.b = true - case '{': - z.v = valueTypeMap - // d.tok = 0 // don't consume. kInterfaceNaked will call ReadMapStart - // decodeFurther = true - case '[': - z.v = valueTypeArray - // d.tok = 0 // don't consume. kInterfaceNaked will call ReadArrayStart - // decodeFurther = true - case '"': - z.v = valueTypeString - z.s = d.DecodeString() - default: // number - d.decNum(true) - n := &d.n - // if the string had a any of [.eE], then decode as float. - switch { - case n.explicitExponent, n.dot, n.exponent < 0, n.manOverflow: - z.v = valueTypeFloat - z.f = d.floatVal() - case n.exponent == 0: - u := n.mantissa - switch { - case n.neg: - z.v = valueTypeInt - z.i = -int64(u) - case d.h.SignedInteger: - z.v = valueTypeInt - z.i = int64(u) - default: - z.v = valueTypeUint - z.u = u - } - default: - u, overflow := n.uintExp() - switch { - case overflow: - z.v = valueTypeFloat - z.f = d.floatVal() - case n.neg: - z.v = valueTypeInt - z.i = -int64(u) - case d.h.SignedInteger: - z.v = valueTypeInt - z.i = int64(u) - default: - z.v = valueTypeUint - z.u = u - } - } - // fmt.Printf("DecodeNaked: Number: %T, %v\n", v, v) - } - // if decodeFurther { - // d.s.sc.retryRead() - // } - return -} - -//---------------------- - -// JsonHandle is a handle for JSON encoding format. -// -// Json is comprehensively supported: -// - decodes numbers into interface{} as int, uint or float64 -// - configurable way to encode/decode []byte . -// by default, encodes and decodes []byte using base64 Std Encoding -// - UTF-8 support for encoding and decoding -// -// It has better performance than the json library in the standard library, -// by leveraging the performance improvements of the codec library and -// minimizing allocations. -// -// In addition, it doesn't read more bytes than necessary during a decode, which allows -// reading multiple values from a stream containing json and non-json content. -// For example, a user can read a json value, then a cbor value, then a msgpack value, -// all from the same stream in sequence. -type JsonHandle struct { - textEncodingType - BasicHandle - // RawBytesExt, if configured, is used to encode and decode raw bytes in a custom way. - // If not configured, raw bytes are encoded to/from base64 text. - RawBytesExt InterfaceExt - - // Indent indicates how a value is encoded. - // - If positive, indent by that number of spaces. - // - If negative, indent by that number of tabs. - Indent int8 - - // IntegerAsString controls how integers (signed and unsigned) are encoded. - // - // Per the JSON Spec, JSON numbers are 64-bit floating point numbers. - // Consequently, integers > 2^53 cannot be represented as a JSON number without losing precision. - // This can be mitigated by configuring how to encode integers. - // - // IntegerAsString interpretes the following values: - // - if 'L', then encode integers > 2^53 as a json string. - // - if 'A', then encode all integers as a json string - // containing the exact integer representation as a decimal. - // - else encode all integers as a json number (default) - IntegerAsString uint8 -} - -func (h *JsonHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) { - return h.SetExt(rt, tag, &setExtWrapper{i: ext}) -} - -func (h *JsonHandle) newEncDriver(e *Encoder) encDriver { - hd := jsonEncDriver{e: e, h: h} - hd.bs = hd.b[:0] - - hd.reset() - - return &hd -} - -func (h *JsonHandle) newDecDriver(d *Decoder) decDriver { - // d := jsonDecDriver{r: r.(*bytesDecReader), h: h} - hd := jsonDecDriver{d: d, h: h} - hd.bs = hd.b[:0] - hd.reset() - return &hd -} - -func (e *jsonEncDriver) reset() { - e.w = e.e.w - e.se.i = e.h.RawBytesExt - if e.bs != nil { - e.bs = e.bs[:0] - } - e.d, e.dt, e.dl, e.ds = false, false, 0, "" - e.c = 0 - if e.h.Indent > 0 { - e.d = true - e.ds = jsonSpaces[:e.h.Indent] - } else if e.h.Indent < 0 { - e.d = true - e.dt = true - e.ds = jsonTabs[:-(e.h.Indent)] - } -} - -func (d *jsonDecDriver) reset() { - d.r = d.d.r - d.se.i = d.h.RawBytesExt - if d.bs != nil { - d.bs = d.bs[:0] - } - d.c, d.tok = 0, 0 - d.n.reset() -} - -var jsonEncodeTerminate = []byte{' '} - -func (h *JsonHandle) rpcEncodeTerminate() []byte { - return jsonEncodeTerminate -} - -var _ decDriver = (*jsonDecDriver)(nil) -var _ encDriver = (*jsonEncDriver)(nil) diff --git a/vendor/github.com/ugorji/go/codec/msgpack.go b/vendor/github.com/ugorji/go/codec/msgpack.go deleted file mode 100644 index f9f872362..000000000 --- a/vendor/github.com/ugorji/go/codec/msgpack.go +++ /dev/null @@ -1,845 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -/* -MSGPACK - -Msgpack-c implementation powers the c, c++, python, ruby, etc libraries. -We need to maintain compatibility with it and how it encodes integer values -without caring about the type. - -For compatibility with behaviour of msgpack-c reference implementation: - - Go intX (>0) and uintX - IS ENCODED AS - msgpack +ve fixnum, unsigned - - Go intX (<0) - IS ENCODED AS - msgpack -ve fixnum, signed - -*/ -package codec - -import ( - "fmt" - "io" - "math" - "net/rpc" - "reflect" -) - -const ( - mpPosFixNumMin byte = 0x00 - mpPosFixNumMax = 0x7f - mpFixMapMin = 0x80 - mpFixMapMax = 0x8f - mpFixArrayMin = 0x90 - mpFixArrayMax = 0x9f - mpFixStrMin = 0xa0 - mpFixStrMax = 0xbf - mpNil = 0xc0 - _ = 0xc1 - mpFalse = 0xc2 - mpTrue = 0xc3 - mpFloat = 0xca - mpDouble = 0xcb - mpUint8 = 0xcc - mpUint16 = 0xcd - mpUint32 = 0xce - mpUint64 = 0xcf - mpInt8 = 0xd0 - mpInt16 = 0xd1 - mpInt32 = 0xd2 - mpInt64 = 0xd3 - - // extensions below - mpBin8 = 0xc4 - mpBin16 = 0xc5 - mpBin32 = 0xc6 - mpExt8 = 0xc7 - mpExt16 = 0xc8 - mpExt32 = 0xc9 - mpFixExt1 = 0xd4 - mpFixExt2 = 0xd5 - mpFixExt4 = 0xd6 - mpFixExt8 = 0xd7 - mpFixExt16 = 0xd8 - - mpStr8 = 0xd9 // new - mpStr16 = 0xda - mpStr32 = 0xdb - - mpArray16 = 0xdc - mpArray32 = 0xdd - - mpMap16 = 0xde - mpMap32 = 0xdf - - mpNegFixNumMin = 0xe0 - mpNegFixNumMax = 0xff -) - -// MsgpackSpecRpcMultiArgs is a special type which signifies to the MsgpackSpecRpcCodec -// that the backend RPC service takes multiple arguments, which have been arranged -// in sequence in the slice. -// -// The Codec then passes it AS-IS to the rpc service (without wrapping it in an -// array of 1 element). -type MsgpackSpecRpcMultiArgs []interface{} - -// A MsgpackContainer type specifies the different types of msgpackContainers. -type msgpackContainerType struct { - fixCutoff int - bFixMin, b8, b16, b32 byte - hasFixMin, has8, has8Always bool -} - -var ( - msgpackContainerStr = msgpackContainerType{32, mpFixStrMin, mpStr8, mpStr16, mpStr32, true, true, false} - msgpackContainerBin = msgpackContainerType{0, 0, mpBin8, mpBin16, mpBin32, false, true, true} - msgpackContainerList = msgpackContainerType{16, mpFixArrayMin, 0, mpArray16, mpArray32, true, false, false} - msgpackContainerMap = msgpackContainerType{16, mpFixMapMin, 0, mpMap16, mpMap32, true, false, false} -) - -//--------------------------------------------- - -type msgpackEncDriver struct { - noBuiltInTypes - encNoSeparator - e *Encoder - w encWriter - h *MsgpackHandle - x [8]byte -} - -func (e *msgpackEncDriver) EncodeNil() { - e.w.writen1(mpNil) -} - -func (e *msgpackEncDriver) EncodeInt(i int64) { - if i >= 0 { - e.EncodeUint(uint64(i)) - } else if i >= -32 { - e.w.writen1(byte(i)) - } else if i >= math.MinInt8 { - e.w.writen2(mpInt8, byte(i)) - } else if i >= math.MinInt16 { - e.w.writen1(mpInt16) - bigenHelper{e.x[:2], e.w}.writeUint16(uint16(i)) - } else if i >= math.MinInt32 { - e.w.writen1(mpInt32) - bigenHelper{e.x[:4], e.w}.writeUint32(uint32(i)) - } else { - e.w.writen1(mpInt64) - bigenHelper{e.x[:8], e.w}.writeUint64(uint64(i)) - } -} - -func (e *msgpackEncDriver) EncodeUint(i uint64) { - if i <= math.MaxInt8 { - e.w.writen1(byte(i)) - } else if i <= math.MaxUint8 { - e.w.writen2(mpUint8, byte(i)) - } else if i <= math.MaxUint16 { - e.w.writen1(mpUint16) - bigenHelper{e.x[:2], e.w}.writeUint16(uint16(i)) - } else if i <= math.MaxUint32 { - e.w.writen1(mpUint32) - bigenHelper{e.x[:4], e.w}.writeUint32(uint32(i)) - } else { - e.w.writen1(mpUint64) - bigenHelper{e.x[:8], e.w}.writeUint64(uint64(i)) - } -} - -func (e *msgpackEncDriver) EncodeBool(b bool) { - if b { - e.w.writen1(mpTrue) - } else { - e.w.writen1(mpFalse) - } -} - -func (e *msgpackEncDriver) EncodeFloat32(f float32) { - e.w.writen1(mpFloat) - bigenHelper{e.x[:4], e.w}.writeUint32(math.Float32bits(f)) -} - -func (e *msgpackEncDriver) EncodeFloat64(f float64) { - e.w.writen1(mpDouble) - bigenHelper{e.x[:8], e.w}.writeUint64(math.Float64bits(f)) -} - -func (e *msgpackEncDriver) EncodeExt(v interface{}, xtag uint64, ext Ext, _ *Encoder) { - bs := ext.WriteExt(v) - if bs == nil { - e.EncodeNil() - return - } - if e.h.WriteExt { - e.encodeExtPreamble(uint8(xtag), len(bs)) - e.w.writeb(bs) - } else { - e.EncodeStringBytes(c_RAW, bs) - } -} - -func (e *msgpackEncDriver) EncodeRawExt(re *RawExt, _ *Encoder) { - e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) - e.w.writeb(re.Data) -} - -func (e *msgpackEncDriver) encodeExtPreamble(xtag byte, l int) { - if l == 1 { - e.w.writen2(mpFixExt1, xtag) - } else if l == 2 { - e.w.writen2(mpFixExt2, xtag) - } else if l == 4 { - e.w.writen2(mpFixExt4, xtag) - } else if l == 8 { - e.w.writen2(mpFixExt8, xtag) - } else if l == 16 { - e.w.writen2(mpFixExt16, xtag) - } else if l < 256 { - e.w.writen2(mpExt8, byte(l)) - e.w.writen1(xtag) - } else if l < 65536 { - e.w.writen1(mpExt16) - bigenHelper{e.x[:2], e.w}.writeUint16(uint16(l)) - e.w.writen1(xtag) - } else { - e.w.writen1(mpExt32) - bigenHelper{e.x[:4], e.w}.writeUint32(uint32(l)) - e.w.writen1(xtag) - } -} - -func (e *msgpackEncDriver) EncodeArrayStart(length int) { - e.writeContainerLen(msgpackContainerList, length) -} - -func (e *msgpackEncDriver) EncodeMapStart(length int) { - e.writeContainerLen(msgpackContainerMap, length) -} - -func (e *msgpackEncDriver) EncodeString(c charEncoding, s string) { - if c == c_RAW && e.h.WriteExt { - e.writeContainerLen(msgpackContainerBin, len(s)) - } else { - e.writeContainerLen(msgpackContainerStr, len(s)) - } - if len(s) > 0 { - e.w.writestr(s) - } -} - -func (e *msgpackEncDriver) EncodeSymbol(v string) { - e.EncodeString(c_UTF8, v) -} - -func (e *msgpackEncDriver) EncodeStringBytes(c charEncoding, bs []byte) { - if c == c_RAW && e.h.WriteExt { - e.writeContainerLen(msgpackContainerBin, len(bs)) - } else { - e.writeContainerLen(msgpackContainerStr, len(bs)) - } - if len(bs) > 0 { - e.w.writeb(bs) - } -} - -func (e *msgpackEncDriver) writeContainerLen(ct msgpackContainerType, l int) { - if ct.hasFixMin && l < ct.fixCutoff { - e.w.writen1(ct.bFixMin | byte(l)) - } else if ct.has8 && l < 256 && (ct.has8Always || e.h.WriteExt) { - e.w.writen2(ct.b8, uint8(l)) - } else if l < 65536 { - e.w.writen1(ct.b16) - bigenHelper{e.x[:2], e.w}.writeUint16(uint16(l)) - } else { - e.w.writen1(ct.b32) - bigenHelper{e.x[:4], e.w}.writeUint32(uint32(l)) - } -} - -//--------------------------------------------- - -type msgpackDecDriver struct { - d *Decoder - r decReader // *Decoder decReader decReaderT - h *MsgpackHandle - b [scratchByteArrayLen]byte - bd byte - bdRead bool - br bool // bytes reader - noBuiltInTypes - noStreamingCodec - decNoSeparator -} - -// Note: This returns either a primitive (int, bool, etc) for non-containers, -// or a containerType, or a specific type denoting nil or extension. -// It is called when a nil interface{} is passed, leaving it up to the DecDriver -// to introspect the stream and decide how best to decode. -// It deciphers the value by looking at the stream first. -func (d *msgpackDecDriver) DecodeNaked() { - if !d.bdRead { - d.readNextBd() - } - bd := d.bd - n := &d.d.n - var decodeFurther bool - - switch bd { - case mpNil: - n.v = valueTypeNil - d.bdRead = false - case mpFalse: - n.v = valueTypeBool - n.b = false - case mpTrue: - n.v = valueTypeBool - n.b = true - - case mpFloat: - n.v = valueTypeFloat - n.f = float64(math.Float32frombits(bigen.Uint32(d.r.readx(4)))) - case mpDouble: - n.v = valueTypeFloat - n.f = math.Float64frombits(bigen.Uint64(d.r.readx(8))) - - case mpUint8: - n.v = valueTypeUint - n.u = uint64(d.r.readn1()) - case mpUint16: - n.v = valueTypeUint - n.u = uint64(bigen.Uint16(d.r.readx(2))) - case mpUint32: - n.v = valueTypeUint - n.u = uint64(bigen.Uint32(d.r.readx(4))) - case mpUint64: - n.v = valueTypeUint - n.u = uint64(bigen.Uint64(d.r.readx(8))) - - case mpInt8: - n.v = valueTypeInt - n.i = int64(int8(d.r.readn1())) - case mpInt16: - n.v = valueTypeInt - n.i = int64(int16(bigen.Uint16(d.r.readx(2)))) - case mpInt32: - n.v = valueTypeInt - n.i = int64(int32(bigen.Uint32(d.r.readx(4)))) - case mpInt64: - n.v = valueTypeInt - n.i = int64(int64(bigen.Uint64(d.r.readx(8)))) - - default: - switch { - case bd >= mpPosFixNumMin && bd <= mpPosFixNumMax: - // positive fixnum (always signed) - n.v = valueTypeInt - n.i = int64(int8(bd)) - case bd >= mpNegFixNumMin && bd <= mpNegFixNumMax: - // negative fixnum - n.v = valueTypeInt - n.i = int64(int8(bd)) - case bd == mpStr8, bd == mpStr16, bd == mpStr32, bd >= mpFixStrMin && bd <= mpFixStrMax: - if d.h.RawToString { - n.v = valueTypeString - n.s = d.DecodeString() - } else { - n.v = valueTypeBytes - n.l = d.DecodeBytes(nil, false, false) - } - case bd == mpBin8, bd == mpBin16, bd == mpBin32: - n.v = valueTypeBytes - n.l = d.DecodeBytes(nil, false, false) - case bd == mpArray16, bd == mpArray32, bd >= mpFixArrayMin && bd <= mpFixArrayMax: - n.v = valueTypeArray - decodeFurther = true - case bd == mpMap16, bd == mpMap32, bd >= mpFixMapMin && bd <= mpFixMapMax: - n.v = valueTypeMap - decodeFurther = true - case bd >= mpFixExt1 && bd <= mpFixExt16, bd >= mpExt8 && bd <= mpExt32: - n.v = valueTypeExt - clen := d.readExtLen() - n.u = uint64(d.r.readn1()) - n.l = d.r.readx(clen) - default: - d.d.errorf("Nil-Deciphered DecodeValue: %s: hex: %x, dec: %d", msgBadDesc, bd, bd) - } - } - if !decodeFurther { - d.bdRead = false - } - if n.v == valueTypeUint && d.h.SignedInteger { - n.v = valueTypeInt - n.i = int64(n.u) - } - return -} - -// int can be decoded from msgpack type: intXXX or uintXXX -func (d *msgpackDecDriver) DecodeInt(bitsize uint8) (i int64) { - if !d.bdRead { - d.readNextBd() - } - switch d.bd { - case mpUint8: - i = int64(uint64(d.r.readn1())) - case mpUint16: - i = int64(uint64(bigen.Uint16(d.r.readx(2)))) - case mpUint32: - i = int64(uint64(bigen.Uint32(d.r.readx(4)))) - case mpUint64: - i = int64(bigen.Uint64(d.r.readx(8))) - case mpInt8: - i = int64(int8(d.r.readn1())) - case mpInt16: - i = int64(int16(bigen.Uint16(d.r.readx(2)))) - case mpInt32: - i = int64(int32(bigen.Uint32(d.r.readx(4)))) - case mpInt64: - i = int64(bigen.Uint64(d.r.readx(8))) - default: - switch { - case d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax: - i = int64(int8(d.bd)) - case d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax: - i = int64(int8(d.bd)) - default: - d.d.errorf("Unhandled single-byte unsigned integer value: %s: %x", msgBadDesc, d.bd) - return - } - } - // check overflow (logic adapted from std pkg reflect/value.go OverflowUint() - if bitsize > 0 { - if trunc := (i << (64 - bitsize)) >> (64 - bitsize); i != trunc { - d.d.errorf("Overflow int value: %v", i) - return - } - } - d.bdRead = false - return -} - -// uint can be decoded from msgpack type: intXXX or uintXXX -func (d *msgpackDecDriver) DecodeUint(bitsize uint8) (ui uint64) { - if !d.bdRead { - d.readNextBd() - } - switch d.bd { - case mpUint8: - ui = uint64(d.r.readn1()) - case mpUint16: - ui = uint64(bigen.Uint16(d.r.readx(2))) - case mpUint32: - ui = uint64(bigen.Uint32(d.r.readx(4))) - case mpUint64: - ui = bigen.Uint64(d.r.readx(8)) - case mpInt8: - if i := int64(int8(d.r.readn1())); i >= 0 { - ui = uint64(i) - } else { - d.d.errorf("Assigning negative signed value: %v, to unsigned type", i) - return - } - case mpInt16: - if i := int64(int16(bigen.Uint16(d.r.readx(2)))); i >= 0 { - ui = uint64(i) - } else { - d.d.errorf("Assigning negative signed value: %v, to unsigned type", i) - return - } - case mpInt32: - if i := int64(int32(bigen.Uint32(d.r.readx(4)))); i >= 0 { - ui = uint64(i) - } else { - d.d.errorf("Assigning negative signed value: %v, to unsigned type", i) - return - } - case mpInt64: - if i := int64(bigen.Uint64(d.r.readx(8))); i >= 0 { - ui = uint64(i) - } else { - d.d.errorf("Assigning negative signed value: %v, to unsigned type", i) - return - } - default: - switch { - case d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax: - ui = uint64(d.bd) - case d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax: - d.d.errorf("Assigning negative signed value: %v, to unsigned type", int(d.bd)) - return - default: - d.d.errorf("Unhandled single-byte unsigned integer value: %s: %x", msgBadDesc, d.bd) - return - } - } - // check overflow (logic adapted from std pkg reflect/value.go OverflowUint() - if bitsize > 0 { - if trunc := (ui << (64 - bitsize)) >> (64 - bitsize); ui != trunc { - d.d.errorf("Overflow uint value: %v", ui) - return - } - } - d.bdRead = false - return -} - -// float can either be decoded from msgpack type: float, double or intX -func (d *msgpackDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) { - if !d.bdRead { - d.readNextBd() - } - if d.bd == mpFloat { - f = float64(math.Float32frombits(bigen.Uint32(d.r.readx(4)))) - } else if d.bd == mpDouble { - f = math.Float64frombits(bigen.Uint64(d.r.readx(8))) - } else { - f = float64(d.DecodeInt(0)) - } - if chkOverflow32 && chkOvf.Float32(f) { - d.d.errorf("msgpack: float32 overflow: %v", f) - return - } - d.bdRead = false - return -} - -// bool can be decoded from bool, fixnum 0 or 1. -func (d *msgpackDecDriver) DecodeBool() (b bool) { - if !d.bdRead { - d.readNextBd() - } - if d.bd == mpFalse || d.bd == 0 { - // b = false - } else if d.bd == mpTrue || d.bd == 1 { - b = true - } else { - d.d.errorf("Invalid single-byte value for bool: %s: %x", msgBadDesc, d.bd) - return - } - d.bdRead = false - return -} - -func (d *msgpackDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) { - if !d.bdRead { - d.readNextBd() - } - var clen int - // ignore isstring. Expect that the bytes may be found from msgpackContainerStr or msgpackContainerBin - if bd := d.bd; bd == mpBin8 || bd == mpBin16 || bd == mpBin32 { - clen = d.readContainerLen(msgpackContainerBin) - } else { - clen = d.readContainerLen(msgpackContainerStr) - } - // println("DecodeBytes: clen: ", clen) - d.bdRead = false - // bytes may be nil, so handle it. if nil, clen=-1. - if clen < 0 { - return nil - } - if zerocopy { - if d.br { - return d.r.readx(clen) - } else if len(bs) == 0 { - bs = d.b[:] - } - } - return decByteSlice(d.r, clen, bs) -} - -func (d *msgpackDecDriver) DecodeString() (s string) { - return string(d.DecodeBytes(d.b[:], true, true)) -} - -func (d *msgpackDecDriver) readNextBd() { - d.bd = d.r.readn1() - d.bdRead = true -} - -func (d *msgpackDecDriver) ContainerType() (vt valueType) { - bd := d.bd - if bd == mpNil { - return valueTypeNil - } else if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 || - (!d.h.RawToString && - (bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || (bd >= mpFixStrMin && bd <= mpFixStrMax))) { - return valueTypeBytes - } else if d.h.RawToString && - (bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || (bd >= mpFixStrMin && bd <= mpFixStrMax)) { - return valueTypeString - } else if bd == mpArray16 || bd == mpArray32 || (bd >= mpFixArrayMin && bd <= mpFixArrayMax) { - return valueTypeArray - } else if bd == mpMap16 || bd == mpMap32 || (bd >= mpFixMapMin && bd <= mpFixMapMax) { - return valueTypeMap - } else { - // d.d.errorf("isContainerType: unsupported parameter: %v", vt) - } - return valueTypeUnset -} - -func (d *msgpackDecDriver) TryDecodeAsNil() (v bool) { - if !d.bdRead { - d.readNextBd() - } - if d.bd == mpNil { - d.bdRead = false - v = true - } - return -} - -func (d *msgpackDecDriver) readContainerLen(ct msgpackContainerType) (clen int) { - bd := d.bd - if bd == mpNil { - clen = -1 // to represent nil - } else if bd == ct.b8 { - clen = int(d.r.readn1()) - } else if bd == ct.b16 { - clen = int(bigen.Uint16(d.r.readx(2))) - } else if bd == ct.b32 { - clen = int(bigen.Uint32(d.r.readx(4))) - } else if (ct.bFixMin & bd) == ct.bFixMin { - clen = int(ct.bFixMin ^ bd) - } else { - d.d.errorf("readContainerLen: %s: hex: %x, decimal: %d", msgBadDesc, bd, bd) - return - } - d.bdRead = false - return -} - -func (d *msgpackDecDriver) ReadMapStart() int { - return d.readContainerLen(msgpackContainerMap) -} - -func (d *msgpackDecDriver) ReadArrayStart() int { - return d.readContainerLen(msgpackContainerList) -} - -func (d *msgpackDecDriver) readExtLen() (clen int) { - switch d.bd { - case mpNil: - clen = -1 // to represent nil - case mpFixExt1: - clen = 1 - case mpFixExt2: - clen = 2 - case mpFixExt4: - clen = 4 - case mpFixExt8: - clen = 8 - case mpFixExt16: - clen = 16 - case mpExt8: - clen = int(d.r.readn1()) - case mpExt16: - clen = int(bigen.Uint16(d.r.readx(2))) - case mpExt32: - clen = int(bigen.Uint32(d.r.readx(4))) - default: - d.d.errorf("decoding ext bytes: found unexpected byte: %x", d.bd) - return - } - return -} - -func (d *msgpackDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) { - if xtag > 0xff { - d.d.errorf("decodeExt: tag must be <= 0xff; got: %v", xtag) - return - } - realxtag1, xbs := d.decodeExtV(ext != nil, uint8(xtag)) - realxtag = uint64(realxtag1) - if ext == nil { - re := rv.(*RawExt) - re.Tag = realxtag - re.Data = detachZeroCopyBytes(d.br, re.Data, xbs) - } else { - ext.ReadExt(rv, xbs) - } - return -} - -func (d *msgpackDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs []byte) { - if !d.bdRead { - d.readNextBd() - } - xbd := d.bd - if xbd == mpBin8 || xbd == mpBin16 || xbd == mpBin32 { - xbs = d.DecodeBytes(nil, false, true) - } else if xbd == mpStr8 || xbd == mpStr16 || xbd == mpStr32 || - (xbd >= mpFixStrMin && xbd <= mpFixStrMax) { - xbs = d.DecodeBytes(nil, true, true) - } else { - clen := d.readExtLen() - xtag = d.r.readn1() - if verifyTag && xtag != tag { - d.d.errorf("Wrong extension tag. Got %b. Expecting: %v", xtag, tag) - return - } - xbs = d.r.readx(clen) - } - d.bdRead = false - return -} - -//-------------------------------------------------- - -//MsgpackHandle is a Handle for the Msgpack Schema-Free Encoding Format. -type MsgpackHandle struct { - BasicHandle - - // RawToString controls how raw bytes are decoded into a nil interface{}. - RawToString bool - - // WriteExt flag supports encoding configured extensions with extension tags. - // It also controls whether other elements of the new spec are encoded (ie Str8). - // - // With WriteExt=false, configured extensions are serialized as raw bytes - // and Str8 is not encoded. - // - // A stream can still be decoded into a typed value, provided an appropriate value - // is provided, but the type cannot be inferred from the stream. If no appropriate - // type is provided (e.g. decoding into a nil interface{}), you get back - // a []byte or string based on the setting of RawToString. - WriteExt bool - binaryEncodingType -} - -func (h *MsgpackHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { - return h.SetExt(rt, tag, &setExtWrapper{b: ext}) -} - -func (h *MsgpackHandle) newEncDriver(e *Encoder) encDriver { - return &msgpackEncDriver{e: e, w: e.w, h: h} -} - -func (h *MsgpackHandle) newDecDriver(d *Decoder) decDriver { - return &msgpackDecDriver{d: d, r: d.r, h: h, br: d.bytes} -} - -func (e *msgpackEncDriver) reset() { - e.w = e.e.w -} - -func (d *msgpackDecDriver) reset() { - d.r = d.d.r - d.bd, d.bdRead = 0, false -} - -//-------------------------------------------------- - -type msgpackSpecRpcCodec struct { - rpcCodec -} - -// /////////////// Spec RPC Codec /////////////////// -func (c *msgpackSpecRpcCodec) WriteRequest(r *rpc.Request, body interface{}) error { - // WriteRequest can write to both a Go service, and other services that do - // not abide by the 1 argument rule of a Go service. - // We discriminate based on if the body is a MsgpackSpecRpcMultiArgs - var bodyArr []interface{} - if m, ok := body.(MsgpackSpecRpcMultiArgs); ok { - bodyArr = ([]interface{})(m) - } else { - bodyArr = []interface{}{body} - } - r2 := []interface{}{0, uint32(r.Seq), r.ServiceMethod, bodyArr} - return c.write(r2, nil, false, true) -} - -func (c *msgpackSpecRpcCodec) WriteResponse(r *rpc.Response, body interface{}) error { - var moe interface{} - if r.Error != "" { - moe = r.Error - } - if moe != nil && body != nil { - body = nil - } - r2 := []interface{}{1, uint32(r.Seq), moe, body} - return c.write(r2, nil, false, true) -} - -func (c *msgpackSpecRpcCodec) ReadResponseHeader(r *rpc.Response) error { - return c.parseCustomHeader(1, &r.Seq, &r.Error) -} - -func (c *msgpackSpecRpcCodec) ReadRequestHeader(r *rpc.Request) error { - return c.parseCustomHeader(0, &r.Seq, &r.ServiceMethod) -} - -func (c *msgpackSpecRpcCodec) ReadRequestBody(body interface{}) error { - if body == nil { // read and discard - return c.read(nil) - } - bodyArr := []interface{}{body} - return c.read(&bodyArr) -} - -func (c *msgpackSpecRpcCodec) parseCustomHeader(expectTypeByte byte, msgid *uint64, methodOrError *string) (err error) { - - if c.isClosed() { - return io.EOF - } - - // We read the response header by hand - // so that the body can be decoded on its own from the stream at a later time. - - const fia byte = 0x94 //four item array descriptor value - // Not sure why the panic of EOF is swallowed above. - // if bs1 := c.dec.r.readn1(); bs1 != fia { - // err = fmt.Errorf("Unexpected value for array descriptor: Expecting %v. Received %v", fia, bs1) - // return - // } - var b byte - b, err = c.br.ReadByte() - if err != nil { - return - } - if b != fia { - err = fmt.Errorf("Unexpected value for array descriptor: Expecting %v. Received %v", fia, b) - return - } - - if err = c.read(&b); err != nil { - return - } - if b != expectTypeByte { - err = fmt.Errorf("Unexpected byte descriptor in header. Expecting %v. Received %v", expectTypeByte, b) - return - } - if err = c.read(msgid); err != nil { - return - } - if err = c.read(methodOrError); err != nil { - return - } - return -} - -//-------------------------------------------------- - -// msgpackSpecRpc is the implementation of Rpc that uses custom communication protocol -// as defined in the msgpack spec at https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md -type msgpackSpecRpc struct{} - -// MsgpackSpecRpc implements Rpc using the communication protocol defined in -// the msgpack spec at https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md . -// Its methods (ServerCodec and ClientCodec) return values that implement RpcCodecBuffered. -var MsgpackSpecRpc msgpackSpecRpc - -func (x msgpackSpecRpc) ServerCodec(conn io.ReadWriteCloser, h Handle) rpc.ServerCodec { - return &msgpackSpecRpcCodec{newRPCCodec(conn, h)} -} - -func (x msgpackSpecRpc) ClientCodec(conn io.ReadWriteCloser, h Handle) rpc.ClientCodec { - return &msgpackSpecRpcCodec{newRPCCodec(conn, h)} -} - -var _ decDriver = (*msgpackDecDriver)(nil) -var _ encDriver = (*msgpackEncDriver)(nil) diff --git a/vendor/github.com/ugorji/go/codec/noop.go b/vendor/github.com/ugorji/go/codec/noop.go deleted file mode 100644 index cfee3d084..000000000 --- a/vendor/github.com/ugorji/go/codec/noop.go +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "math/rand" - "time" -) - -// NoopHandle returns a no-op handle. It basically does nothing. -// It is only useful for benchmarking, as it gives an idea of the -// overhead from the codec framework. -// -// LIBRARY USERS: *** DO NOT USE *** -func NoopHandle(slen int) *noopHandle { - h := noopHandle{} - h.rand = rand.New(rand.NewSource(time.Now().UnixNano())) - h.B = make([][]byte, slen) - h.S = make([]string, slen) - for i := 0; i < len(h.S); i++ { - b := make([]byte, i+1) - for j := 0; j < len(b); j++ { - b[j] = 'a' + byte(i) - } - h.B[i] = b - h.S[i] = string(b) - } - return &h -} - -// noopHandle does nothing. -// It is used to simulate the overhead of the codec framework. -type noopHandle struct { - BasicHandle - binaryEncodingType - noopDrv // noopDrv is unexported here, so we can get a copy of it when needed. -} - -type noopDrv struct { - d *Decoder - e *Encoder - i int - S []string - B [][]byte - mks []bool // stack. if map (true), else if array (false) - mk bool // top of stack. what container are we on? map or array? - ct valueType // last response for IsContainerType. - cb int // counter for ContainerType - rand *rand.Rand -} - -func (h *noopDrv) r(v int) int { return h.rand.Intn(v) } -func (h *noopDrv) m(v int) int { h.i++; return h.i % v } - -func (h *noopDrv) newEncDriver(e *Encoder) encDriver { h.e = e; return h } -func (h *noopDrv) newDecDriver(d *Decoder) decDriver { h.d = d; return h } - -func (h *noopDrv) reset() {} -func (h *noopDrv) uncacheRead() {} - -// --- encDriver - -// stack functions (for map and array) -func (h *noopDrv) start(b bool) { - // println("start", len(h.mks)+1) - h.mks = append(h.mks, b) - h.mk = b -} -func (h *noopDrv) end() { - // println("end: ", len(h.mks)-1) - h.mks = h.mks[:len(h.mks)-1] - if len(h.mks) > 0 { - h.mk = h.mks[len(h.mks)-1] - } else { - h.mk = false - } -} - -func (h *noopDrv) EncodeBuiltin(rt uintptr, v interface{}) {} -func (h *noopDrv) EncodeNil() {} -func (h *noopDrv) EncodeInt(i int64) {} -func (h *noopDrv) EncodeUint(i uint64) {} -func (h *noopDrv) EncodeBool(b bool) {} -func (h *noopDrv) EncodeFloat32(f float32) {} -func (h *noopDrv) EncodeFloat64(f float64) {} -func (h *noopDrv) EncodeRawExt(re *RawExt, e *Encoder) {} -func (h *noopDrv) EncodeArrayStart(length int) { h.start(true) } -func (h *noopDrv) EncodeMapStart(length int) { h.start(false) } -func (h *noopDrv) EncodeEnd() { h.end() } - -func (h *noopDrv) EncodeString(c charEncoding, v string) {} -func (h *noopDrv) EncodeSymbol(v string) {} -func (h *noopDrv) EncodeStringBytes(c charEncoding, v []byte) {} - -func (h *noopDrv) EncodeExt(rv interface{}, xtag uint64, ext Ext, e *Encoder) {} - -// ---- decDriver -func (h *noopDrv) initReadNext() {} -func (h *noopDrv) CheckBreak() bool { return false } -func (h *noopDrv) IsBuiltinType(rt uintptr) bool { return false } -func (h *noopDrv) DecodeBuiltin(rt uintptr, v interface{}) {} -func (h *noopDrv) DecodeInt(bitsize uint8) (i int64) { return int64(h.m(15)) } -func (h *noopDrv) DecodeUint(bitsize uint8) (ui uint64) { return uint64(h.m(35)) } -func (h *noopDrv) DecodeFloat(chkOverflow32 bool) (f float64) { return float64(h.m(95)) } -func (h *noopDrv) DecodeBool() (b bool) { return h.m(2) == 0 } -func (h *noopDrv) DecodeString() (s string) { return h.S[h.m(8)] } - -// func (h *noopDrv) DecodeStringAsBytes(bs []byte) []byte { return h.DecodeBytes(bs) } - -func (h *noopDrv) DecodeBytes(bs []byte, isstring, zerocopy bool) []byte { return h.B[h.m(len(h.B))] } - -func (h *noopDrv) ReadEnd() { h.end() } - -// toggle map/slice -func (h *noopDrv) ReadMapStart() int { h.start(true); return h.m(10) } -func (h *noopDrv) ReadArrayStart() int { h.start(false); return h.m(10) } - -func (h *noopDrv) ContainerType() (vt valueType) { - // return h.m(2) == 0 - // handle kStruct, which will bomb is it calls this and doesn't get back a map or array. - // consequently, if the return value is not map or array, reset it to one of them based on h.m(7) % 2 - // for kstruct: at least one out of every 2 times, return one of valueTypeMap or Array (else kstruct bombs) - // however, every 10th time it is called, we just return something else. - var vals = [...]valueType{valueTypeArray, valueTypeMap} - // ------------ TAKE ------------ - // if h.cb%2 == 0 { - // if h.ct == valueTypeMap || h.ct == valueTypeArray { - // } else { - // h.ct = vals[h.m(2)] - // } - // } else if h.cb%5 == 0 { - // h.ct = valueType(h.m(8)) - // } else { - // h.ct = vals[h.m(2)] - // } - // ------------ TAKE ------------ - // if h.cb%16 == 0 { - // h.ct = valueType(h.cb % 8) - // } else { - // h.ct = vals[h.cb%2] - // } - h.ct = vals[h.cb%2] - h.cb++ - return h.ct - - // if h.ct == valueTypeNil || h.ct == valueTypeString || h.ct == valueTypeBytes { - // return h.ct - // } - // return valueTypeUnset - // TODO: may need to tweak this so it works. - // if h.ct == valueTypeMap && vt == valueTypeArray || h.ct == valueTypeArray && vt == valueTypeMap { - // h.cb = !h.cb - // h.ct = vt - // return h.cb - // } - // // go in a loop and check it. - // h.ct = vt - // h.cb = h.m(7) == 0 - // return h.cb -} -func (h *noopDrv) TryDecodeAsNil() bool { - if h.mk { - return false - } else { - return h.m(8) == 0 - } -} -func (h *noopDrv) DecodeExt(rv interface{}, xtag uint64, ext Ext) uint64 { - return 0 -} - -func (h *noopDrv) DecodeNaked() { - // use h.r (random) not h.m() because h.m() could cause the same value to be given. - var sk int - if h.mk { - // if mapkey, do not support values of nil OR bytes, array, map or rawext - sk = h.r(7) + 1 - } else { - sk = h.r(12) - } - n := &h.d.n - switch sk { - case 0: - n.v = valueTypeNil - case 1: - n.v, n.b = valueTypeBool, false - case 2: - n.v, n.b = valueTypeBool, true - case 3: - n.v, n.i = valueTypeInt, h.DecodeInt(64) - case 4: - n.v, n.u = valueTypeUint, h.DecodeUint(64) - case 5: - n.v, n.f = valueTypeFloat, h.DecodeFloat(true) - case 6: - n.v, n.f = valueTypeFloat, h.DecodeFloat(false) - case 7: - n.v, n.s = valueTypeString, h.DecodeString() - case 8: - n.v, n.l = valueTypeBytes, h.B[h.m(len(h.B))] - case 9: - n.v = valueTypeArray - case 10: - n.v = valueTypeMap - default: - n.v = valueTypeExt - n.u = h.DecodeUint(64) - n.l = h.B[h.m(len(h.B))] - } - h.ct = n.v - return -} diff --git a/vendor/github.com/ugorji/go/codec/prebuild.go b/vendor/github.com/ugorji/go/codec/prebuild.go deleted file mode 100644 index 2353263e8..000000000 --- a/vendor/github.com/ugorji/go/codec/prebuild.go +++ /dev/null @@ -1,3 +0,0 @@ -package codec - -//go:generate bash prebuild.sh diff --git a/vendor/github.com/ugorji/go/codec/rpc.go b/vendor/github.com/ugorji/go/codec/rpc.go deleted file mode 100644 index dad53d0c6..000000000 --- a/vendor/github.com/ugorji/go/codec/rpc.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "bufio" - "io" - "net/rpc" - "sync" -) - -// rpcEncodeTerminator allows a handler specify a []byte terminator to send after each Encode. -// -// Some codecs like json need to put a space after each encoded value, to serve as a -// delimiter for things like numbers (else json codec will continue reading till EOF). -type rpcEncodeTerminator interface { - rpcEncodeTerminate() []byte -} - -// Rpc provides a rpc Server or Client Codec for rpc communication. -type Rpc interface { - ServerCodec(conn io.ReadWriteCloser, h Handle) rpc.ServerCodec - ClientCodec(conn io.ReadWriteCloser, h Handle) rpc.ClientCodec -} - -// RpcCodecBuffered allows access to the underlying bufio.Reader/Writer -// used by the rpc connection. It accomodates use-cases where the connection -// should be used by rpc and non-rpc functions, e.g. streaming a file after -// sending an rpc response. -type RpcCodecBuffered interface { - BufferedReader() *bufio.Reader - BufferedWriter() *bufio.Writer -} - -// ------------------------------------- - -// rpcCodec defines the struct members and common methods. -type rpcCodec struct { - rwc io.ReadWriteCloser - dec *Decoder - enc *Encoder - bw *bufio.Writer - br *bufio.Reader - mu sync.Mutex - h Handle - - cls bool - clsmu sync.RWMutex -} - -func newRPCCodec(conn io.ReadWriteCloser, h Handle) rpcCodec { - bw := bufio.NewWriter(conn) - br := bufio.NewReader(conn) - return rpcCodec{ - rwc: conn, - bw: bw, - br: br, - enc: NewEncoder(bw, h), - dec: NewDecoder(br, h), - h: h, - } -} - -func (c *rpcCodec) BufferedReader() *bufio.Reader { - return c.br -} - -func (c *rpcCodec) BufferedWriter() *bufio.Writer { - return c.bw -} - -func (c *rpcCodec) write(obj1, obj2 interface{}, writeObj2, doFlush bool) (err error) { - if c.isClosed() { - return io.EOF - } - if err = c.enc.Encode(obj1); err != nil { - return - } - t, tOk := c.h.(rpcEncodeTerminator) - if tOk { - c.bw.Write(t.rpcEncodeTerminate()) - } - if writeObj2 { - if err = c.enc.Encode(obj2); err != nil { - return - } - if tOk { - c.bw.Write(t.rpcEncodeTerminate()) - } - } - if doFlush { - return c.bw.Flush() - } - return -} - -func (c *rpcCodec) read(obj interface{}) (err error) { - if c.isClosed() { - return io.EOF - } - //If nil is passed in, we should still attempt to read content to nowhere. - if obj == nil { - var obj2 interface{} - return c.dec.Decode(&obj2) - } - return c.dec.Decode(obj) -} - -func (c *rpcCodec) isClosed() bool { - c.clsmu.RLock() - x := c.cls - c.clsmu.RUnlock() - return x -} - -func (c *rpcCodec) Close() error { - if c.isClosed() { - return io.EOF - } - c.clsmu.Lock() - c.cls = true - c.clsmu.Unlock() - return c.rwc.Close() -} - -func (c *rpcCodec) ReadResponseBody(body interface{}) error { - return c.read(body) -} - -// ------------------------------------- - -type goRpcCodec struct { - rpcCodec -} - -func (c *goRpcCodec) WriteRequest(r *rpc.Request, body interface{}) error { - // Must protect for concurrent access as per API - c.mu.Lock() - defer c.mu.Unlock() - return c.write(r, body, true, true) -} - -func (c *goRpcCodec) WriteResponse(r *rpc.Response, body interface{}) error { - c.mu.Lock() - defer c.mu.Unlock() - return c.write(r, body, true, true) -} - -func (c *goRpcCodec) ReadResponseHeader(r *rpc.Response) error { - return c.read(r) -} - -func (c *goRpcCodec) ReadRequestHeader(r *rpc.Request) error { - return c.read(r) -} - -func (c *goRpcCodec) ReadRequestBody(body interface{}) error { - return c.read(body) -} - -// ------------------------------------- - -// goRpc is the implementation of Rpc that uses the communication protocol -// as defined in net/rpc package. -type goRpc struct{} - -// GoRpc implements Rpc using the communication protocol defined in net/rpc package. -// Its methods (ServerCodec and ClientCodec) return values that implement RpcCodecBuffered. -var GoRpc goRpc - -func (x goRpc) ServerCodec(conn io.ReadWriteCloser, h Handle) rpc.ServerCodec { - return &goRpcCodec{newRPCCodec(conn, h)} -} - -func (x goRpc) ClientCodec(conn io.ReadWriteCloser, h Handle) rpc.ClientCodec { - return &goRpcCodec{newRPCCodec(conn, h)} -} - -var _ RpcCodecBuffered = (*rpcCodec)(nil) // ensure *rpcCodec implements RpcCodecBuffered diff --git a/vendor/github.com/ugorji/go/codec/simple.go b/vendor/github.com/ugorji/go/codec/simple.go deleted file mode 100644 index 7c0ba7aff..000000000 --- a/vendor/github.com/ugorji/go/codec/simple.go +++ /dev/null @@ -1,519 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "math" - "reflect" -) - -const ( - _ uint8 = iota - simpleVdNil = 1 - simpleVdFalse = 2 - simpleVdTrue = 3 - simpleVdFloat32 = 4 - simpleVdFloat64 = 5 - - // each lasts for 4 (ie n, n+1, n+2, n+3) - simpleVdPosInt = 8 - simpleVdNegInt = 12 - - // containers: each lasts for 4 (ie n, n+1, n+2, ... n+7) - simpleVdString = 216 - simpleVdByteArray = 224 - simpleVdArray = 232 - simpleVdMap = 240 - simpleVdExt = 248 -) - -type simpleEncDriver struct { - noBuiltInTypes - encNoSeparator - e *Encoder - h *SimpleHandle - w encWriter - b [8]byte -} - -func (e *simpleEncDriver) EncodeNil() { - e.w.writen1(simpleVdNil) -} - -func (e *simpleEncDriver) EncodeBool(b bool) { - if b { - e.w.writen1(simpleVdTrue) - } else { - e.w.writen1(simpleVdFalse) - } -} - -func (e *simpleEncDriver) EncodeFloat32(f float32) { - e.w.writen1(simpleVdFloat32) - bigenHelper{e.b[:4], e.w}.writeUint32(math.Float32bits(f)) -} - -func (e *simpleEncDriver) EncodeFloat64(f float64) { - e.w.writen1(simpleVdFloat64) - bigenHelper{e.b[:8], e.w}.writeUint64(math.Float64bits(f)) -} - -func (e *simpleEncDriver) EncodeInt(v int64) { - if v < 0 { - e.encUint(uint64(-v), simpleVdNegInt) - } else { - e.encUint(uint64(v), simpleVdPosInt) - } -} - -func (e *simpleEncDriver) EncodeUint(v uint64) { - e.encUint(v, simpleVdPosInt) -} - -func (e *simpleEncDriver) encUint(v uint64, bd uint8) { - if v <= math.MaxUint8 { - e.w.writen2(bd, uint8(v)) - } else if v <= math.MaxUint16 { - e.w.writen1(bd + 1) - bigenHelper{e.b[:2], e.w}.writeUint16(uint16(v)) - } else if v <= math.MaxUint32 { - e.w.writen1(bd + 2) - bigenHelper{e.b[:4], e.w}.writeUint32(uint32(v)) - } else { // if v <= math.MaxUint64 { - e.w.writen1(bd + 3) - bigenHelper{e.b[:8], e.w}.writeUint64(v) - } -} - -func (e *simpleEncDriver) encLen(bd byte, length int) { - if length == 0 { - e.w.writen1(bd) - } else if length <= math.MaxUint8 { - e.w.writen1(bd + 1) - e.w.writen1(uint8(length)) - } else if length <= math.MaxUint16 { - e.w.writen1(bd + 2) - bigenHelper{e.b[:2], e.w}.writeUint16(uint16(length)) - } else if int64(length) <= math.MaxUint32 { - e.w.writen1(bd + 3) - bigenHelper{e.b[:4], e.w}.writeUint32(uint32(length)) - } else { - e.w.writen1(bd + 4) - bigenHelper{e.b[:8], e.w}.writeUint64(uint64(length)) - } -} - -func (e *simpleEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, _ *Encoder) { - bs := ext.WriteExt(rv) - if bs == nil { - e.EncodeNil() - return - } - e.encodeExtPreamble(uint8(xtag), len(bs)) - e.w.writeb(bs) -} - -func (e *simpleEncDriver) EncodeRawExt(re *RawExt, _ *Encoder) { - e.encodeExtPreamble(uint8(re.Tag), len(re.Data)) - e.w.writeb(re.Data) -} - -func (e *simpleEncDriver) encodeExtPreamble(xtag byte, length int) { - e.encLen(simpleVdExt, length) - e.w.writen1(xtag) -} - -func (e *simpleEncDriver) EncodeArrayStart(length int) { - e.encLen(simpleVdArray, length) -} - -func (e *simpleEncDriver) EncodeMapStart(length int) { - e.encLen(simpleVdMap, length) -} - -func (e *simpleEncDriver) EncodeString(c charEncoding, v string) { - e.encLen(simpleVdString, len(v)) - e.w.writestr(v) -} - -func (e *simpleEncDriver) EncodeSymbol(v string) { - e.EncodeString(c_UTF8, v) -} - -func (e *simpleEncDriver) EncodeStringBytes(c charEncoding, v []byte) { - e.encLen(simpleVdByteArray, len(v)) - e.w.writeb(v) -} - -//------------------------------------ - -type simpleDecDriver struct { - d *Decoder - h *SimpleHandle - r decReader - bdRead bool - bd byte - br bool // bytes reader - noBuiltInTypes - noStreamingCodec - decNoSeparator - b [scratchByteArrayLen]byte -} - -func (d *simpleDecDriver) readNextBd() { - d.bd = d.r.readn1() - d.bdRead = true -} - -func (d *simpleDecDriver) ContainerType() (vt valueType) { - if d.bd == simpleVdNil { - return valueTypeNil - } else if d.bd == simpleVdByteArray || d.bd == simpleVdByteArray+1 || - d.bd == simpleVdByteArray+2 || d.bd == simpleVdByteArray+3 || d.bd == simpleVdByteArray+4 { - return valueTypeBytes - } else if d.bd == simpleVdString || d.bd == simpleVdString+1 || - d.bd == simpleVdString+2 || d.bd == simpleVdString+3 || d.bd == simpleVdString+4 { - return valueTypeString - } else if d.bd == simpleVdArray || d.bd == simpleVdArray+1 || - d.bd == simpleVdArray+2 || d.bd == simpleVdArray+3 || d.bd == simpleVdArray+4 { - return valueTypeArray - } else if d.bd == simpleVdMap || d.bd == simpleVdMap+1 || - d.bd == simpleVdMap+2 || d.bd == simpleVdMap+3 || d.bd == simpleVdMap+4 { - return valueTypeMap - } else { - // d.d.errorf("isContainerType: unsupported parameter: %v", vt) - } - return valueTypeUnset -} - -func (d *simpleDecDriver) TryDecodeAsNil() bool { - if !d.bdRead { - d.readNextBd() - } - if d.bd == simpleVdNil { - d.bdRead = false - return true - } - return false -} - -func (d *simpleDecDriver) decCheckInteger() (ui uint64, neg bool) { - if !d.bdRead { - d.readNextBd() - } - switch d.bd { - case simpleVdPosInt: - ui = uint64(d.r.readn1()) - case simpleVdPosInt + 1: - ui = uint64(bigen.Uint16(d.r.readx(2))) - case simpleVdPosInt + 2: - ui = uint64(bigen.Uint32(d.r.readx(4))) - case simpleVdPosInt + 3: - ui = uint64(bigen.Uint64(d.r.readx(8))) - case simpleVdNegInt: - ui = uint64(d.r.readn1()) - neg = true - case simpleVdNegInt + 1: - ui = uint64(bigen.Uint16(d.r.readx(2))) - neg = true - case simpleVdNegInt + 2: - ui = uint64(bigen.Uint32(d.r.readx(4))) - neg = true - case simpleVdNegInt + 3: - ui = uint64(bigen.Uint64(d.r.readx(8))) - neg = true - default: - d.d.errorf("decIntAny: Integer only valid from pos/neg integer1..8. Invalid descriptor: %v", d.bd) - return - } - // don't do this check, because callers may only want the unsigned value. - // if ui > math.MaxInt64 { - // d.d.errorf("decIntAny: Integer out of range for signed int64: %v", ui) - // return - // } - return -} - -func (d *simpleDecDriver) DecodeInt(bitsize uint8) (i int64) { - ui, neg := d.decCheckInteger() - i, overflow := chkOvf.SignedInt(ui) - if overflow { - d.d.errorf("simple: overflow converting %v to signed integer", ui) - return - } - if neg { - i = -i - } - if chkOvf.Int(i, bitsize) { - d.d.errorf("simple: overflow integer: %v", i) - return - } - d.bdRead = false - return -} - -func (d *simpleDecDriver) DecodeUint(bitsize uint8) (ui uint64) { - ui, neg := d.decCheckInteger() - if neg { - d.d.errorf("Assigning negative signed value to unsigned type") - return - } - if chkOvf.Uint(ui, bitsize) { - d.d.errorf("simple: overflow integer: %v", ui) - return - } - d.bdRead = false - return -} - -func (d *simpleDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) { - if !d.bdRead { - d.readNextBd() - } - if d.bd == simpleVdFloat32 { - f = float64(math.Float32frombits(bigen.Uint32(d.r.readx(4)))) - } else if d.bd == simpleVdFloat64 { - f = math.Float64frombits(bigen.Uint64(d.r.readx(8))) - } else { - if d.bd >= simpleVdPosInt && d.bd <= simpleVdNegInt+3 { - f = float64(d.DecodeInt(64)) - } else { - d.d.errorf("Float only valid from float32/64: Invalid descriptor: %v", d.bd) - return - } - } - if chkOverflow32 && chkOvf.Float32(f) { - d.d.errorf("msgpack: float32 overflow: %v", f) - return - } - d.bdRead = false - return -} - -// bool can be decoded from bool only (single byte). -func (d *simpleDecDriver) DecodeBool() (b bool) { - if !d.bdRead { - d.readNextBd() - } - if d.bd == simpleVdTrue { - b = true - } else if d.bd == simpleVdFalse { - } else { - d.d.errorf("Invalid single-byte value for bool: %s: %x", msgBadDesc, d.bd) - return - } - d.bdRead = false - return -} - -func (d *simpleDecDriver) ReadMapStart() (length int) { - d.bdRead = false - return d.decLen() -} - -func (d *simpleDecDriver) ReadArrayStart() (length int) { - d.bdRead = false - return d.decLen() -} - -func (d *simpleDecDriver) decLen() int { - switch d.bd % 8 { - case 0: - return 0 - case 1: - return int(d.r.readn1()) - case 2: - return int(bigen.Uint16(d.r.readx(2))) - case 3: - ui := uint64(bigen.Uint32(d.r.readx(4))) - if chkOvf.Uint(ui, intBitsize) { - d.d.errorf("simple: overflow integer: %v", ui) - return 0 - } - return int(ui) - case 4: - ui := bigen.Uint64(d.r.readx(8)) - if chkOvf.Uint(ui, intBitsize) { - d.d.errorf("simple: overflow integer: %v", ui) - return 0 - } - return int(ui) - } - d.d.errorf("decLen: Cannot read length: bd%8 must be in range 0..4. Got: %d", d.bd%8) - return -1 -} - -func (d *simpleDecDriver) DecodeString() (s string) { - return string(d.DecodeBytes(d.b[:], true, true)) -} - -func (d *simpleDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) { - if !d.bdRead { - d.readNextBd() - } - if d.bd == simpleVdNil { - d.bdRead = false - return - } - clen := d.decLen() - d.bdRead = false - if zerocopy { - if d.br { - return d.r.readx(clen) - } else if len(bs) == 0 { - bs = d.b[:] - } - } - return decByteSlice(d.r, clen, bs) -} - -func (d *simpleDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) { - if xtag > 0xff { - d.d.errorf("decodeExt: tag must be <= 0xff; got: %v", xtag) - return - } - realxtag1, xbs := d.decodeExtV(ext != nil, uint8(xtag)) - realxtag = uint64(realxtag1) - if ext == nil { - re := rv.(*RawExt) - re.Tag = realxtag - re.Data = detachZeroCopyBytes(d.br, re.Data, xbs) - } else { - ext.ReadExt(rv, xbs) - } - return -} - -func (d *simpleDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs []byte) { - if !d.bdRead { - d.readNextBd() - } - switch d.bd { - case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4: - l := d.decLen() - xtag = d.r.readn1() - if verifyTag && xtag != tag { - d.d.errorf("Wrong extension tag. Got %b. Expecting: %v", xtag, tag) - return - } - xbs = d.r.readx(l) - case simpleVdByteArray, simpleVdByteArray + 1, simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: - xbs = d.DecodeBytes(nil, false, true) - default: - d.d.errorf("Invalid d.bd for extensions (Expecting extensions or byte array). Got: 0x%x", d.bd) - return - } - d.bdRead = false - return -} - -func (d *simpleDecDriver) DecodeNaked() { - if !d.bdRead { - d.readNextBd() - } - - n := &d.d.n - var decodeFurther bool - - switch d.bd { - case simpleVdNil: - n.v = valueTypeNil - case simpleVdFalse: - n.v = valueTypeBool - n.b = false - case simpleVdTrue: - n.v = valueTypeBool - n.b = true - case simpleVdPosInt, simpleVdPosInt + 1, simpleVdPosInt + 2, simpleVdPosInt + 3: - if d.h.SignedInteger { - n.v = valueTypeInt - n.i = d.DecodeInt(64) - } else { - n.v = valueTypeUint - n.u = d.DecodeUint(64) - } - case simpleVdNegInt, simpleVdNegInt + 1, simpleVdNegInt + 2, simpleVdNegInt + 3: - n.v = valueTypeInt - n.i = d.DecodeInt(64) - case simpleVdFloat32: - n.v = valueTypeFloat - n.f = d.DecodeFloat(true) - case simpleVdFloat64: - n.v = valueTypeFloat - n.f = d.DecodeFloat(false) - case simpleVdString, simpleVdString + 1, simpleVdString + 2, simpleVdString + 3, simpleVdString + 4: - n.v = valueTypeString - n.s = d.DecodeString() - case simpleVdByteArray, simpleVdByteArray + 1, simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4: - n.v = valueTypeBytes - n.l = d.DecodeBytes(nil, false, false) - case simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4: - n.v = valueTypeExt - l := d.decLen() - n.u = uint64(d.r.readn1()) - n.l = d.r.readx(l) - case simpleVdArray, simpleVdArray + 1, simpleVdArray + 2, simpleVdArray + 3, simpleVdArray + 4: - n.v = valueTypeArray - decodeFurther = true - case simpleVdMap, simpleVdMap + 1, simpleVdMap + 2, simpleVdMap + 3, simpleVdMap + 4: - n.v = valueTypeMap - decodeFurther = true - default: - d.d.errorf("decodeNaked: Unrecognized d.bd: 0x%x", d.bd) - } - - if !decodeFurther { - d.bdRead = false - } - return -} - -//------------------------------------ - -// SimpleHandle is a Handle for a very simple encoding format. -// -// simple is a simplistic codec similar to binc, but not as compact. -// - Encoding of a value is always preceeded by the descriptor byte (bd) -// - True, false, nil are encoded fully in 1 byte (the descriptor) -// - Integers (intXXX, uintXXX) are encoded in 1, 2, 4 or 8 bytes (plus a descriptor byte). -// There are positive (uintXXX and intXXX >= 0) and negative (intXXX < 0) integers. -// - Floats are encoded in 4 or 8 bytes (plus a descriptor byte) -// - Lenght of containers (strings, bytes, array, map, extensions) -// are encoded in 0, 1, 2, 4 or 8 bytes. -// Zero-length containers have no length encoded. -// For others, the number of bytes is given by pow(2, bd%3) -// - maps are encoded as [bd] [length] [[key][value]]... -// - arrays are encoded as [bd] [length] [value]... -// - extensions are encoded as [bd] [length] [tag] [byte]... -// - strings/bytearrays are encoded as [bd] [length] [byte]... -// -// The full spec will be published soon. -type SimpleHandle struct { - BasicHandle - binaryEncodingType -} - -func (h *SimpleHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) { - return h.SetExt(rt, tag, &setExtWrapper{b: ext}) -} - -func (h *SimpleHandle) newEncDriver(e *Encoder) encDriver { - return &simpleEncDriver{e: e, w: e.w, h: h} -} - -func (h *SimpleHandle) newDecDriver(d *Decoder) decDriver { - return &simpleDecDriver{d: d, r: d.r, h: h, br: d.bytes} -} - -func (e *simpleEncDriver) reset() { - e.w = e.e.w -} - -func (d *simpleDecDriver) reset() { - d.r = d.d.r - d.bd, d.bdRead = 0, false -} - -var _ decDriver = (*simpleDecDriver)(nil) -var _ encDriver = (*simpleEncDriver)(nil) diff --git a/vendor/github.com/ugorji/go/codec/time.go b/vendor/github.com/ugorji/go/codec/time.go deleted file mode 100644 index 718b731ec..000000000 --- a/vendor/github.com/ugorji/go/codec/time.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved. -// Use of this source code is governed by a MIT license found in the LICENSE file. - -package codec - -import ( - "fmt" - "reflect" - "time" -) - -var ( - timeDigits = [...]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} - timeExtEncFn = func(rv reflect.Value) (bs []byte, err error) { - defer panicToErr(&err) - bs = timeExt{}.WriteExt(rv.Interface()) - return - } - timeExtDecFn = func(rv reflect.Value, bs []byte) (err error) { - defer panicToErr(&err) - timeExt{}.ReadExt(rv.Interface(), bs) - return - } -) - -type timeExt struct{} - -func (x timeExt) WriteExt(v interface{}) (bs []byte) { - switch v2 := v.(type) { - case time.Time: - bs = encodeTime(v2) - case *time.Time: - bs = encodeTime(*v2) - default: - panic(fmt.Errorf("unsupported format for time conversion: expecting time.Time; got %T", v2)) - } - return -} -func (x timeExt) ReadExt(v interface{}, bs []byte) { - tt, err := decodeTime(bs) - if err != nil { - panic(err) - } - *(v.(*time.Time)) = tt -} - -func (x timeExt) ConvertExt(v interface{}) interface{} { - return x.WriteExt(v) -} -func (x timeExt) UpdateExt(v interface{}, src interface{}) { - x.ReadExt(v, src.([]byte)) -} - -// EncodeTime encodes a time.Time as a []byte, including -// information on the instant in time and UTC offset. -// -// Format Description -// -// A timestamp is composed of 3 components: -// -// - secs: signed integer representing seconds since unix epoch -// - nsces: unsigned integer representing fractional seconds as a -// nanosecond offset within secs, in the range 0 <= nsecs < 1e9 -// - tz: signed integer representing timezone offset in minutes east of UTC, -// and a dst (daylight savings time) flag -// -// When encoding a timestamp, the first byte is the descriptor, which -// defines which components are encoded and how many bytes are used to -// encode secs and nsecs components. *If secs/nsecs is 0 or tz is UTC, it -// is not encoded in the byte array explicitly*. -// -// Descriptor 8 bits are of the form `A B C DDD EE`: -// A: Is secs component encoded? 1 = true -// B: Is nsecs component encoded? 1 = true -// C: Is tz component encoded? 1 = true -// DDD: Number of extra bytes for secs (range 0-7). -// If A = 1, secs encoded in DDD+1 bytes. -// If A = 0, secs is not encoded, and is assumed to be 0. -// If A = 1, then we need at least 1 byte to encode secs. -// DDD says the number of extra bytes beyond that 1. -// E.g. if DDD=0, then secs is represented in 1 byte. -// if DDD=2, then secs is represented in 3 bytes. -// EE: Number of extra bytes for nsecs (range 0-3). -// If B = 1, nsecs encoded in EE+1 bytes (similar to secs/DDD above) -// -// Following the descriptor bytes, subsequent bytes are: -// -// secs component encoded in `DDD + 1` bytes (if A == 1) -// nsecs component encoded in `EE + 1` bytes (if B == 1) -// tz component encoded in 2 bytes (if C == 1) -// -// secs and nsecs components are integers encoded in a BigEndian -// 2-complement encoding format. -// -// tz component is encoded as 2 bytes (16 bits). Most significant bit 15 to -// Least significant bit 0 are described below: -// -// Timezone offset has a range of -12:00 to +14:00 (ie -720 to +840 minutes). -// Bit 15 = have\_dst: set to 1 if we set the dst flag. -// Bit 14 = dst\_on: set to 1 if dst is in effect at the time, or 0 if not. -// Bits 13..0 = timezone offset in minutes. It is a signed integer in Big Endian format. -// -func encodeTime(t time.Time) []byte { - //t := rv.Interface().(time.Time) - tsecs, tnsecs := t.Unix(), t.Nanosecond() - var ( - bd byte - btmp [8]byte - bs [16]byte - i int = 1 - ) - l := t.Location() - if l == time.UTC { - l = nil - } - if tsecs != 0 { - bd = bd | 0x80 - bigen.PutUint64(btmp[:], uint64(tsecs)) - f := pruneSignExt(btmp[:], tsecs >= 0) - bd = bd | (byte(7-f) << 2) - copy(bs[i:], btmp[f:]) - i = i + (8 - f) - } - if tnsecs != 0 { - bd = bd | 0x40 - bigen.PutUint32(btmp[:4], uint32(tnsecs)) - f := pruneSignExt(btmp[:4], true) - bd = bd | byte(3-f) - copy(bs[i:], btmp[f:4]) - i = i + (4 - f) - } - if l != nil { - bd = bd | 0x20 - // Note that Go Libs do not give access to dst flag. - _, zoneOffset := t.Zone() - //zoneName, zoneOffset := t.Zone() - zoneOffset /= 60 - z := uint16(zoneOffset) - bigen.PutUint16(btmp[:2], z) - // clear dst flags - bs[i] = btmp[0] & 0x3f - bs[i+1] = btmp[1] - i = i + 2 - } - bs[0] = bd - return bs[0:i] -} - -// DecodeTime decodes a []byte into a time.Time. -func decodeTime(bs []byte) (tt time.Time, err error) { - bd := bs[0] - var ( - tsec int64 - tnsec uint32 - tz uint16 - i byte = 1 - i2 byte - n byte - ) - if bd&(1<<7) != 0 { - var btmp [8]byte - n = ((bd >> 2) & 0x7) + 1 - i2 = i + n - copy(btmp[8-n:], bs[i:i2]) - //if first bit of bs[i] is set, then fill btmp[0..8-n] with 0xff (ie sign extend it) - if bs[i]&(1<<7) != 0 { - copy(btmp[0:8-n], bsAll0xff) - //for j,k := byte(0), 8-n; j < k; j++ { btmp[j] = 0xff } - } - i = i2 - tsec = int64(bigen.Uint64(btmp[:])) - } - if bd&(1<<6) != 0 { - var btmp [4]byte - n = (bd & 0x3) + 1 - i2 = i + n - copy(btmp[4-n:], bs[i:i2]) - i = i2 - tnsec = bigen.Uint32(btmp[:]) - } - if bd&(1<<5) == 0 { - tt = time.Unix(tsec, int64(tnsec)).UTC() - return - } - // In stdlib time.Parse, when a date is parsed without a zone name, it uses "" as zone name. - // However, we need name here, so it can be shown when time is printed. - // Zone name is in form: UTC-08:00. - // Note that Go Libs do not give access to dst flag, so we ignore dst bits - - i2 = i + 2 - tz = bigen.Uint16(bs[i:i2]) - i = i2 - // sign extend sign bit into top 2 MSB (which were dst bits): - if tz&(1<<13) == 0 { // positive - tz = tz & 0x3fff //clear 2 MSBs: dst bits - } else { // negative - tz = tz | 0xc000 //set 2 MSBs: dst bits - //tzname[3] = '-' (TODO: verify. this works here) - } - tzint := int16(tz) - if tzint == 0 { - tt = time.Unix(tsec, int64(tnsec)).UTC() - } else { - // For Go Time, do not use a descriptive timezone. - // It's unnecessary, and makes it harder to do a reflect.DeepEqual. - // The Offset already tells what the offset should be, if not on UTC and unknown zone name. - // var zoneName = timeLocUTCName(tzint) - tt = time.Unix(tsec, int64(tnsec)).In(time.FixedZone("", int(tzint)*60)) - } - return -} - -func timeLocUTCName(tzint int16) string { - if tzint == 0 { - return "UTC" - } - var tzname = []byte("UTC+00:00") - //tzname := fmt.Sprintf("UTC%s%02d:%02d", tzsign, tz/60, tz%60) //perf issue using Sprintf. inline below. - //tzhr, tzmin := tz/60, tz%60 //faster if u convert to int first - var tzhr, tzmin int16 - if tzint < 0 { - tzname[3] = '-' // (TODO: verify. this works here) - tzhr, tzmin = -tzint/60, (-tzint)%60 - } else { - tzhr, tzmin = tzint/60, tzint%60 - } - tzname[4] = timeDigits[tzhr/10] - tzname[5] = timeDigits[tzhr%10] - tzname[7] = timeDigits[tzmin/10] - tzname[8] = timeDigits[tzmin%10] - return string(tzname) - //return time.FixedZone(string(tzname), int(tzint)*60) -} From 95f0f62ea40b7b0419607e9e918f329981bcafb7 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Wed, 4 Jul 2018 20:24:23 +0000 Subject: [PATCH 069/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_de-DE.ini | 4 ---- options/locale/locale_fr-FR.ini | 4 ---- options/locale/locale_it-IT.ini | 4 ---- options/locale/locale_lv-LV.ini | 4 ---- options/locale/locale_pt-BR.ini | 15 +++++++++++---- options/locale/locale_ru-RU.ini | 4 ---- options/locale/locale_uk-UA.ini | 4 ---- options/locale/locale_zh-CN.ini | 4 ---- options/locale/locale_zh-TW.ini | 3 --- 9 files changed, 11 insertions(+), 35 deletions(-) diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index b5ac216ee..d72f0834b 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -491,12 +491,8 @@ owner=Besitzer repo_name=Repository-Name repo_name_helper=Ein guter Repository-Name besteht normalerweise aus kurzen, unvergesslichen und einzigartigen Schlagwörtern. visibility=Sichtbarkeit -visiblity_helper=privates Repository -visiblity_helper_forced=Auf dieser Gitea-Instanz können nur private Repositories angelegt werden. -visiblity_fork_helper=(Eine Änderung dieses Wertes wirkt sich auf alle Forks aus) fork_repo=Repository forken fork_from=Fork von -fork_visiblity_helper=Die Sichtbarkeit einer geforkten Repository kann nicht geändert werden. repo_desc=Beschreibung repo_lang=Sprache repo_gitignore_helper=Wähle eine .gitignore-Vorlage aus. diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index 7368dfb62..3f8a6c2a9 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -491,12 +491,8 @@ owner=Propriétaire repo_name=Nom du dépôt repo_name_helper=Idéalement, le nom d'un dépôt devrait être court, mémorisable et unique. visibility=Visibilité -visiblity_helper=Rendre le dépôt privé -visiblity_helper_forced=L'administrateur de votre site impose que les nouveaux dépôts soient privés. -visiblity_fork_helper=(Les changement de cette valeur affecteront toutes les bifurcations.) fork_repo=Créer une bifurcation du dépôt fork_from=Bifurquer depuis -fork_visiblity_helper=La visibilité d'un dépôt bifurqué ne peut être changée. repo_desc=Description repo_lang=Langue repo_gitignore_helper=Choisissez un modèle de fichier .gitignore. diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini index 87be4ded7..7a8909800 100644 --- a/options/locale/locale_it-IT.ini +++ b/options/locale/locale_it-IT.ini @@ -492,12 +492,8 @@ owner=Proprietario repo_name=Nome Repository repo_name_helper=Un buon nome per un repository è costituito da parole chiave corte, facili da ricordare e uniche. visibility=Visibilità -visiblity_helper=Rendi il repository privato -visiblity_helper_forced=L'amministratore del sito impone che le nuove repositories siano private. -visiblity_fork_helper=(Questa modifica avrà effetto su tutti i fork) fork_repo=Forka Repository fork_from=Forka da -fork_visiblity_helper=La visibilità di un repository forkato non può essere modificata. repo_desc=Descrizione repo_lang=Lingua repo_gitignore_helper=Seleziona i templates di .gitignore. diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini index de6dfa3e6..4bb962cb0 100644 --- a/options/locale/locale_lv-LV.ini +++ b/options/locale/locale_lv-LV.ini @@ -492,13 +492,9 @@ owner=Īpašnieks repo_name=Repozitorija nosaukums repo_name_helper=Labi repozitorija nosaukumi ir īsi, unikāli un tādi, ko viegli atcerēties. visibility=Redzamība -visiblity_helper=Padarīt repozitoriju privātu -visiblity_helper_forced=Jūsu sistēmas administrators ir noteicis, ka visiem no jauna izveidotajiem repozitorijiem ir jābūt privātiem. -visiblity_fork_helper=(Šīs vērtības maiņa ietekmēs arī visus atdalītos repozitorijus) clone_helper=Nepieciešama palīdzība klonēšanā? Apmeklē palīdzības sadaļu. fork_repo=Atdalīt repozitoriju fork_from=Atdalīt no -fork_visiblity_helper=Atdalītam repozitorijam nav iespējams nomainīt tā redzamību. repo_desc=Apraksts repo_lang=Valoda repo_gitignore_helper=Izvēlieties .gitignore sagatavi. diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index d30faac81..317315a35 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -75,6 +75,7 @@ cancel=Cancelar [install] install=Instalação title=Configuração inicial +docker_helper=Se você está rodando o Gitea dentro do Docker, por favor leia a documentação cuidadosamente antes de alterar qualquer coisa nesta página. requite_db_desc=Gitea requer MySQL, PostgreSQL, MSSQL, SQLite3 ou TiDB. db_title=Configurações de banco de dados db_type=Tipo de banco de dados @@ -491,12 +492,13 @@ owner=Proprietário repo_name=Nome do repositório repo_name_helper=Um bom nome de repositório é composto por palavras curtas, memorizáveis e únicas. visibility=Visibilidade -visiblity_helper=Tornar este repositório privado -visiblity_helper_forced=O administrador do site força novos repositórios a serem privados. -visiblity_fork_helper=(Esta alteração irá afetar todos os forks.) +visibility_helper=Tornar este repositório privado +visibility_helper_forced=O administrador do site força novos repositórios a serem privados. +visibility_fork_helper=(Esta alteração irá afetar todos os forks.) +clone_helper=Precisa de ajuda com o clone? Visite a Ajuda. fork_repo=Fork do repositório fork_from=Fork de -fork_visiblity_helper=A visibilidade do fork de um repositório não pode ser alterada. +fork_visibility_helper=A visibilidade do fork de um repositório não pode ser alterada. repo_desc=Descrição repo_lang=Linguagem repo_gitignore_helper=Selecione modelos do .gitignore. @@ -611,6 +613,7 @@ editor.directory_is_a_file=O nome do diretório '%s' já é usado como um nome d editor.file_is_a_symlink='%s' é um link simbólico. Links simbólicos não podem ser editados no editor da web editor.filename_is_a_directory=O nome do arquivo '%s' já é usado como um nome de diretório neste repositório. editor.file_editing_no_longer_exists=O arquivo que está sendo editado, '%s', não existe mais neste repositório. +editor.file_changed_while_editing=O conteúdo do arquivo mudou desde que você começou a editar. Clique aqui para ver o que foi editado ou clique em Commit novamemente para sobreescrever essas mudanças. editor.file_already_exists=Um arquivo com nome '%s' já existe neste repositório. editor.no_changes_to_show=Nenhuma alteração a mostrar. editor.fail_to_update_file=Houve erro ao criar ou atualizar arquivo '%s': %v @@ -991,6 +994,7 @@ settings.search_user_placeholder=Pesquisar usuário... settings.org_not_allowed_to_be_collaborator=Organizações não podem ser adicionadas como um colaborador. settings.user_is_org_member=O usuário é um membro da organização e não pode ser adicionado como um colaborador. settings.add_webhook=Adicionar webhook +settings.hooks_desc=Webhooks automaticamente fazem requisições de HTTP POST para um servidor quando acionados determinados eventos de Gitea. Leia mais no guia de webhooks. settings.webhook_deletion=Remover webhook settings.webhook_deletion_desc=A exclusão de um webhook exclui suas configurações e o histórico de entrega. Continuar? settings.webhook_deletion_success=O webhook foi removido. @@ -1007,6 +1011,7 @@ settings.githook_edit_desc=Se o hook não estiver ativo, o conteúdo de exemplo settings.githook_name=Nome do Hook settings.githook_content=Conteúdo do Hook settings.update_githook=Atualizar Hook +settings.add_webhook_desc=Gitea enviará requisições POST com um tipo de conteúdo especificado para a URL de destino. Leia mais no guia de webhooks. settings.payload_url=URL de destino settings.content_type=Tipo de conteúdo POST settings.secret=Senha @@ -1268,6 +1273,8 @@ dashboard.operation_switch=Trocar dashboard.operation_run=Executar dashboard.clean_unbind_oauth=Limpar conexões OAuth não vinculadas dashboard.clean_unbind_oauth_success=Todas as conexões de OAuth não vinculadas foram excluídas. +dashboard.delete_inactivate_accounts=Excluir todas as contas não ativadas +dashboard.delete_inactivate_accounts_success=Todas as contas não ativadas foram excluídas. dashboard.delete_repo_archives=Excluir todos os arquivos do repositório dashboard.delete_repo_archives_success=Todos os arquivos do repositório foram excluídos. dashboard.delete_missing_repos=Excluir todos os repositórios que não possuem seus arquivos Git diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index ff8613a24..74f889ded 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -492,13 +492,9 @@ owner=Владелец repo_name=Имя репозитория repo_name_helper=Лучшие названия репозиториев состоят из коротких, легко запоминаемых и уникальных ключевых слов. visibility=Видимость -visiblity_helper=Сделать репозиторий приватным -visiblity_helper_forced=Администратор сайта настроил параметр видимости новых репозиториев. Репозиторий приватный по умолчанию. -visiblity_fork_helper=(Изменение этого повлияет на все форки.) clone_helper=Нужна помощь в клонировании? Посетите страницу помощи. fork_repo=Форкнуть репозиторий fork_from=Форк от -fork_visiblity_helper=Видимость форкнутого репозитория изменить нельзя. repo_desc=Описание repo_lang=Язык repo_gitignore_helper=Выберите шаблон .gitignore. diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 65d17c4c5..2bd85a3d6 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -492,13 +492,9 @@ owner=Власник repo_name=Назва репозиторію repo_name_helper=Хороші назви репозиторіїв використовують короткі, унікальні ключові слова що легко запам'ятати. visibility=Видимість -visiblity_helper=Зробити репозиторій приватним -visiblity_helper_forced=Адміністратор вашого сайту налаштував параметри нових репозиторіїв: всі нові репозиторії будуть приватними. -visiblity_fork_helper=(Зміна цього вплине на всі форки.) clone_helper=Потрібна допомога у клонуванні? Відвідайте сторінку Допомога. fork_repo=Форкнути репозиторій fork_from=Форк з -fork_visiblity_helper=Видимість форкнутого репозиторію змінити не можна. repo_desc=Опис repo_lang=Мова repo_gitignore_helper=Виберіть шаблон .gitignore. diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 40de2a8c6..ad89a0e98 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -491,12 +491,8 @@ owner=拥有者 repo_name=仓库名称 repo_name_helper=好的存储库名称使用简短、深刻和独特的关键字。 visibility=可见性 -visiblity_helper=将仓库设为私有 -visiblity_helper_forced=站点管理员强制要求新仓库为私有。 -visiblity_fork_helper=(修改该值将会影响到所有派生仓库) fork_repo=派生仓库 fork_from=派生自 -fork_visiblity_helper=无法更改派生仓库的可见性。 repo_desc=仓库描述 repo_lang=仓库语言 repo_gitignore_helper=选择 .gitignore 模板。 diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index 1155cf396..7c0242f70 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -460,9 +460,6 @@ owner=擁有者 repo_name=儲存庫名稱 repo_name_helper=好的儲存庫名稱通常是簡短的、好記的、且獨特的。 visibility=可見度 -visiblity_helper=將儲存庫設為私人 -visiblity_helper_forced=您的網站管理員強制新的存儲庫必需設定為私人。 -visiblity_fork_helper=(修改該值將會影響到所有派生倉庫) fork_repo=複製儲存庫 fork_from=複製自 repo_desc=儲存庫描述 From b46066f17c79b4b4196a61e710120d874af6ee5a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 5 Jul 2018 05:47:05 +0800 Subject: [PATCH 070/124] fix repository last updated time update when delete a user who watched the repo (#4363) --- models/user.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/user.go b/models/user.go index 5ac865879..0b7af8df6 100644 --- a/models/user.go +++ b/models/user.go @@ -956,7 +956,7 @@ func deleteUser(e *xorm.Session, u *User) error { Where("watch.user_id = ?", u.ID).Find(&watchedRepoIDs); err != nil { return fmt.Errorf("get all watches: %v", err) } - if _, err = e.Decr("num_watches").In("id", watchedRepoIDs).Update(new(Repository)); err != nil { + if _, err = e.Decr("num_watches").In("id", watchedRepoIDs).NoAutoTime().Update(new(Repository)); err != nil { return fmt.Errorf("decrease repository num_watches: %v", err) } // ***** END: Watch ***** @@ -966,7 +966,7 @@ func deleteUser(e *xorm.Session, u *User) error { if err = e.Table("star").Cols("star.repo_id"). Where("star.uid = ?", u.ID).Find(&starredRepoIDs); err != nil { return fmt.Errorf("get all stars: %v", err) - } else if _, err = e.Decr("num_stars").In("id", starredRepoIDs).Update(new(Repository)); err != nil { + } else if _, err = e.Decr("num_stars").In("id", starredRepoIDs).NoAutoTime().Update(new(Repository)); err != nil { return fmt.Errorf("decrease repository num_stars: %v", err) } // ***** END: Star ***** From 4a8ee0b5ccbdc75bab29836a54db4e7af7b7ff3f Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Thu, 5 Jul 2018 01:45:15 +0300 Subject: [PATCH 071/124] Check that repositories can only be migrated to own user or organizations (#4366) * Repositories can only migrated to own user or organizations * Add check for organization that user does not belong to * Allow admin to migrate repositories for other users --- integrations/api_repo_test.go | 27 +++++++++++++++++++++++++++ routers/api/v1/repo/repo.go | 23 +++++++++++++++-------- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go index 12429c88a..c789cc9ee 100644 --- a/integrations/api_repo_test.go +++ b/integrations/api_repo_test.go @@ -235,3 +235,30 @@ func TestAPIGetRepoByIDUnauthorized(t *testing.T) { req := NewRequestf(t, "GET", "/api/v1/repositories/2") sess.MakeRequest(t, req, http.StatusNotFound) } + +func TestAPIRepoMigrate(t *testing.T) { + testCases := []struct { + ctxUserID, userID int64 + cloneURL, repoName string + expectedStatus int + }{ + {ctxUserID: 1, userID: 2, cloneURL: "https://github.com/go-gitea/git.git", repoName: "git-admin", expectedStatus: http.StatusCreated}, + {ctxUserID: 2, userID: 2, cloneURL: "https://github.com/go-gitea/git.git", repoName: "git-own", expectedStatus: http.StatusCreated}, + {ctxUserID: 2, userID: 1, cloneURL: "https://github.com/go-gitea/git.git", repoName: "git-bad", expectedStatus: http.StatusForbidden}, + {ctxUserID: 2, userID: 3, cloneURL: "https://github.com/go-gitea/git.git", repoName: "git-org", expectedStatus: http.StatusCreated}, + {ctxUserID: 2, userID: 6, cloneURL: "https://github.com/go-gitea/git.git", repoName: "git-bad-org", expectedStatus: http.StatusForbidden}, + } + + prepareTestEnv(t) + for _, testCase := range testCases { + user := models.AssertExistsAndLoadBean(t, &models.User{ID: testCase.ctxUserID}).(*models.User) + session := loginUser(t, user.Name) + + req := NewRequestWithJSON(t, "POST", "/api/v1/repos/migrate", &api.MigrateRepoOption{ + CloneAddr: testCase.cloneURL, + UID: int(testCase.userID), + RepoName: testCase.repoName, + }) + session.MakeRequest(t, req, testCase.expectedStatus) + } +} diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index ccfe0440c..c6c5d4aec 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -306,16 +306,23 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) { return } - if ctxUser.IsOrganization() && !ctx.User.IsAdmin { - // Check ownership of organization. - isOwner, err := ctxUser.IsOwnedBy(ctx.User.ID) - if err != nil { - ctx.Error(500, "IsOwnedBy", err) - return - } else if !isOwner { - ctx.Error(403, "", "Given user is not owner of organization.") + if !ctx.User.IsAdmin { + if !ctxUser.IsOrganization() && ctx.User.ID != ctxUser.ID { + ctx.Error(403, "", "Given user is not an organization.") return } + + if ctxUser.IsOrganization() { + // Check ownership of organization. + isOwner, err := ctxUser.IsOwnedBy(ctx.User.ID) + if err != nil { + ctx.Error(500, "IsOwnedBy", err) + return + } else if !isOwner { + ctx.Error(403, "", "Given user is not owner of organization.") + return + } + } } remoteAddr, err := form.ParseRemoteAddr(ctx.User) From 4eae810d63cb48977d7c0b96c90877592ec3d7b2 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Wed, 4 Jul 2018 22:53:06 +0000 Subject: [PATCH 072/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_sv-SE.ini | 4 ++++ options/locale/locale_uk-UA.ini | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index dc4ebd405..addaa8e31 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -566,6 +566,10 @@ milestones.due_date=Förfallodatum (valfritt) milestones.clear=Rensa milestones.edit=Redigera milstolpe milestones.cancel=Avbryt +milestones.modify=Uppdatera milstolpe +milestones.edit_success=Milstolpe '%s' har blivit uppdaterad. +milestones.deletion=Ta bort milstolpe +milestones.deletion_desc=Borttagning av en milstolpe tar bort den från samtliga relaterade ärende. Fortsätta? milestones.filter_sort.closest_due_date=Närmaste förfallodatum milestones.filter_sort.furthest_due_date=Mest avlägsna förfallodatum milestones.filter_sort.least_complete=Minst klar diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 2bd85a3d6..fe93cdf0b 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -492,9 +492,13 @@ owner=Власник repo_name=Назва репозиторію repo_name_helper=Хороші назви репозиторіїв використовують короткі, унікальні ключові слова що легко запам'ятати. visibility=Видимість +visibility_helper=Створити приватний репозиторій +visibility_helper_forced=Адміністратор вашого сайту налаштував параметри: всі нові репозиторії будуть приватними. +visibility_fork_helper=(Ці зміни вплинуть на всі форки.) clone_helper=Потрібна допомога у клонуванні? Відвідайте сторінку Допомога. fork_repo=Форкнути репозиторій fork_from=Форк з +fork_visibility_helper=Неможливо змінити видимість форкнутого репозиторію. repo_desc=Опис repo_lang=Мова repo_gitignore_helper=Виберіть шаблон .gitignore. From 69e2ab161109eef667cd22a96711e4a8ee9d01d2 Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Thu, 5 Jul 2018 02:51:02 +0300 Subject: [PATCH 073/124] Allow administrator to create repository for any organization (#4368) --- integrations/api_repo_test.go | 23 +++++++++++++++++++++++ routers/api/v1/repo/repo.go | 16 +++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go index c789cc9ee..aec8c8f81 100644 --- a/integrations/api_repo_test.go +++ b/integrations/api_repo_test.go @@ -262,3 +262,26 @@ func TestAPIRepoMigrate(t *testing.T) { session.MakeRequest(t, req, testCase.expectedStatus) } } + +func TestAPIOrgRepoCreate(t *testing.T) { + testCases := []struct { + ctxUserID int64 + orgName, repoName string + expectedStatus int + }{ + {ctxUserID: 1, orgName: "user3", repoName: "repo-admin", expectedStatus: http.StatusCreated}, + {ctxUserID: 2, orgName: "user3", repoName: "repo-own", expectedStatus: http.StatusCreated}, + {ctxUserID: 2, orgName: "user6", repoName: "repo-bad-org", expectedStatus: http.StatusForbidden}, + } + + prepareTestEnv(t) + for _, testCase := range testCases { + user := models.AssertExistsAndLoadBean(t, &models.User{ID: testCase.ctxUserID}).(*models.User) + session := loginUser(t, user.Name) + + req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/org/%s/repos", testCase.orgName), &api.CreateRepoOption{ + Name: testCase.repoName, + }) + session.MakeRequest(t, req, testCase.expectedStatus) + } +} diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index c6c5d4aec..044b1e9c1 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -257,13 +257,15 @@ func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) { return } - isOwner, err := org.IsOwnedBy(ctx.User.ID) - if err != nil { - ctx.ServerError("IsOwnedBy", err) - return - } else if !isOwner { - ctx.Error(403, "", "Given user is not owner of organization.") - return + if !ctx.User.IsAdmin { + isOwner, err := org.IsOwnedBy(ctx.User.ID) + if err != nil { + ctx.ServerError("IsOwnedBy", err) + return + } else if !isOwner { + ctx.Error(403, "", "Given user is not owner of organization.") + return + } } CreateUserRepo(ctx, org, opt) } From 07063e3e1179dbb8d6e131d7ea0c1b028a772226 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Thu, 5 Jul 2018 00:05:18 +0000 Subject: [PATCH 074/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_sv-SE.ini | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index addaa8e31..968fb97a9 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -570,6 +570,7 @@ milestones.modify=Uppdatera milstolpe milestones.edit_success=Milstolpe '%s' har blivit uppdaterad. milestones.deletion=Ta bort milstolpe milestones.deletion_desc=Borttagning av en milstolpe tar bort den från samtliga relaterade ärende. Fortsätta? +milestones.deletion_success=Milstolpen har blivit borttagen. milestones.filter_sort.closest_due_date=Närmaste förfallodatum milestones.filter_sort.furthest_due_date=Mest avlägsna förfallodatum milestones.filter_sort.least_complete=Minst klar @@ -577,17 +578,26 @@ milestones.filter_sort.most_complete=Mest klar milestones.filter_sort.most_issues=Mest ärenden milestones.filter_sort.least_issues=Minst ärenden +ext_wiki=Extern Wiki +ext_wiki.desc=Länk till extern wiki. wiki=Wiki +wiki.welcome=Välkommen till Wikin. +wiki.welcome_desc=Wikin låter dig skriva och dela dokumentation med medarbetare. +wiki.desc=Skriv och dela dokumentation med medarbetare. +wiki.create_first_page=Skapa den första sidan wiki.page=Sida wiki.filter_page=Filtrera sida +wiki.new_page=Sida wiki.default_commit_message=Skriv en anteckning om den här uppdateringen (valfritt). wiki.save_page=Spara sidan wiki.last_commit_info=%s redigerade denna sida %s wiki.edit_page_button=Redigera wiki.new_page_button=Ny Sida wiki.delete_page_button=Tag bort sida +wiki.delete_page_notice_1=Borttagning utav wiki sidan '%s' kan inte ångras. Fortsätta? wiki.page_already_exists=Wiki-sida med samma namn finns redan. +wiki.reserved_page=Namnet för wikisidan '%s' är reserverat. wiki.pages=Sidor wiki.last_updated=Senast uppdaterad %s @@ -624,6 +634,9 @@ activity.closed_issue_label=Stängd activity.new_issues_count_1=Nytt ärende activity.new_issues_count_n=Nya ärenden activity.new_issue_label=Öppnad +activity.title.unresolved_conv_1=%d Olöst konversation +activity.title.unresolved_conv_n=%d Olösta konversationer +activity.unresolved_conv_desc=De nyligen förändrade ärendena och pull-requesterna har inte blivit lösta ännu. activity.unresolved_conv_label=Öppna activity.title.releases_1=%d release activity.title.releases_n=%d releaser @@ -636,6 +649,9 @@ search.results=Sökresultat för ”%s” i %s settings=Inställningar settings.desc=Inställningarna är där du kan hantera inställningar för utvecklingskatalogen +settings.options=Utvecklingskatalog +settings.collaboration=Medarbetare +settings.collaboration.admin=Administratör settings.collaboration.write=Skriva settings.collaboration.read=Läsa settings.collaboration.undefined=Odefinierad @@ -643,10 +659,23 @@ settings.hooks=Webbhookar settings.githooks=Githookar settings.basic_settings=Basinställningar settings.mirror_settings=Inställningar för spegling +settings.sync_mirror=Synkronisera nu +settings.mirror_sync_in_progress=Synkronisering utav speglingar pågår. Kontrollera igen om en minut. +settings.site=Webbplats settings.update_settings=Uppdatera inställningar settings.advanced_settings=Advancerade Inställningar +settings.wiki_desc=Aktivera wiki för utvecklingskatalog +settings.use_internal_wiki=Använd inbyggd Wiki +settings.use_external_wiki=Använd extern wiki settings.external_wiki_url=Extern Wiki-URL +settings.external_wiki_url_error=Den externa wiki-länken är inte giltig. +settings.external_wiki_url_desc=Besökare omdirigeras till den externa wiki-länken när de trycker på wiki-tabben. +settings.issues_desc=Aktivera ärendehantering för utvecklingskatalogen +settings.use_internal_issue_tracker=Använd inbyggt ärendehanteringssystem +settings.use_external_issue_tracker=Använd externt ärendehanteringssystem settings.external_tracker_url=URL För Extern Ärendehanterare +settings.external_tracker_url_error=Länken för ärendehanteringsystemet är inte en giltig länk. +settings.external_tracker_url_desc=Besökare dirigeras om till länken för det externa ärendehanteringssystemet när de trycker på ärende-tabben. settings.tracker_url_format=URL-Format För Extern Ärendehanterare settings.tracker_issue_style.numeric=Numerisk settings.tracker_issue_style.alphanumeric=Alfanumerisk From 54fedd4070be9819a6dd4e441b3c5689334eae9d Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Thu, 5 Jul 2018 06:02:54 +0300 Subject: [PATCH 075/124] Add default merge options when adding new repository (#4369) --- models/repo.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/models/repo.go b/models/repo.go index 52325f262..c795deee8 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1347,6 +1347,12 @@ func createRepository(e *xorm.Session, doer, u *User, repo *Repository) (err err Type: tp, Config: &IssuesConfig{EnableTimetracker: setting.Service.DefaultEnableTimetracking, AllowOnlyContributorsToTrackTime: setting.Service.DefaultAllowOnlyContributorsToTrackTime}, }) + } else if tp == UnitTypePullRequests { + units = append(units, RepoUnit{ + RepoID: repo.ID, + Type: tp, + Config: &PullRequestsConfig{AllowMerge: true, AllowRebase: true, AllowSquash: true}, + }) } else { units = append(units, RepoUnit{ RepoID: repo.ID, From f035dcd4f221a631cc499d90661237d6cf601843 Mon Sep 17 00:00:00 2001 From: Fluf <36822577+flufmonster@users.noreply.github.com> Date: Thu, 5 Jul 2018 00:13:05 -0400 Subject: [PATCH 076/124] Add Recaptcha functionality to Gitea (#4044) --- custom/conf/app.ini.sample | 8 +++- .../doc/advanced/config-cheat-sheet.en-us.md | 5 +- modules/auth/user_form.go | 9 ++-- modules/auth/user_form_auth_openid.go | 5 +- modules/recaptcha/recaptcha.go | 47 +++++++++++++++++++ modules/setting/setting.go | 14 +++++- public/css/index.css | 2 +- public/less/_form.less | 17 +++++++ routers/user/auth.go | 35 +++++++++++++- routers/user/auth_openid.go | 17 ++++++- templates/base/footer.tmpl | 5 ++ templates/user/auth/signup_inner.tmpl | 7 ++- .../user/auth/signup_openid_register.tmpl | 7 ++- 13 files changed, 163 insertions(+), 15 deletions(-) create mode 100644 modules/recaptcha/recaptcha.go diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index 774a1df59..931a525d7 100644 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -301,7 +301,13 @@ ENABLE_NOTIFY_MAIL = false ENABLE_REVERSE_PROXY_AUTHENTICATION = false ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false ; Enable captcha validation for registration -ENABLE_CAPTCHA = true +ENABLE_CAPTCHA = false +; Type of captcha you want to use. Options: image, recaptcha +CAPTCHA_TYPE = image +; Enable recaptcha to use Google's recaptcha service +; Go to https://www.google.com/recaptcha/admin to sign up for a key +RECAPTCHA_SECRET = +RECAPTCHA_SITEKEY = ; Default value for KeepEmailPrivate ; Each new user will get the value of this setting copied into their profile DEFAULT_KEEP_EMAIL_PRIVATE = false diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index 3f8ebea61..de4ce6b18 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -177,7 +177,10 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. - `ENABLE_REVERSE_PROXY_AUTHENTICATION`: **false**: Enable this to allow reverse proxy authentication. - `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION`: **false**: Enable this to allow auto-registration for reverse authentication. -- `ENABLE_CAPTCHA`: **true**: Enable this to use captcha validation for registration. +- `ENABLE_CAPTCHA`: **false**: Enable this to use captcha validation for registration. +- `CAPTCHA_TYPE`: **image**: \[image, recaptcha\] +- `RECAPTCHA_SECRET`: **""**: Go to https://www.google.com/recaptcha/admin to get a secret for recaptcha +- `RECAPTCHA_SITEKEY`: **""**: Go to https://www.google.com/recaptcha/admin to get a sitekey for recaptcha ## Webhook (`webhook`) diff --git a/modules/auth/user_form.go b/modules/auth/user_form.go index 0c342df86..959a8ac41 100644 --- a/modules/auth/user_form.go +++ b/modules/auth/user_form.go @@ -72,10 +72,11 @@ func (f *InstallForm) Validate(ctx *macaron.Context, errs binding.Errors) bindin // RegisterForm form for registering type RegisterForm struct { - UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` - Email string `binding:"Required;Email;MaxSize(254)"` - Password string `binding:"Required;MaxSize(255)"` - Retype string + UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` + Email string `binding:"Required;Email;MaxSize(254)"` + Password string `binding:"Required;MaxSize(255)"` + Retype string + GRecaptchaResponse string `form:"g-recaptcha-response"` } // Validate valideates the fields diff --git a/modules/auth/user_form_auth_openid.go b/modules/auth/user_form_auth_openid.go index 0ef821dd9..6a3c28487 100644 --- a/modules/auth/user_form_auth_openid.go +++ b/modules/auth/user_form_auth_openid.go @@ -22,8 +22,9 @@ func (f *SignInOpenIDForm) Validate(ctx *macaron.Context, errs binding.Errors) b // SignUpOpenIDForm form for signin up with OpenID type SignUpOpenIDForm struct { - UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` - Email string `binding:"Required;Email;MaxSize(254)"` + UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"` + Email string `binding:"Required;Email;MaxSize(254)"` + GRecaptchaResponse string `form:"g-recaptcha-response"` } // Validate valideates the fields diff --git a/modules/recaptcha/recaptcha.go b/modules/recaptcha/recaptcha.go new file mode 100644 index 000000000..100918596 --- /dev/null +++ b/modules/recaptcha/recaptcha.go @@ -0,0 +1,47 @@ +// Copyright 2018 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package recaptcha + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "time" + + "code.gitea.io/gitea/modules/setting" +) + +// Response is the structure of JSON returned from API +type Response struct { + Success bool `json:"success"` + ChallengeTS time.Time `json:"challenge_ts"` + Hostname string `json:"hostname"` + ErrorCodes []string `json:"error-codes"` +} + +const apiURL = "https://www.google.com/recaptcha/api/siteverify" + +// Verify calls Google Recaptcha API to verify token +func Verify(response string) (bool, error) { + resp, err := http.PostForm(apiURL, + url.Values{"secret": {setting.Service.RecaptchaSecret}, "response": {response}}) + if err != nil { + return false, fmt.Errorf("Failed to send CAPTCHA response: %s", err) + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return false, fmt.Errorf("Failed to read CAPTCHA response: %s", err) + } + var jsonResponse Response + err = json.Unmarshal(body, &jsonResponse) + if err != nil { + return false, fmt.Errorf("Failed to parse CAPTCHA response: %s", err) + } + + return jsonResponse.Success, nil +} diff --git a/modules/setting/setting.go b/modules/setting/setting.go index a5f4457f3..5230307ca 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -75,6 +75,12 @@ const ( RepoCreatingPublic = "public" ) +// enumerates all the types of captchas +const ( + ImageCaptcha = "image" + ReCaptcha = "recaptcha" +) + // settings var ( // AppVer settings @@ -1165,6 +1171,9 @@ var Service struct { EnableReverseProxyAuth bool EnableReverseProxyAutoRegister bool EnableCaptcha bool + CaptchaType string + RecaptchaSecret string + RecaptchaSitekey string DefaultKeepEmailPrivate bool DefaultAllowCreateOrganization bool EnableTimetracking bool @@ -1189,7 +1198,10 @@ func newService() { Service.RequireSignInView = sec.Key("REQUIRE_SIGNIN_VIEW").MustBool() Service.EnableReverseProxyAuth = sec.Key("ENABLE_REVERSE_PROXY_AUTHENTICATION").MustBool() Service.EnableReverseProxyAutoRegister = sec.Key("ENABLE_REVERSE_PROXY_AUTO_REGISTRATION").MustBool() - Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool() + Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool(false) + Service.CaptchaType = sec.Key("CAPTCHA_TYPE").MustString(ImageCaptcha) + Service.RecaptchaSecret = sec.Key("RECAPTCHA_SECRET").MustString("") + Service.RecaptchaSitekey = sec.Key("RECAPTCHA_SITEKEY").MustString("") Service.DefaultKeepEmailPrivate = sec.Key("DEFAULT_KEEP_EMAIL_PRIVATE").MustBool() Service.DefaultAllowCreateOrganization = sec.Key("DEFAULT_ALLOW_CREATE_ORGANIZATION").MustBool(true) Service.EnableTimetracking = sec.Key("ENABLE_TIMETRACKING").MustBool(true) diff --git a/public/css/index.css b/public/css/index.css index 2ee3e8314..5d24bee42 100644 --- a/public/css/index.css +++ b/public/css/index.css @@ -1 +1 @@ -.tribute-container{box-shadow:0 1px 3px 1px #c7c7c7}.tribute-container ul{background:#fff}.tribute-container li{padding:8px 12px;border-bottom:1px solid #dcdcdc}.tribute-container li img{display:inline-block;vertical-align:middle;width:28px;height:28px;margin-right:5px}.tribute-container li span.fullname{font-weight:400;font-size:.8rem;margin-left:3px}.tribute-container li.highlight,.tribute-container li:hover{background:#2185D0;color:#fff}.emoji{width:1.5em;height:1.5em;display:inline-block;background-size:contain}body{font-family:Lato,"Segoe UI","Microsoft YaHei",Arial,Helvetica,sans-serif!important;background-color:#fff;overflow-y:scroll;-webkit-font-smoothing:antialiased}img{border-radius:3px}.rounded{border-radius:.28571429rem!important}code,pre{font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace}code.raw,pre.raw{padding:7px 12px;margin:10px 0;background-color:#f8f8f8;border:1px solid #ddd;border-radius:3px;font-size:13px;line-height:1.5;overflow:auto}code.wrap,pre.wrap{white-space:pre-wrap;-ms-word-break:break-all;word-break:break-all;overflow-wrap:break-word;word-wrap:break-word}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.full.height{padding:0;margin:0 0 -40px 0;min-height:100%}.following.bar{z-index:900;left:0;width:100%;margin:0}.following.bar.light{background-color:#fff;border-bottom:1px solid #DDD;box-shadow:0 2px 3px rgba(0,0,0,.04)}.following.bar .column .menu{margin-top:0}.following.bar .top.menu a.item.brand{padding-left:0}.following.bar .brand .ui.mini.image{width:30px}.following.bar .top.menu .dropdown.item.active,.following.bar .top.menu .dropdown.item:hover,.following.bar .top.menu a.item:hover{background-color:transparent}.following.bar .top.menu a.item:hover{color:rgba(0,0,0,.45)}.following.bar .top.menu .menu{z-index:900}.following.bar .octicon{margin-right:.75em}.following.bar .octicon.fitted{margin-right:0}.following.bar .searchbox{background-color:#f4f4f4!important}.following.bar .searchbox:focus{background-color:#e9e9e9!important}.following.bar .text .octicon{width:16px;text-align:center}@media only screen and (max-width:767px){.following.bar #navbar:not(.shown)>:not(:first-child){display:none}}.right.stackable.menu{margin-left:auto;display:flex;display:-ms-flexbox;-ms-flex-align:inherit;align-items:inherit;-ms-flex-direction:inherit;flex-direction:inherit}.ui.left{float:left}.ui.right{float:right}.ui.button,.ui.menu .item{-moz-user-select:auto;-ms-user-select:auto;-webkit-user-select:auto;user-select:auto}.ui.container.fluid.padded{padding:0 10px 0 10px}.ui.form .ui.button{font-weight:400}.ui.floating.label{z-index:10}.ui.menu,.ui.segment,.ui.vertical.menu{box-shadow:none}.ui .menu:not(.vertical) .item>.button.compact{padding:.58928571em 1.125em}.ui .menu:not(.vertical) .item>.button.small{font-size:.92857143rem}.ui.dropdown .menu>.item>.floating.label{z-index:11}.ui.dropdown .menu .menu>.item>.floating.label{z-index:21}.ui .text.red{color:#d95c5c!important}.ui .text.red a{color:#d95c5c!important}.ui .text.red a:hover{color:#E67777!important}.ui .text.blue{color:#428bca!important}.ui .text.blue a{color:#15c!important}.ui .text.blue a:hover{color:#428bca!important}.ui .text.black{color:#444}.ui .text.black:hover{color:#000}.ui .text.grey{color:#767676!important}.ui .text.grey a{color:#444!important}.ui .text.grey a:hover{color:#000!important}.ui .text.light.grey{color:#888!important}.ui .text.green{color:#6cc644!important}.ui .text.purple{color:#6e5494!important}.ui .text.yellow{color:#FBBD08!important}.ui .text.gold{color:#a1882b!important}.ui .text.left{text-align:left!important}.ui .text.right{text-align:right!important}.ui .text.small{font-size:.75em}.ui .text.normal{font-weight:400}.ui .text.bold{font-weight:700}.ui .text.italic{font-style:italic}.ui .text.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.ui .text.thin{font-weight:400}.ui .text.middle{vertical-align:middle}.ui .message{text-align:center}.ui .header>i+.content{padding-left:.75rem;vertical-align:middle}.ui .warning.header{background-color:#F9EDBE!important;border-color:#F0C36D}.ui .warning.segment{border-color:#F0C36D}.ui .info.segment{border:1px solid #c5d5dd}.ui .info.segment.top{background-color:#e6f1f6!important}.ui .info.segment.top h3,.ui .info.segment.top h4{margin-top:0}.ui .info.segment.top h3:last-child{margin-top:4px}.ui .info.segment.top>:last-child{margin-bottom:0}.ui .normal.header{font-weight:400}.ui .avatar.image{border-radius:3px}.ui .form .fake{display:none!important}.ui .form .sub.field{margin-left:25px}.ui .sha.label{font-family:Consolas,Menlo,Monaco,"Lucida Console",monospace;font-size:13px;padding:6px 10px 4px 10px;font-weight:400;margin:0 6px}.ui.status.buttons .octicon{margin-right:4px}.ui.inline.delete-button{padding:8px 15px;font-weight:400}.ui .background.red{background-color:#d95c5c!important}.ui .background.blue{background-color:#428bca!important}.ui .background.black{background-color:#444}.ui .background.grey{background-color:#767676!important}.ui .background.light.grey{background-color:#888!important}.ui .background.green{background-color:#6cc644!important}.ui .background.purple{background-color:#6e5494!important}.ui .background.yellow{background-color:#FBBD08!important}.ui .background.gold{background-color:#a1882b!important}.ui .branch-tag-choice{line-height:20px}.overflow.menu .items{max-height:300px;overflow-y:auto}.overflow.menu .items .item{position:relative;cursor:pointer;display:block;border:none;height:auto;border-top:none;line-height:1em;color:rgba(0,0,0,.8);padding:.71428571em 1.14285714em!important;font-size:1rem;text-transform:none;font-weight:400;box-shadow:none;-webkit-touch-callout:none}.overflow.menu .items .item.active{font-weight:700}.overflow.menu .items .item:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.8);z-index:13}.scrolling.menu .item.selected{font-weight:700!important}footer{height:40px;background-color:#fff;border-top:1px solid #d6d6d6;clear:both;width:100%;color:#888}footer .container{padding-top:10px}footer .container .fa{width:16px;text-align:center;color:#428bca}footer .container .links>*{border-left:1px solid #d6d6d6;padding-left:8px;margin-left:5px}footer .container .links>:first-child{border-left:none}footer .ui.language .menu{max-height:500px;overflow-y:auto;margin-bottom:7px}.hide{display:none}.center{text-align:center}.img-1{width:2px!important;height:2px!important}.img-2{width:4px!important;height:4px!important}.img-3{width:6px!important;height:6px!important}.img-4{width:8px!important;height:8px!important}.img-5{width:10px!important;height:10px!important}.img-6{width:12px!important;height:12px!important}.img-7{width:14px!important;height:14px!important}.img-8{width:16px!important;height:16px!important}.img-9{width:18px!important;height:18px!important}.img-10{width:20px!important;height:20px!important}.img-11{width:22px!important;height:22px!important}.img-12{width:24px!important;height:24px!important}.img-13{width:26px!important;height:26px!important}.img-14{width:28px!important;height:28px!important}.img-15{width:30px!important;height:30px!important}.img-16{width:32px!important;height:32px!important}@media only screen and (min-width:768px){.mobile-only,.ui.button.mobile-only{display:none}.sr-mobile-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}}@media only screen and (max-width:767px){.not-mobile{display:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}@media only screen and (max-width:991px) and (min-width:768px){.ui.container{width:95%}}.hljs{background:inherit!important;padding:0!important}.ui.menu.new-menu{justify-content:center!important;padding-top:15px!important;margin-top:-15px!important;margin-bottom:15px!important;background-color:#FAFAFA!important;border-width:1px!important}@media only screen and (max-width:1200px){.ui.menu.new-menu{overflow-x:auto!important;justify-content:left!important;padding-bottom:5px}.ui.menu.new-menu::-webkit-scrollbar{height:8px;display:none}.ui.menu.new-menu:hover::-webkit-scrollbar{display:block}.ui.menu.new-menu::-webkit-scrollbar-track{background:rgba(0,0,0,.01)}.ui.menu.new-menu::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2)}.ui.menu.new-menu:after{position:absolute;margin-top:-15px;display:block;background-image:linear-gradient(to right,rgba(255,255,255,0),#fff 100%);content:' ';right:0;height:53px;z-index:1000;width:60px;clear:none;visibility:visible}.ui.menu.new-menu a.item:last-child{padding-right:30px!important}}[v-cloak]{display:none!important}.repos-search{padding-bottom:0!important}.repos-filter{margin-top:0!important;border-bottom-width:0!important;margin-bottom:2px!important}.markdown:not(code){overflow:hidden;font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6!important;word-wrap:break-word}.markdown:not(code).ui.segment{padding:3em}.markdown:not(code).file-view{padding:2em 2em 2em!important}.markdown:not(code)>:first-child{margin-top:0!important}.markdown:not(code)>:last-child{margin-bottom:0!important}.markdown:not(code) a:not([href]){color:inherit;text-decoration:none}.markdown:not(code) .absent{color:#c00}.markdown:not(code) .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown:not(code) .anchor:focus{outline:0}.markdown:not(code) h1,.markdown:not(code) h2,.markdown:not(code) h3,.markdown:not(code) h4,.markdown:not(code) h5,.markdown:not(code) h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown:not(code) h1:first-of-type,.markdown:not(code) h2:first-of-type,.markdown:not(code) h3:first-of-type,.markdown:not(code) h4:first-of-type,.markdown:not(code) h5:first-of-type,.markdown:not(code) h6:first-of-type{margin-top:0!important}.markdown:not(code) h1 .octicon-link,.markdown:not(code) h2 .octicon-link,.markdown:not(code) h3 .octicon-link,.markdown:not(code) h4 .octicon-link,.markdown:not(code) h5 .octicon-link,.markdown:not(code) h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown:not(code) h1:hover .anchor,.markdown:not(code) h2:hover .anchor,.markdown:not(code) h3:hover .anchor,.markdown:not(code) h4:hover .anchor,.markdown:not(code) h5:hover .anchor,.markdown:not(code) h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown:not(code) h1:hover .anchor .octicon-link,.markdown:not(code) h2:hover .anchor .octicon-link,.markdown:not(code) h3:hover .anchor .octicon-link,.markdown:not(code) h4:hover .anchor .octicon-link,.markdown:not(code) h5:hover .anchor .octicon-link,.markdown:not(code) h6:hover .anchor .octicon-link{display:inline-block}.markdown:not(code) h1 code,.markdown:not(code) h1 tt,.markdown:not(code) h2 code,.markdown:not(code) h2 tt,.markdown:not(code) h3 code,.markdown:not(code) h3 tt,.markdown:not(code) h4 code,.markdown:not(code) h4 tt,.markdown:not(code) h5 code,.markdown:not(code) h5 tt,.markdown:not(code) h6 code,.markdown:not(code) h6 tt{font-size:inherit}.markdown:not(code) h1{padding-bottom:.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown:not(code) h1 .anchor{line-height:1}.markdown:not(code) h2{padding-bottom:.3em;font-size:1.75em;line-height:1.225;border-bottom:1px solid #eee}.markdown:not(code) h2 .anchor{line-height:1}.markdown:not(code) h3{font-size:1.5em;line-height:1.43}.markdown:not(code) h3 .anchor{line-height:1.2}.markdown:not(code) h4{font-size:1.25em}.markdown:not(code) h4 .anchor{line-height:1.2}.markdown:not(code) h5{font-size:1em}.markdown:not(code) h5 .anchor{line-height:1.1}.markdown:not(code) h6{font-size:1em;color:#777}.markdown:not(code) h6 .anchor{line-height:1.1}.markdown:not(code) blockquote,.markdown:not(code) dl,.markdown:not(code) ol,.markdown:not(code) p,.markdown:not(code) pre,.markdown:not(code) table,.markdown:not(code) ul{margin-top:0;margin-bottom:16px}.markdown:not(code) blockquote{margin-left:0}.markdown:not(code) hr{height:4px;padding:0;margin:16px 0;background-color:#e7e7e7;border:0 none}.markdown:not(code) ol,.markdown:not(code) ul{padding-left:2em}.markdown:not(code) ol.no-list,.markdown:not(code) ul.no-list{padding:0;list-style-type:none}.markdown:not(code) ol ol,.markdown:not(code) ol ul,.markdown:not(code) ul ol,.markdown:not(code) ul ul{margin-top:0;margin-bottom:0}.markdown:not(code) ol ol,.markdown:not(code) ul ol{list-style-type:lower-roman}.markdown:not(code) li>p{margin-top:0}.markdown:not(code) dl{padding:0}.markdown:not(code) dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown:not(code) dl dd{padding:0 16px;margin-bottom:16px}.markdown:not(code) blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown:not(code) blockquote>:first-child{margin-top:0}.markdown:not(code) blockquote>:last-child{margin-bottom:0}.markdown:not(code) table{width:auto;overflow:auto;word-break:normal;word-break:keep-all}.markdown:not(code) table th{font-weight:700}.markdown:not(code) table td,.markdown:not(code) table th{padding:6px 13px!important;border:1px solid #ddd!important}.markdown:not(code) table tr{background-color:#fff;border-top:1px solid #ccc}.markdown:not(code) table tr:nth-child(2n){background-color:#f8f8f8}.markdown:not(code) img{max-width:100%;box-sizing:border-box}.markdown:not(code) .emoji{max-width:none}.markdown:not(code) span.frame{display:block;overflow:hidden}.markdown:not(code) span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown:not(code) span.frame span img{display:block;float:left}.markdown:not(code) span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown:not(code) span.align-center{display:block;overflow:hidden;clear:both}.markdown:not(code) span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown:not(code) span.align-center span img{margin:0 auto;text-align:center}.markdown:not(code) span.align-right{display:block;overflow:hidden;clear:both}.markdown:not(code) span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown:not(code) span.align-right span img{margin:0;text-align:right}.markdown:not(code) span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown:not(code) span.float-left span{margin:13px 0 0}.markdown:not(code) span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown:not(code) span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown:not(code) code,.markdown:not(code) tt{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown:not(code) code:after,.markdown:not(code) code:before,.markdown:not(code) tt:after,.markdown:not(code) tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown:not(code) code br,.markdown:not(code) tt br{display:none}.markdown:not(code) del code{text-decoration:inherit}.markdown:not(code) pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown:not(code) .highlight{margin-bottom:16px}.markdown:not(code) .highlight pre,.markdown:not(code) pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown:not(code) .highlight pre{margin-bottom:0;word-break:normal}.markdown:not(code) pre{word-wrap:normal}.markdown:not(code) pre code,.markdown:not(code) pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown:not(code) pre code:after,.markdown:not(code) pre code:before,.markdown:not(code) pre tt:after,.markdown:not(code) pre tt:before{content:normal}.markdown:not(code) kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown:not(code) input[type=checkbox]{vertical-align:middle!important}.markdown:not(code) .csv-data td,.markdown:not(code) .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown:not(code) .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown:not(code) .csv-data tr{border-top:0}.markdown:not(code) .csv-data th{font-weight:700;background:#f8f8f8;border-top:0}.markdown:not(code) .ui.list .list,.markdown:not(code) ol.ui.list ol,.markdown:not(code) ul.ui.list ul{padding-left:2em}.home{padding-bottom:80px}.home .logo{max-width:220px}.home .hero h1,.home .hero h2{font-family:'PT Sans Narrow',sans-serif,'Microsoft YaHei'}@media only screen and (max-width:767px){.home .hero h1{font-size:3.5em}.home .hero h2{font-size:2em}}@media only screen and (min-width:768px){.home .hero h1{font-size:5.5em}.home .hero h2{font-size:3em}}.home .hero .octicon{color:#5aa509;font-size:40px;width:50px}.home .hero.header{font-size:20px}.home p.large{font-size:16px}.home .stackable{padding-top:30px}.home a{color:#5aa509}.signup{padding-top:15px;padding-bottom:80px}.install{padding-top:45px;padding-bottom:80px}.install form label{text-align:right;width:320px!important}.install form input{width:35%!important}.install form .field{text-align:left}.install form .field .help{margin-left:335px!important}.install form .field.optional .title{margin-left:38%}.install .ui .checkbox{margin-left:40%!important}.install .ui .checkbox label{width:auto!important}.form .help{color:#999;padding-top:.6em;padding-bottom:.6em;display:inline-block}.ui.attached.header{background:#f0f0f0}.ui.attached.header .right{margin-top:-5px}.ui.attached.header .right .button{padding:8px 10px;font-weight:400}#create-page-form form{margin:auto}#create-page-form form .ui.message{text-align:center}@media only screen and (min-width:768px){#create-page-form form{width:800px!important}#create-page-form form .header{padding-left:280px!important}#create-page-form form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}#create-page-form form .help{margin-left:265px!important}#create-page-form form .optional .title{margin-left:250px!important}#create-page-form form input,#create-page-form form textarea{width:50%!important}}@media only screen and (max-width:767px){#create-page-form form .optional .title{margin-left:15px}#create-page-form form .inline.field>label{display:block}}.signin .oauth2 div{display:inline-block}.signin .oauth2 div p{margin:10px 5px 0 0;float:left}.signin .oauth2 a{margin-right:3px}.signin .oauth2 a:last-child{margin-right:0}.signin .oauth2 img{width:32px;height:32px}.signin .oauth2 img.openidConnect{width:auto}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{margin:auto}.user.activate form .ui.message,.user.forgot.password form .ui.message,.user.reset.password form .ui.message,.user.signin form .ui.message,.user.signup form .ui.message{text-align:center}@media only screen and (min-width:768px){.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{width:800px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.signin form .header,.user.signup form .header{padding-left:280px!important}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.user.activate form .help,.user.forgot.password form .help,.user.reset.password form .help,.user.signin form .help,.user.signup form .help{margin-left:265px!important}.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:250px!important}.user.activate form input,.user.activate form textarea,.user.forgot.password form input,.user.forgot.password form textarea,.user.reset.password form input,.user.reset.password form textarea,.user.signin form input,.user.signin form textarea,.user.signup form input,.user.signup form textarea{width:50%!important}}@media only screen and (max-width:767px){.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:15px}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{display:block}}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{width:700px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.signin form .header,.user.signup form .header{padding-left:0!important;text-align:center}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{width:200px!important}.repository.new.fork form,.repository.new.migrate form,.repository.new.repo form{margin:auto}.repository.new.fork form .ui.message,.repository.new.migrate form .ui.message,.repository.new.repo form .ui.message{text-align:center}@media only screen and (min-width:768px){.repository.new.fork form,.repository.new.migrate form,.repository.new.repo form{width:800px!important}.repository.new.fork form .header,.repository.new.migrate form .header,.repository.new.repo form .header{padding-left:280px!important}.repository.new.fork form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.repo form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.repository.new.fork form .help,.repository.new.migrate form .help,.repository.new.repo form .help{margin-left:265px!important}.repository.new.fork form .optional .title,.repository.new.migrate form .optional .title,.repository.new.repo form .optional .title{margin-left:250px!important}.repository.new.fork form input,.repository.new.fork form textarea,.repository.new.migrate form input,.repository.new.migrate form textarea,.repository.new.repo form input,.repository.new.repo form textarea{width:50%!important}}@media only screen and (max-width:767px){.repository.new.fork form .optional .title,.repository.new.migrate form .optional .title,.repository.new.repo form .optional .title{margin-left:15px}.repository.new.fork form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.repo form .inline.field>label{display:block}}.repository.new.fork form .dropdown .dropdown.icon,.repository.new.migrate form .dropdown .dropdown.icon,.repository.new.repo form .dropdown .dropdown.icon{margin-top:-7px!important}.repository.new.fork form .dropdown .text,.repository.new.migrate form .dropdown .text,.repository.new.repo form .dropdown .text{margin-right:0!important}.repository.new.fork form .dropdown .text i,.repository.new.migrate form .dropdown .text i,.repository.new.repo form .dropdown .text i{margin-right:0!important}.repository.new.fork form .header,.repository.new.migrate form .header,.repository.new.repo form .header{padding-left:0!important;text-align:center}.repository.new.repo .ui.form .selection.dropdown:not(.owner){width:50%!important}@media only screen and (min-width:768px){.repository.new.repo .ui.form #auto-init{margin-left:265px!important}}.new.webhook form .help{margin-left:25px}.new.webhook .events.fields .column{padding-left:40px}.githook textarea{font-family:monospace}.repository{padding-top:15px;padding-bottom:80px}.repository .header-grid{padding-top:5px;padding-bottom:5px}.repository .header-grid .ui.compact.menu{margin-left:1rem}.repository .header-grid .ui.header{margin-top:0}.repository .header-grid .mega-octicon{width:30px;font-size:30px}.repository .header-grid .ui.huge.breadcrumb{font-weight:400;font-size:1.7rem}.repository .header-grid .fork-flag{margin-left:38px;margin-top:3px;display:block;font-size:12px;white-space:nowrap}.repository .header-grid .octicon.octicon-repo-forked{margin-top:-1px;font-size:15px}.repository .header-grid .button{margin-top:2px;margin-bottom:2px}.repository .tabs .navbar{justify-content:initial}.repository .navbar{display:flex;justify-content:space-between}.repository .navbar .ui.label{margin-top:-2px;margin-left:7px;padding:3px 5px}.repository .owner.dropdown{min-width:40%!important}.repository #file-buttons{margin-left:auto!important;font-weight:400}.repository #file-buttons .ui.button{padding:8px 10px;font-weight:400}.repository .metas .menu{max-height:300px;overflow-x:auto}.repository .metas .ui.list .hide{display:none!important}.repository .metas .ui.list .item{padding:0}.repository .metas .ui.list .label.color{padding:0 8px;margin-right:5px}.repository .metas .ui.list a{margin:2px 0}.repository .metas .ui.list a .text{color:#444}.repository .metas .ui.list a .text:hover{color:#000}.repository .header-wrapper{background-color:#FAFAFA;margin-top:-15px;padding-top:15px}.repository .header-wrapper .ui.tabs.divider{border-bottom:none}.repository .header-wrapper .ui.tabular .octicon{margin-right:5px}.repository .filter.menu .label.color{border-radius:3px;margin-left:15px;padding:0 8px}.repository .filter.menu .octicon{float:left;margin:5px -7px 0 -5px;width:16px}.repository .filter.menu .text{margin-left:.9em}.repository .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.repository .filter.menu .dropdown.item{margin:1px;padding-right:0}.repository .select-label .item{max-width:250px;overflow:hidden;text-overflow:ellipsis}.repository .select-label .desc{padding-left:16px}.repository .ui.tabs.container{margin-top:14px;margin-bottom:0}.repository .ui.tabs.container .ui.menu{border-bottom:none}.repository .ui.tabs.divider{margin-top:0;margin-bottom:20px}.repository #clone-panel{width:350px}.repository #clone-panel input{border-radius:0;padding:5px 10px}.repository #clone-panel .clone.button{font-size:13px;padding:0 5px}.repository #clone-panel .clone.button:first-child{border-radius:.28571429rem 0 0 .28571429rem}.repository #clone-panel .icon.button{padding:0 10px}.repository #clone-panel .dropdown .menu{right:0!important;left:auto!important}.repository.file.list .repo-description{display:flex;justify-content:space-between;align-items:center}.repository.file.list #repo-desc{font-size:1.2em}.repository.file.list .choose.reference .header .icon{font-size:1.4em}.repository.file.list .repo-path .divider,.repository.file.list .repo-path .section{display:inline}.repository.file.list #file-buttons{font-weight:400}.repository.file.list #file-buttons .ui.button{padding:8px 10px;font-weight:400}.repository.file.list #repo-files-table thead th{padding-top:8px;padding-bottom:5px;font-weight:400}.repository.file.list #repo-files-table thead th:first-child{display:block;position:relative;width:325%}.repository.file.list #repo-files-table thead .ui.avatar{margin-bottom:5px}.repository.file.list #repo-files-table tbody .octicon{margin-left:3px;margin-right:5px;color:#777}.repository.file.list #repo-files-table tbody .octicon.octicon-mail-reply{margin-right:10px}.repository.file.list #repo-files-table tbody .octicon.octicon-file-directory,.repository.file.list #repo-files-table tbody .octicon.octicon-file-submodule,.repository.file.list #repo-files-table tbody .octicon.octicon-file-symlink-directory{color:#1e70bf}.repository.file.list #repo-files-table td{padding-top:8px;padding-bottom:8px}.repository.file.list #repo-files-table td.message .isSigned{cursor:default}.repository.file.list #repo-files-table tr:hover{background-color:#ffE}.repository.file.list #repo-files-table .jumpable-path{color:#888}.repository.file.list .non-diff-file-content .header .icon{font-size:1em}.repository.file.list .non-diff-file-content .header .file-actions{margin-top:0;margin-bottom:-5px;padding-left:20px}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#767676;vertical-align:middle;background:0 0;border:0;outline:0}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon:hover{color:#4078c0}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon-danger:hover{color:#bd2c00}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon.disabled{color:#bbb;cursor:default}.repository.file.list .non-diff-file-content .header .file-actions #delete-file-form{display:inline-block}.repository.file.list .non-diff-file-content .view-raw{padding:5px}.repository.file.list .non-diff-file-content .view-raw *{max-width:100%}.repository.file.list .non-diff-file-content .view-raw img{padding:5px 5px 0 5px}.repository.file.list .non-diff-file-content .plain-text{padding:1em 2em 1em 2em}.repository.file.list .non-diff-file-content .code-view *{font-size:12px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:20px}.repository.file.list .non-diff-file-content .code-view table{width:100%}.repository.file.list .non-diff-file-content .code-view .lines-num{vertical-align:top;text-align:right;color:#999;background:#f5f5f5;width:1%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}.repository.file.list .non-diff-file-content .code-view .lines-num span{line-height:20px;padding:0 10px;cursor:pointer;display:block}.repository.file.list .non-diff-file-content .code-view .lines-code,.repository.file.list .non-diff-file-content .code-view .lines-num{padding:0}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs,.repository.file.list .non-diff-file-content .code-view .lines-code ol,.repository.file.list .non-diff-file-content .code-view .lines-code pre,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs,.repository.file.list .non-diff-file-content .code-view .lines-num ol,.repository.file.list .non-diff-file-content .code-view .lines-num pre{background-color:#fff;margin:0;padding:0!important}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li,.repository.file.list .non-diff-file-content .code-view .lines-code ol li,.repository.file.list .non-diff-file-content .code-view .lines-code pre li,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li,.repository.file.list .non-diff-file-content .code-view .lines-num ol li,.repository.file.list .non-diff-file-content .code-view .lines-num pre li{display:block;width:100%}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li.active,.repository.file.list .non-diff-file-content .code-view .lines-code ol li.active,.repository.file.list .non-diff-file-content .code-view .lines-code pre li.active,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li.active,.repository.file.list .non-diff-file-content .code-view .lines-num ol li.active,.repository.file.list .non-diff-file-content .code-view .lines-num pre li.active{background:#ffd}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li:before,.repository.file.list .non-diff-file-content .code-view .lines-code ol li:before,.repository.file.list .non-diff-file-content .code-view .lines-code pre li:before,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li:before,.repository.file.list .non-diff-file-content .code-view .lines-num ol li:before,.repository.file.list .non-diff-file-content .code-view .lines-num pre li:before{content:' '}.repository.file.list .non-diff-file-content .code-view .active{background:#ffd}.repository.file.list .sidebar{padding-left:0}.repository.file.list .sidebar .octicon{width:16px}.repository.file.editor .treepath{width:100%}.repository.file.editor .treepath input{vertical-align:middle;box-shadow:rgba(0,0,0,.0745098) 0 1px 2px inset;width:inherit;padding:7px 8px;margin-right:5px}.repository.file.editor .tabular.menu .octicon{margin-right:5px}.repository.file.editor .commit-form-wrapper{padding-left:64px}.repository.file.editor .commit-form-wrapper .commit-avatar{float:left;margin-left:-64px;width:3em;height:auto}.repository.file.editor .commit-form-wrapper .commit-form{position:relative;padding:15px;margin-bottom:10px;border:1px solid #ddd;border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form:after,.repository.file.editor .commit-form-wrapper .commit-form:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.file.editor .commit-form-wrapper .commit-form:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:#fff}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .branch-name{display:inline-block;padding:3px 6px;font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace;color:rgba(0,0,0,.65);background-color:rgba(209,227,237,.45);border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input{position:relative;margin-left:25px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input input{width:240px!important;padding-left:26px!important}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .octicon-git-branch{position:absolute;top:9px;left:10px;color:#b0c4ce}.repository.options #interval{width:100px!important;min-width:100px}.repository.options .danger .item{padding:20px 15px}.repository.options .danger .ui.divider{margin:0}.repository.new.issue .comment.form .comment .avatar{width:3em}.repository.new.issue .comment.form .content{margin-left:4em}.repository.new.issue .comment.form .content:after,.repository.new.issue .comment.form .content:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.new.issue .comment.form .content:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.new.issue .comment.form .content:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.new.issue .comment.form .content:after{border-right-color:#fff}.repository.new.issue .comment.form .content .markdown{font-size:14px}.repository.new.issue .comment.form .metas{min-width:220px}.repository.new.issue .comment.form .metas .filter.menu{max-height:300px;overflow-x:auto}.repository.view.issue .title{padding-bottom:0!important}.repository.view.issue .title h1{font-weight:300;font-size:2.3rem;margin-bottom:5px}.repository.view.issue .title h1 .ui.input{font-size:.5em;vertical-align:top;width:50%;min-width:600px}.repository.view.issue .title h1 .ui.input input{font-size:1.5em;padding:6px 10px}.repository.view.issue .title .index{font-weight:300;color:#aaa;letter-spacing:-1px}.repository.view.issue .title .label{margin-right:10px}.repository.view.issue .title .edit-zone{margin-top:10px}.repository.view.issue .pull-desc code{color:#0166E6}.repository.view.issue .pull.tabular.menu{margin-bottom:10px}.repository.view.issue .pull.tabular.menu .octicon{margin-right:5px}.repository.view.issue .pull.tab.segment{border:none;padding:0;padding-top:10px;box-shadow:none;background-color:inherit}.repository.view.issue .pull .merge.box .avatar{margin-left:10px;margin-top:10px}.repository.view.issue .comment-list:before{display:block;content:"";position:absolute;margin-top:12px;margin-bottom:14px;top:0;bottom:0;left:96px;width:2px;background-color:#f3f3f3;z-index:-1}.repository.view.issue .comment-list .comment .avatar{width:3em}.repository.view.issue .comment-list .comment .tag{color:#767676;margin-top:3px;padding:2px 5px;font-size:12px;border:1px solid rgba(0,0,0,.1);border-radius:3px}.repository.view.issue .comment-list .comment .actions .item{float:left}.repository.view.issue .comment-list .comment .actions .item.tag{margin-right:5px}.repository.view.issue .comment-list .comment .actions .item.action{margin-top:6px;margin-left:10px}.repository.view.issue .comment-list .comment .content{margin-left:4em}.repository.view.issue .comment-list .comment .content>.header{font-weight:400;padding:auto 15px;position:relative;color:#767676;background-color:#f7f7f7;border-bottom:1px solid #eee;border-top-left-radius:3px;border-top-right-radius:3px}.repository.view.issue .comment-list .comment .content>.header:after,.repository.view.issue .comment-list .comment .content>.header:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.view.issue .comment-list .comment .content>.header:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.view.issue .comment-list .comment .content>.header:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.view.issue .comment-list .comment .content>.header .text{max-width:78%;padding-top:10px;padding-bottom:10px}.repository.view.issue .comment-list .comment .content .markdown{font-size:14px}.repository.view.issue .comment-list .comment .content .no-content{color:#767676;font-style:italic}.repository.view.issue .comment-list .comment .content>.bottom.segment{background:#f3f4f5}.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.images::after{clear:both;content:' ';display:block}.repository.view.issue .comment-list .comment .content>.bottom.segment a{display:block;float:left;margin:5px;padding:5px;height:150px;border:solid 1px #eee;border-radius:3px;max-width:150px;background-color:#fff}.repository.view.issue .comment-list .comment .content>.bottom.segment a:before{content:' ';display:inline-block;height:100%;vertical-align:middle}.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.image{max-height:100%;width:auto;margin:0;vertical-align:middle}.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image{font-size:128px;color:#000}.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image:hover{color:#000}.repository.view.issue .comment-list .comment .ui.form .field:first-child{clear:none}.repository.view.issue .comment-list .comment .ui.form .tab.segment{border:none;padding:0;padding-top:10px}.repository.view.issue .comment-list .comment .ui.form textarea{height:200px;font-family:Consolas,monospace}.repository.view.issue .comment-list .comment .edit.buttons{margin-top:10px}.repository.view.issue .comment-list .event{position:relative;margin:15px 0 15px 79px;padding-left:25px}.repository.view.issue .comment-list .event .octicon{width:30px;float:left;text-align:center}.repository.view.issue .comment-list .event .octicon.octicon-circle-slash{margin-top:5px;margin-left:-34.5px;font-size:20px;color:#bd2c00}.repository.view.issue .comment-list .event .octicon.octicon-primitive-dot{margin-left:-28.5px;margin-right:-1px;font-size:30px;color:#6cc644}.repository.view.issue .comment-list .event .octicon.octicon-bookmark{margin-top:3px;margin-left:-31px;margin-right:-1px;font-size:25px}.repository.view.issue .comment-list .event .detail{font-size:.9rem;margin-top:5px;margin-left:35px}.repository.view.issue .comment-list .event .detail .octicon.octicon-git-commit{margin-top:2px}.repository.view.issue .ui.segment.metas{margin-top:-3px}.repository.view.issue .ui.participants img{margin-top:5px;margin-right:5px}.repository .comment.form .ui.comments{margin-top:-12px;max-width:100%}.repository .comment.form .content .field:first-child{clear:none}.repository .comment.form .content .form:after,.repository .comment.form .content .form:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository .comment.form .content .form:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository .comment.form .content .form:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository .comment.form .content .form:after{border-right-color:#fff}.repository .comment.form .content .tab.segment{border:none;padding:0;padding-top:10px}.repository .comment.form .content textarea{height:200px;font-family:Consolas,monospace}.repository .label.list{list-style:none;padding-top:15px}.repository .label.list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .label.list .item a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .label.list .item a:hover{color:#000}.repository .label.list .item a.open-issues{margin-right:30px}.repository .label.list .item .ui.label{font-size:1em}.repository .milestone.list{list-style:none;padding-top:15px}.repository .milestone.list>.item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .milestone.list>.item>a{padding-top:5px;padding-right:10px;color:#000}.repository .milestone.list>.item>a:hover{color:#4078c0}.repository .milestone.list>.item .ui.progress{width:40%;padding:0;border:0;margin:0}.repository .milestone.list>.item .ui.progress .bar{height:20px}.repository .milestone.list>.item .meta{color:#999;padding-top:5px}.repository .milestone.list>.item .meta .issue-stats .octicon{padding-left:5px}.repository .milestone.list>.item .meta .overdue{color:red}.repository .milestone.list>.item .operate{margin-top:-15px}.repository .milestone.list>.item .operate>a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .milestone.list>.item .operate>a:hover{color:#000}.repository .milestone.list>.item .content{padding-top:10px}.repository.new.milestone textarea{height:200px}.repository.new.milestone #deadline{width:150px}.repository.compare.pull .choose.branch .octicon{padding-right:10px}.repository.compare.pull .comment.form .content:after,.repository.compare.pull .comment.form .content:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.compare.pull .comment.form .content:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.compare.pull .comment.form .content:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.compare.pull .comment.form .content:after{border-right-color:#fff}.repository .filter.dropdown .menu{margin-top:1px!important}.repository.commits .header .search input{font-weight:400;padding:5px 10px}.repository #commits-table thead th:first-of-type{padding-left:15px}.repository #commits-table thead .sha{width:140px}.repository #commits-table thead .shatd{text-align:center}.repository #commits-table td.sha .sha.label{margin:0}.repository #commits-table.ui.basic.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,0,.02)!important}.repository #commits-table td.sha .sha.label.isSigned,.repository #repo-files-table .sha.label.isSigned{border:1px solid #BBB}.repository #commits-table td.sha .sha.label.isSigned .detail.icon,.repository #repo-files-table .sha.label.isSigned .detail.icon{background:#FAFAFA;margin:-6px -10px -4px 0;padding:5px 3px 5px 6px;border-left:1px solid #BBB;border-top-left-radius:0;border-bottom-left-radius:0}.repository #commits-table td.sha .sha.label.isSigned.isVerified,.repository #repo-files-table .sha.label.isSigned.isVerified{border:1px solid #21BA45;background:#21BA4518}.repository #commits-table td.sha .sha.label.isSigned.isVerified .detail.icon,.repository #repo-files-table .sha.label.isSigned.isVerified .detail.icon{border-left:1px solid #21BA4580}.repository .diff-detail-box{margin:15px 0;line-height:30px}.repository .diff-detail-box ol{clear:both;padding-left:0;margin-top:5px;margin-bottom:28px}.repository .diff-detail-box ol li{list-style:none;padding-bottom:4px;margin-bottom:4px;border-bottom:1px dashed #DDD;padding-left:6px}.repository .diff-detail-box span.status{display:inline-block;width:12px;height:12px;margin-right:8px;vertical-align:middle}.repository .diff-detail-box span.status.modify{background-color:#f0db88}.repository .diff-detail-box span.status.add{background-color:#b4e2b4}.repository .diff-detail-box span.status.del{background-color:#e9aeae}.repository .diff-detail-box span.status.rename{background-color:#dad8ff}.repository .diff-detail-box .ui.right{margin-bottom:15px}.repository .diff-box .header{display:flex;align-items:center}.repository .diff-box .header .count{margin-right:12px;font-size:13px;flex:0 0 auto}.repository .diff-box .header .count .bar{background-color:#bd2c00;height:12px;width:40px;display:inline-block;margin:2px 4px 0 4px;vertical-align:text-top}.repository .diff-box .header .count .bar .add{background-color:#55a532;height:12px}.repository .diff-box .header .file{flex:1;color:#888;word-break:break-all}.repository .diff-box .header .button{margin:-5px 0 -5px 12px;padding:8px 10px;flex:0 0 auto}.repository .diff-file-box .header{background-color:#f7f7f7}.repository .diff-file-box .file-body.file-code .lines-num{text-align:right;color:#A7A7A7;background:#fafafa;width:1%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;vertical-align:top}.repository .diff-file-box .file-body.file-code .lines-num span.fold{display:block;text-align:center}.repository .diff-file-box .file-body.file-code .lines-num-old{border-right:1px solid #DDD}.repository .diff-file-box .code-diff{font-size:12px}.repository .diff-file-box .code-diff td{padding:0;padding-left:10px;border-top:none}.repository .diff-file-box .code-diff pre{margin:0}.repository .diff-file-box .code-diff .lines-num{border-color:#d4d4d5;border-right-width:1px;border-right-style:solid;padding:0 5px}.repository .diff-file-box .code-diff tbody tr td.halfwidth{width:49%}.repository .diff-file-box .code-diff tbody tr td.tag-code,.repository .diff-file-box .code-diff tbody tr.tag-code td{background-color:#F0F0F0!important;border-color:#D2CECE!important;padding-top:8px;padding-bottom:8px}.repository .diff-file-box .code-diff tbody tr .removed-code{background-color:#f99}.repository .diff-file-box .code-diff tbody tr .added-code{background-color:#9f9}.repository .diff-file-box .code-diff-unified tbody tr.del-code td{background-color:#ffe0e0!important;border-color:#f1c0c0!important}.repository .diff-file-box .code-diff-unified tbody tr.add-code td{background-color:#d6fcd6!important;border-color:#c1e9c1!important}.repository .diff-file-box .code-diff-split table,.repository .diff-file-box .code-diff-split tbody{width:100%}.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(2),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(4){background-color:#fafafa}.repository .diff-file-box .code-diff-split tbody tr td.del-code,.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(2){background-color:#ffe0e0!important;border-color:#f1c0c0!important}.repository .diff-file-box .code-diff-split tbody tr td.add-code,.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(4){background-color:#d6fcd6!important;border-color:#c1e9c1!important}.repository .diff-file-box .code-diff-split tbody tr td:nth-child(3){border-left-width:1px;border-left-style:solid}.repository .diff-file-box.file-content{clear:right}.repository .diff-file-box.file-content img{max-width:100%;padding:5px 5px 0 5px}.repository .code-view{overflow:auto;overflow-x:auto;overflow-y:hidden}.repository .repo-search-result{padding-top:10px;padding-bottom:10px}.repository .repo-search-result .lines-num a{color:inherit}.repository.quickstart .guide .item{padding:1em}.repository.quickstart .guide .item small{font-weight:400}.repository.quickstart .guide .clone.button:first-child{border-radius:.28571429rem 0 0 .28571429rem}.repository.quickstart .guide .ui.action.small.input{width:100%}.repository.quickstart .guide #repo-clone-url{border-radius:0;padding:5px 10px;font-size:1.2em}.repository.release #release-list{border-top:1px solid #DDD;margin-top:20px;padding-top:15px}.repository.release #release-list>li{list-style:none}.repository.release #release-list>li .detail,.repository.release #release-list>li .meta{padding-top:30px;padding-bottom:40px}.repository.release #release-list>li .meta{text-align:right;position:relative}.repository.release #release-list>li .meta .tag:not(.icon){display:block;margin-top:15px}.repository.release #release-list>li .meta .commit{display:block;margin-top:10px}.repository.release #release-list>li .detail{border-left:1px solid #DDD}.repository.release #release-list>li .detail .author img{margin-bottom:-3px}.repository.release #release-list>li .detail .download{margin-top:20px}.repository.release #release-list>li .detail .download>a .octicon{margin-left:5px;margin-right:5px}.repository.release #release-list>li .detail .download .list{padding-left:0;border-top:1px solid #eee}.repository.release #release-list>li .detail .download .list li{list-style:none;display:block;padding-top:8px;padding-bottom:8px;border-bottom:1px solid #eee}.repository.release #release-list>li .detail .dot{width:9px;height:9px;background-color:#ccc;z-index:999;position:absolute;display:block;left:-5px;top:40px;border-radius:6px;border:1px solid #FFF}.repository.new.release .target{min-width:500px}.repository.new.release .target #tag-name{margin-top:-4px}.repository.new.release .target .at{margin-left:-5px;margin-right:5px}.repository.new.release .target .dropdown.icon{margin:0;padding-top:3px}.repository.new.release .target .selection.dropdown{padding-top:10px;padding-bottom:10px}.repository.new.release .prerelease.field{margin-bottom:0}.repository.forks .list{margin-top:0}.repository.forks .list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px solid #DDD}.repository.forks .list .item .ui.avatar{float:left;margin-right:5px}.repository.forks .list .item .link{padding-top:5px}.repository.wiki.start .ui.segment{padding-top:70px;padding-bottom:100px}.repository.wiki.start .ui.segment .mega-octicon{font-size:48px}.repository.wiki.new .CodeMirror .CodeMirror-code{font-family:Consolas,monospace}.repository.wiki.new .CodeMirror .CodeMirror-code .cm-comment{background:inherit}.repository.wiki.new .editor-preview{background-color:#fff}.repository.wiki.view .choose.page{margin-top:-5px}.repository.wiki.view .ui.sub.header{text-transform:none}.repository.wiki.view>.markdown{padding:15px 30px}.repository.wiki.view>.markdown h1:first-of-type,.repository.wiki.view>.markdown h2:first-of-type,.repository.wiki.view>.markdown h3:first-of-type,.repository.wiki.view>.markdown h4:first-of-type,.repository.wiki.view>.markdown h5:first-of-type,.repository.wiki.view>.markdown h6:first-of-type{margin-top:0}@media only screen and (max-width:767px){.repository.wiki .dividing.header .stackable.grid .button{margin-top:2px;margin-bottom:2px}}.repository.settings.collaboration .collaborator.list{padding:0}.repository.settings.collaboration .collaborator.list>.item{margin:0;line-height:2em}.repository.settings.collaboration .collaborator.list>.item:not(:last-child){border-bottom:1px solid #DDD}.repository.settings.collaboration #repo-collab-form #search-user-box .results{left:7px}.repository.settings.collaboration #repo-collab-form .ui.button{margin-left:5px;margin-top:-3px}.repository.settings.branches .protected-branches .selection.dropdown{width:300px}.repository.settings.branches .protected-branches .item{border:1px solid #eaeaea;padding:10px 15px}.repository.settings.branches .protected-branches .item:not(:last-child){border-bottom:0}.repository.settings.branches .branch-protection .help{margin-left:26px;padding-top:0}.repository.settings.branches .branch-protection .fields{margin-left:20px;display:block}.repository.settings.branches .branch-protection .whitelist{margin-left:26px}.repository.settings.branches .branch-protection .whitelist .dropdown img{display:inline-block}.repository.settings.webhook .events .column{padding-bottom:0}.repository.settings.webhook .events .help{font-size:13px;margin-left:26px;padding-top:0}.repository .ui.attached.isSigned.isVerified:not(.positive){border-left:1px solid #A3C293;border-right:1px solid #A3C293}.repository .ui.attached.isSigned.isVerified.top:not(.positive){border-top:1px solid #A3C293}.repository .ui.attached.isSigned.isVerified:not(.positive):last-child{border-bottom:1px solid #A3C293}.repository .ui.segment.sub-menu{padding:7px;line-height:0}.repository .ui.segment.sub-menu .list{width:100%;display:flex}.repository .ui.segment.sub-menu .list .item{width:100%;border-radius:3px}.repository .ui.segment.sub-menu .list .item a{color:#000}.repository .ui.segment.sub-menu .list .item a:hover{color:#666}.repository .ui.segment.sub-menu .list .item.active{background:rgba(0,0,0,.05)}.repository .segment.reactions.dropdown .menu,.repository .select-reaction.dropdown .menu{right:0!important;left:auto!important}.repository .segment.reactions.dropdown .menu>.header,.repository .select-reaction.dropdown .menu>.header{margin:.75rem 0 .5rem}.repository .segment.reactions.dropdown .menu>.item,.repository .select-reaction.dropdown .menu>.item{float:left;padding:.5rem .5rem!important}.repository .segment.reactions.dropdown .menu>.item img.emoji,.repository .select-reaction.dropdown .menu>.item img.emoji{margin-right:0}.repository .segment.reactions{padding:.3em 1em}.repository .segment.reactions .ui.label{padding:.4em}.repository .segment.reactions .ui.label.disabled{cursor:default}.repository .segment.reactions .ui.label>img{height:1.5em!important}.repository .segment.reactions .select-reaction{float:none}.repository .segment.reactions .select-reaction:not(.active) a{display:none}.repository .segment.reactions:hover .select-reaction a{display:block}.user-cards .list{padding:0}.user-cards .list .item{list-style:none;width:32%;margin:10px 10px 10px 0;padding-bottom:14px;float:left}.user-cards .list .item .avatar{width:48px;height:48px;float:left;display:block;margin-right:10px}.user-cards .list .item .name{margin-top:0;margin-bottom:0;font-weight:400}.user-cards .list .item .meta{margin-top:5px}#search-repo-box .results .result .image,#search-user-box .results .result .image{float:left;margin-right:8px;width:2em;height:2em}#search-repo-box .results .result .content,#search-user-box .results .result .content{margin:6px 0}#issue-actions{display:none}.issue.list{list-style:none;padding-top:15px}.issue.list>.item{padding-top:15px;padding-bottom:10px;border-bottom:1px dashed #AAA}.issue.list>.item .title{color:#444;font-size:15px;font-weight:700;margin:0 6px}.issue.list>.item .title:hover{color:#000}.issue.list>.item .comment{padding-right:10px;color:#666}.issue.list>.item .desc{padding-top:5px;color:#999}.issue.list>.item .desc .checklist{padding-left:5px}.issue.list>.item .desc .checklist .progress-bar{margin-left:2px;width:80px;height:6px;display:inline-block;background-color:#eee;overflow:hidden;border-radius:3px;vertical-align:2px!important}.issue.list>.item .desc .checklist .progress-bar .progress{background-color:#ccc;display:block;height:100%}.issue.list>.item .desc a.milestone{padding-left:5px;color:#999!important}.issue.list>.item .desc a.milestone:hover{color:#000!important}.issue.list>.item .desc .assignee{margin-top:-5px;margin-right:5px}.issue.list>.item .desc .overdue{color:red}.page.buttons{padding-top:15px}.ui.form .dropzone{width:100%;margin-bottom:10px;border:2px dashed #0087F7;box-shadow:none!important}.ui.form .dropzone .dz-error-message{top:140px}.settings .content{margin-top:2px}.settings .content .segment,.settings .content>.header{box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.settings .list>.item .green{color:#21BA45!important}.settings .list>.item:not(:first-child){border-top:1px solid #eaeaea;padding:1rem;margin:15px -1rem -1rem -1rem}.settings .list>.item>.mega-octicon{display:table-cell}.settings .list>.item>.mega-octicon+.content{display:table-cell;padding:0 0 0 .5em;vertical-align:top}.settings .list>.item .info{margin-top:10px}.settings .list>.item .info .tab.segment{border:none;padding:10px 0 0}.settings .list.key .meta{padding-top:5px;color:#666}.settings .list.email>.item:not(:first-child){min-height:60px}.settings .list.collaborator>.item{padding:0}.ui.vertical.menu .header.item{font-size:1.1em;background:#f0f0f0}.edit-label.modal .form .column,.new-label.segment .form .column{padding-right:0}.edit-label.modal .form .buttons,.new-label.segment .form .buttons{margin-left:auto;padding-top:15px}.edit-label.modal .form .color.picker.column,.new-label.segment .form .color.picker.column{width:auto}.edit-label.modal .form .color.picker.column .color-picker,.new-label.segment .form .color.picker.column .color-picker{height:35px;width:auto;padding-left:30px}.edit-label.modal .form .minicolors-swatch.minicolors-sprite,.new-label.segment .form .minicolors-swatch.minicolors-sprite{top:10px;left:10px;width:15px;height:15px}.edit-label.modal .form .precolors,.new-label.segment .form .precolors{padding-left:0;padding-right:0;margin:3px 10px auto 10px;width:120px}.edit-label.modal .form .precolors .color,.new-label.segment .form .precolors .color{float:left;width:15px;height:15px}#avatar-arrow:after,#avatar-arrow:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}#avatar-arrow:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}#avatar-arrow:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}#delete-repo-modal .ui.message,#transfer-repo-modal .ui.message{width:100%!important}.tab-size-1{tab-size:1!important;-moz-tab-size:1!important}.tab-size-2{tab-size:2!important;-moz-tab-size:2!important}.tab-size-3{tab-size:3!important;-moz-tab-size:3!important}.tab-size-4{tab-size:4!important;-moz-tab-size:4!important}.tab-size-5{tab-size:5!important;-moz-tab-size:5!important}.tab-size-6{tab-size:6!important;-moz-tab-size:6!important}.tab-size-7{tab-size:7!important;-moz-tab-size:7!important}.tab-size-8{tab-size:8!important;-moz-tab-size:8!important}.tab-size-9{tab-size:9!important;-moz-tab-size:9!important}.tab-size-10{tab-size:10!important;-moz-tab-size:10!important}.tab-size-11{tab-size:11!important;-moz-tab-size:11!important}.tab-size-12{tab-size:12!important;-moz-tab-size:12!important}.tab-size-13{tab-size:13!important;-moz-tab-size:13!important}.tab-size-14{tab-size:14!important;-moz-tab-size:14!important}.tab-size-15{tab-size:15!important;-moz-tab-size:15!important}.tab-size-16{tab-size:16!important;-moz-tab-size:16!important}.stats-table{display:table;width:100%}.stats-table .table-cell{display:table-cell}.stats-table .table-cell.tiny{height:.5em}tbody.commit-list{vertical-align:baseline}.commit-body{white-space:pre-wrap}@media only screen and (max-width:767px){.ui.stackable.menu.mobile--margin-between-items>.item{margin-top:5px;margin-bottom:5px}.ui.stackable.menu.mobile--no-negative-margins{margin-left:0;margin-right:0}}#topic_edit{margin-top:5px;display:none}#repo-topic{margin-top:5px}.CodeMirror{font:14px Consolas,"Liberation Mono",Menlo,Courier,monospace}.CodeMirror.cm-s-default{border-radius:3px;padding:0!important}.CodeMirror .cm-comment{background:inherit!important}.repository.file.editor .tab[data-tab=write]{padding:0!important}.repository.file.editor .tab[data-tab=write] .editor-toolbar{border:none!important}.repository.file.editor .tab[data-tab=write] .CodeMirror{border-left:none;border-right:none;border-bottom:none}.organization{padding-top:15px;padding-bottom:80px}.organization .head .ui.header .text{vertical-align:middle;font-size:1.6rem;margin-left:15px}.organization .head .ui.header .ui.right{margin-top:5px}.organization.new.org form{margin:auto}.organization.new.org form .ui.message{text-align:center}@media only screen and (min-width:768px){.organization.new.org form{width:800px!important}.organization.new.org form .header{padding-left:280px!important}.organization.new.org form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.organization.new.org form .help{margin-left:265px!important}.organization.new.org form .optional .title{margin-left:250px!important}.organization.new.org form input,.organization.new.org form textarea{width:50%!important}}@media only screen and (max-width:767px){.organization.new.org form .optional .title{margin-left:15px}.organization.new.org form .inline.field>label{display:block}}.organization.new.org form .header{padding-left:0!important;text-align:center}.organization.options input{min-width:300px}.organization.profile #org-avatar{width:100px;height:100px;margin-right:15px}.organization.profile #org-info .ui.header{font-size:36px;margin-bottom:0}.organization.profile #org-info .desc{font-size:16px;margin-bottom:10px}.organization.profile #org-info .meta .item{display:inline-block;margin-right:10px}.organization.profile #org-info .meta .item .icon{margin-right:5px}.organization.profile .ui.top.header .ui.right{margin-top:0}.organization.profile .teams .item{padding:10px 15px}.organization.profile .members .ui.avatar,.organization.teams .members .ui.avatar{width:48px;height:48px;margin-right:5px}.organization.invite #invite-box{margin:auto;margin-top:50px;width:500px!important}.organization.invite #invite-box #search-user-box input{margin-left:0;width:300px}.organization.invite #invite-box .ui.button{margin-left:5px;margin-top:-3px}.organization.members .list .item{margin-left:0;margin-right:0;border-bottom:1px solid #eee}.organization.members .list .item .ui.avatar{width:48px;height:48px}.organization.members .list .item .meta{line-height:24px}.organization.teams .detail .item{padding:10px 15px}.organization.teams .detail .item:not(:last-child){border-bottom:1px solid #eee}.organization.teams .members .item,.organization.teams .repositories .item{padding:10px 20px;line-height:32px}.organization.teams .members .item:not(:last-child),.organization.teams .repositories .item:not(:last-child){border-bottom:1px solid #DDD}.organization.teams .members .item .button,.organization.teams .repositories .item .button{padding:9px 10px}.organization.teams #add-member-form input,.organization.teams #add-repo-form input{margin-left:0}.organization.teams #add-member-form .ui.button,.organization.teams #add-repo-form .ui.button{margin-left:5px;margin-top:-3px}.user:not(.icon){padding-top:15px;padding-bottom:80px}.user.profile .ui.card .username{display:block}.user.profile .ui.card .extra.content{padding:0}.user.profile .ui.card .extra.content ul{margin:0;padding:0}.user.profile .ui.card .extra.content ul li{padding:10px;list-style:none}.user.profile .ui.card .extra.content ul li:not(:last-child){border-bottom:1px solid #eaeaea}.user.profile .ui.card .extra.content ul li .octicon{margin-left:1px;margin-right:5px}.user.profile .ui.card .extra.content ul li.follow .ui.button{width:100%}.user.profile .ui.repository.list{margin-top:25px}.user.followers .header.name{font-size:20px;line-height:24px;vertical-align:middle}.user.followers .follow .ui.button{padding:8px 15px}.user.notification .octicon{float:left;font-size:2em}.user.notification .content{float:left;margin-left:7px}.user.notification table form{display:inline-block}.user.notification table button{padding:3px 3px 3px 5px}.user.notification table tr{cursor:pointer}.user.notification .octicon.green{color:#21ba45}.user.notification .octicon.red{color:#d01919}.user.notification .octicon.purple{color:#a333c8}.user.notification .octicon.blue{color:#2185d0}.user.link-account:not(.icon){padding-top:15px;padding-bottom:5px}.user.settings .iconFloat{float:left}.dashboard{padding-top:15px;padding-bottom:80px}.dashboard.feeds .context.user.menu,.dashboard.issues .context.user.menu{z-index:101;min-width:200px}.dashboard.feeds .context.user.menu .ui.header,.dashboard.issues .context.user.menu .ui.header{font-size:1rem;text-transform:none}.dashboard.feeds .filter.menu .item,.dashboard.issues .filter.menu .item{text-align:left}.dashboard.feeds .filter.menu .item .text,.dashboard.issues .filter.menu .item .text{height:16px;vertical-align:middle}.dashboard.feeds .filter.menu .item .text.truncate,.dashboard.issues .filter.menu .item .text.truncate{width:85%}.dashboard.feeds .filter.menu .item .floating.label,.dashboard.issues .filter.menu .item .floating.label{top:7px;left:90%;width:15%}.dashboard.feeds .filter.menu .jump.item,.dashboard.issues .filter.menu .jump.item{margin:1px;padding-right:0}.dashboard.feeds .filter.menu .menu,.dashboard.issues .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.dashboard.feeds .right.stackable.menu>.item.active,.dashboard.issues .right.stackable.menu>.item.active{color:#d9453d}.dashboard .dashboard-repos{margin:0 1px}.feeds .news>.ui.grid{margin-left:auto;margin-right:auto}.feeds .news .ui.avatar{margin-top:13px}.feeds .news p{line-height:1em}.feeds .news .time-since{font-size:13px}.feeds .news .issue.title{width:80%}.feeds .news .push.news .content ul{font-size:13px;list-style:none;padding-left:10px}.feeds .news .push.news .content ul img{margin-bottom:-2px}.feeds .news .push.news .content ul .text.truncate{width:80%;margin-bottom:-5px}.feeds .news .commit-id{font-family:Consolas,monospace}.feeds .news code{padding:1px;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px;word-break:break-all}.feeds .list .header .ui.label{margin-top:-4px;padding:4px 5px;font-weight:400}.feeds .list .header .plus.icon{margin-top:5px}.feeds .list ul{list-style:none;margin:0;padding-left:0}.feeds .list ul li:not(:last-child){border-bottom:1px solid #EAEAEA}.feeds .list ul li.private{background-color:#fcf8e9}.feeds .list ul li a{padding:6px 1.2em;display:block}.feeds .list ul li a .octicon{color:#888}.feeds .list ul li a .octicon.rear{font-size:15px}.feeds .list ul li a .star-num{font-size:12px}.feeds .list .repo-owner-name-list .item-name{max-width:70%;margin-bottom:-4px}.feeds .list #collaborative-repo-list .owner-and-repo{max-width:80%;margin-bottom:-5px}.feeds .list #collaborative-repo-list .owner-name{max-width:120px;margin-bottom:-5px}.admin{padding-top:15px;padding-bottom:80px}.admin .table.segment{padding:0;font-size:13px}.admin .table.segment:not(.striped){padding-top:5px}.admin .table.segment:not(.striped) thead th:last-child{padding-right:5px!important}.admin .table.segment th{padding-top:5px;padding-bottom:5px}.admin .table.segment:not(.select) td:first-of-type,.admin .table.segment:not(.select) th:first-of-type{padding-left:15px!important}.admin .ui.header,.admin .ui.segment{box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.admin.user .email{max-width:200px}.admin dl.admin-dl-horizontal{padding:20px;margin:0}.admin dl.admin-dl-horizontal dd{margin-left:275px}.admin dl.admin-dl-horizontal dt{font-weight:bolder;float:left;width:285px;clear:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin.config #test-mail-btn{margin-left:5px}.explore{padding-top:15px;padding-bottom:80px}.explore .navbar{justify-content:center;padding-top:15px!important;margin-top:-15px!important;margin-bottom:15px!important;background-color:#FAFAFA!important;border-width:1px!important}.explore .navbar .octicon{width:16px;text-align:center;margin-right:5px}.ui.repository.list .item{padding-bottom:25px}.ui.repository.list .item:not(:first-child){border-top:1px solid #eee;padding-top:25px}.ui.repository.list .item .ui.header{font-size:1.5rem;padding-bottom:10px}.ui.repository.list .item .ui.header .name{word-break:break-all}.ui.repository.list .item .ui.header .metas{color:#888;font-size:14px;font-weight:400}.ui.repository.list .item .ui.header .metas span:not(:last-child){margin-right:5px}.ui.repository.list .item .time{font-size:12px;color:grey}.ui.repository.branches .time{font-size:12px;color:grey}.ui.user.list .item{padding-bottom:25px}.ui.user.list .item:not(:first-child){border-top:1px solid #eee;padding-top:25px}.ui.user.list .item .ui.avatar.image{width:40px;height:40px}.ui.user.list .item .description{margin-top:5px}.ui.user.list .item .description .octicon:not(:first-child){margin-left:5px}.ui.user.list .item .description a{color:#333}.ui.user.list .item .description a:hover{text-decoration:underline} \ No newline at end of file +.tribute-container{box-shadow:0 1px 3px 1px #c7c7c7}.tribute-container ul{background:#fff}.tribute-container li{padding:8px 12px;border-bottom:1px solid #dcdcdc}.tribute-container li img{display:inline-block;vertical-align:middle;width:28px;height:28px;margin-right:5px}.tribute-container li span.fullname{font-weight:400;font-size:.8rem;margin-left:3px}.tribute-container li.highlight,.tribute-container li:hover{background:#2185D0;color:#fff}.emoji{width:1.5em;height:1.5em;display:inline-block;background-size:contain}body{font-family:Lato,"Segoe UI","Microsoft YaHei",Arial,Helvetica,sans-serif!important;background-color:#fff;overflow-y:scroll;-webkit-font-smoothing:antialiased}img{border-radius:3px}.rounded{border-radius:.28571429rem!important}code,pre{font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace}code.raw,pre.raw{padding:7px 12px;margin:10px 0;background-color:#f8f8f8;border:1px solid #ddd;border-radius:3px;font-size:13px;line-height:1.5;overflow:auto}code.wrap,pre.wrap{white-space:pre-wrap;-ms-word-break:break-all;word-break:break-all;overflow-wrap:break-word;word-wrap:break-word}.dont-break-out{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.full.height{padding:0;margin:0 0 -40px 0;min-height:100%}.following.bar{z-index:900;left:0;width:100%;margin:0}.following.bar.light{background-color:#fff;border-bottom:1px solid #DDD;box-shadow:0 2px 3px rgba(0,0,0,.04)}.following.bar .column .menu{margin-top:0}.following.bar .top.menu a.item.brand{padding-left:0}.following.bar .brand .ui.mini.image{width:30px}.following.bar .top.menu .dropdown.item.active,.following.bar .top.menu .dropdown.item:hover,.following.bar .top.menu a.item:hover{background-color:transparent}.following.bar .top.menu a.item:hover{color:rgba(0,0,0,.45)}.following.bar .top.menu .menu{z-index:900}.following.bar .octicon{margin-right:.75em}.following.bar .octicon.fitted{margin-right:0}.following.bar .searchbox{background-color:#f4f4f4!important}.following.bar .searchbox:focus{background-color:#e9e9e9!important}.following.bar .text .octicon{width:16px;text-align:center}@media only screen and (max-width:767px){.following.bar #navbar:not(.shown)>:not(:first-child){display:none}}.right.stackable.menu{margin-left:auto;display:flex;display:-ms-flexbox;-ms-flex-align:inherit;align-items:inherit;-ms-flex-direction:inherit;flex-direction:inherit}.ui.left{float:left}.ui.right{float:right}.ui.button,.ui.menu .item{-moz-user-select:auto;-ms-user-select:auto;-webkit-user-select:auto;user-select:auto}.ui.container.fluid.padded{padding:0 10px 0 10px}.ui.form .ui.button{font-weight:400}.ui.floating.label{z-index:10}.ui.menu,.ui.segment,.ui.vertical.menu{box-shadow:none}.ui .menu:not(.vertical) .item>.button.compact{padding:.58928571em 1.125em}.ui .menu:not(.vertical) .item>.button.small{font-size:.92857143rem}.ui.dropdown .menu>.item>.floating.label{z-index:11}.ui.dropdown .menu .menu>.item>.floating.label{z-index:21}.ui .text.red{color:#d95c5c!important}.ui .text.red a{color:#d95c5c!important}.ui .text.red a:hover{color:#E67777!important}.ui .text.blue{color:#428bca!important}.ui .text.blue a{color:#15c!important}.ui .text.blue a:hover{color:#428bca!important}.ui .text.black{color:#444}.ui .text.black:hover{color:#000}.ui .text.grey{color:#767676!important}.ui .text.grey a{color:#444!important}.ui .text.grey a:hover{color:#000!important}.ui .text.light.grey{color:#888!important}.ui .text.green{color:#6cc644!important}.ui .text.purple{color:#6e5494!important}.ui .text.yellow{color:#FBBD08!important}.ui .text.gold{color:#a1882b!important}.ui .text.left{text-align:left!important}.ui .text.right{text-align:right!important}.ui .text.small{font-size:.75em}.ui .text.normal{font-weight:400}.ui .text.bold{font-weight:700}.ui .text.italic{font-style:italic}.ui .text.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.ui .text.thin{font-weight:400}.ui .text.middle{vertical-align:middle}.ui .message{text-align:center}.ui .header>i+.content{padding-left:.75rem;vertical-align:middle}.ui .warning.header{background-color:#F9EDBE!important;border-color:#F0C36D}.ui .warning.segment{border-color:#F0C36D}.ui .info.segment{border:1px solid #c5d5dd}.ui .info.segment.top{background-color:#e6f1f6!important}.ui .info.segment.top h3,.ui .info.segment.top h4{margin-top:0}.ui .info.segment.top h3:last-child{margin-top:4px}.ui .info.segment.top>:last-child{margin-bottom:0}.ui .normal.header{font-weight:400}.ui .avatar.image{border-radius:3px}.ui .form .fake{display:none!important}.ui .form .sub.field{margin-left:25px}.ui .sha.label{font-family:Consolas,Menlo,Monaco,"Lucida Console",monospace;font-size:13px;padding:6px 10px 4px 10px;font-weight:400;margin:0 6px}.ui.status.buttons .octicon{margin-right:4px}.ui.inline.delete-button{padding:8px 15px;font-weight:400}.ui .background.red{background-color:#d95c5c!important}.ui .background.blue{background-color:#428bca!important}.ui .background.black{background-color:#444}.ui .background.grey{background-color:#767676!important}.ui .background.light.grey{background-color:#888!important}.ui .background.green{background-color:#6cc644!important}.ui .background.purple{background-color:#6e5494!important}.ui .background.yellow{background-color:#FBBD08!important}.ui .background.gold{background-color:#a1882b!important}.ui .branch-tag-choice{line-height:20px}.overflow.menu .items{max-height:300px;overflow-y:auto}.overflow.menu .items .item{position:relative;cursor:pointer;display:block;border:none;height:auto;border-top:none;line-height:1em;color:rgba(0,0,0,.8);padding:.71428571em 1.14285714em!important;font-size:1rem;text-transform:none;font-weight:400;box-shadow:none;-webkit-touch-callout:none}.overflow.menu .items .item.active{font-weight:700}.overflow.menu .items .item:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.8);z-index:13}.scrolling.menu .item.selected{font-weight:700!important}footer{height:40px;background-color:#fff;border-top:1px solid #d6d6d6;clear:both;width:100%;color:#888}footer .container{padding-top:10px}footer .container .fa{width:16px;text-align:center;color:#428bca}footer .container .links>*{border-left:1px solid #d6d6d6;padding-left:8px;margin-left:5px}footer .container .links>:first-child{border-left:none}footer .ui.language .menu{max-height:500px;overflow-y:auto;margin-bottom:7px}.hide{display:none}.center{text-align:center}.img-1{width:2px!important;height:2px!important}.img-2{width:4px!important;height:4px!important}.img-3{width:6px!important;height:6px!important}.img-4{width:8px!important;height:8px!important}.img-5{width:10px!important;height:10px!important}.img-6{width:12px!important;height:12px!important}.img-7{width:14px!important;height:14px!important}.img-8{width:16px!important;height:16px!important}.img-9{width:18px!important;height:18px!important}.img-10{width:20px!important;height:20px!important}.img-11{width:22px!important;height:22px!important}.img-12{width:24px!important;height:24px!important}.img-13{width:26px!important;height:26px!important}.img-14{width:28px!important;height:28px!important}.img-15{width:30px!important;height:30px!important}.img-16{width:32px!important;height:32px!important}@media only screen and (min-width:768px){.mobile-only,.ui.button.mobile-only{display:none}.sr-mobile-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}}@media only screen and (max-width:767px){.not-mobile{display:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}@media only screen and (max-width:991px) and (min-width:768px){.ui.container{width:95%}}.hljs{background:inherit!important;padding:0!important}.ui.menu.new-menu{justify-content:center!important;padding-top:15px!important;margin-top:-15px!important;margin-bottom:15px!important;background-color:#FAFAFA!important;border-width:1px!important}@media only screen and (max-width:1200px){.ui.menu.new-menu{overflow-x:auto!important;justify-content:left!important;padding-bottom:5px}.ui.menu.new-menu::-webkit-scrollbar{height:8px;display:none}.ui.menu.new-menu:hover::-webkit-scrollbar{display:block}.ui.menu.new-menu::-webkit-scrollbar-track{background:rgba(0,0,0,.01)}.ui.menu.new-menu::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2)}.ui.menu.new-menu:after{position:absolute;margin-top:-15px;display:block;background-image:linear-gradient(to right,rgba(255,255,255,0),#fff 100%);content:' ';right:0;height:53px;z-index:1000;width:60px;clear:none;visibility:visible}.ui.menu.new-menu a.item:last-child{padding-right:30px!important}}[v-cloak]{display:none!important}.repos-search{padding-bottom:0!important}.repos-filter{margin-top:0!important;border-bottom-width:0!important;margin-bottom:2px!important}.markdown:not(code){overflow:hidden;font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6!important;word-wrap:break-word}.markdown:not(code).ui.segment{padding:3em}.markdown:not(code).file-view{padding:2em 2em 2em!important}.markdown:not(code)>:first-child{margin-top:0!important}.markdown:not(code)>:last-child{margin-bottom:0!important}.markdown:not(code) a:not([href]){color:inherit;text-decoration:none}.markdown:not(code) .absent{color:#c00}.markdown:not(code) .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown:not(code) .anchor:focus{outline:0}.markdown:not(code) h1,.markdown:not(code) h2,.markdown:not(code) h3,.markdown:not(code) h4,.markdown:not(code) h5,.markdown:not(code) h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown:not(code) h1:first-of-type,.markdown:not(code) h2:first-of-type,.markdown:not(code) h3:first-of-type,.markdown:not(code) h4:first-of-type,.markdown:not(code) h5:first-of-type,.markdown:not(code) h6:first-of-type{margin-top:0!important}.markdown:not(code) h1 .octicon-link,.markdown:not(code) h2 .octicon-link,.markdown:not(code) h3 .octicon-link,.markdown:not(code) h4 .octicon-link,.markdown:not(code) h5 .octicon-link,.markdown:not(code) h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown:not(code) h1:hover .anchor,.markdown:not(code) h2:hover .anchor,.markdown:not(code) h3:hover .anchor,.markdown:not(code) h4:hover .anchor,.markdown:not(code) h5:hover .anchor,.markdown:not(code) h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown:not(code) h1:hover .anchor .octicon-link,.markdown:not(code) h2:hover .anchor .octicon-link,.markdown:not(code) h3:hover .anchor .octicon-link,.markdown:not(code) h4:hover .anchor .octicon-link,.markdown:not(code) h5:hover .anchor .octicon-link,.markdown:not(code) h6:hover .anchor .octicon-link{display:inline-block}.markdown:not(code) h1 code,.markdown:not(code) h1 tt,.markdown:not(code) h2 code,.markdown:not(code) h2 tt,.markdown:not(code) h3 code,.markdown:not(code) h3 tt,.markdown:not(code) h4 code,.markdown:not(code) h4 tt,.markdown:not(code) h5 code,.markdown:not(code) h5 tt,.markdown:not(code) h6 code,.markdown:not(code) h6 tt{font-size:inherit}.markdown:not(code) h1{padding-bottom:.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown:not(code) h1 .anchor{line-height:1}.markdown:not(code) h2{padding-bottom:.3em;font-size:1.75em;line-height:1.225;border-bottom:1px solid #eee}.markdown:not(code) h2 .anchor{line-height:1}.markdown:not(code) h3{font-size:1.5em;line-height:1.43}.markdown:not(code) h3 .anchor{line-height:1.2}.markdown:not(code) h4{font-size:1.25em}.markdown:not(code) h4 .anchor{line-height:1.2}.markdown:not(code) h5{font-size:1em}.markdown:not(code) h5 .anchor{line-height:1.1}.markdown:not(code) h6{font-size:1em;color:#777}.markdown:not(code) h6 .anchor{line-height:1.1}.markdown:not(code) blockquote,.markdown:not(code) dl,.markdown:not(code) ol,.markdown:not(code) p,.markdown:not(code) pre,.markdown:not(code) table,.markdown:not(code) ul{margin-top:0;margin-bottom:16px}.markdown:not(code) blockquote{margin-left:0}.markdown:not(code) hr{height:4px;padding:0;margin:16px 0;background-color:#e7e7e7;border:0 none}.markdown:not(code) ol,.markdown:not(code) ul{padding-left:2em}.markdown:not(code) ol.no-list,.markdown:not(code) ul.no-list{padding:0;list-style-type:none}.markdown:not(code) ol ol,.markdown:not(code) ol ul,.markdown:not(code) ul ol,.markdown:not(code) ul ul{margin-top:0;margin-bottom:0}.markdown:not(code) ol ol,.markdown:not(code) ul ol{list-style-type:lower-roman}.markdown:not(code) li>p{margin-top:0}.markdown:not(code) dl{padding:0}.markdown:not(code) dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown:not(code) dl dd{padding:0 16px;margin-bottom:16px}.markdown:not(code) blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown:not(code) blockquote>:first-child{margin-top:0}.markdown:not(code) blockquote>:last-child{margin-bottom:0}.markdown:not(code) table{width:auto;overflow:auto;word-break:normal;word-break:keep-all}.markdown:not(code) table th{font-weight:700}.markdown:not(code) table td,.markdown:not(code) table th{padding:6px 13px!important;border:1px solid #ddd!important}.markdown:not(code) table tr{background-color:#fff;border-top:1px solid #ccc}.markdown:not(code) table tr:nth-child(2n){background-color:#f8f8f8}.markdown:not(code) img{max-width:100%;box-sizing:border-box}.markdown:not(code) .emoji{max-width:none}.markdown:not(code) span.frame{display:block;overflow:hidden}.markdown:not(code) span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown:not(code) span.frame span img{display:block;float:left}.markdown:not(code) span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown:not(code) span.align-center{display:block;overflow:hidden;clear:both}.markdown:not(code) span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown:not(code) span.align-center span img{margin:0 auto;text-align:center}.markdown:not(code) span.align-right{display:block;overflow:hidden;clear:both}.markdown:not(code) span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown:not(code) span.align-right span img{margin:0;text-align:right}.markdown:not(code) span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown:not(code) span.float-left span{margin:13px 0 0}.markdown:not(code) span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown:not(code) span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown:not(code) code,.markdown:not(code) tt{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown:not(code) code:after,.markdown:not(code) code:before,.markdown:not(code) tt:after,.markdown:not(code) tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown:not(code) code br,.markdown:not(code) tt br{display:none}.markdown:not(code) del code{text-decoration:inherit}.markdown:not(code) pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown:not(code) .highlight{margin-bottom:16px}.markdown:not(code) .highlight pre,.markdown:not(code) pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown:not(code) .highlight pre{margin-bottom:0;word-break:normal}.markdown:not(code) pre{word-wrap:normal}.markdown:not(code) pre code,.markdown:not(code) pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown:not(code) pre code:after,.markdown:not(code) pre code:before,.markdown:not(code) pre tt:after,.markdown:not(code) pre tt:before{content:normal}.markdown:not(code) kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown:not(code) input[type=checkbox]{vertical-align:middle!important}.markdown:not(code) .csv-data td,.markdown:not(code) .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown:not(code) .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown:not(code) .csv-data tr{border-top:0}.markdown:not(code) .csv-data th{font-weight:700;background:#f8f8f8;border-top:0}.markdown:not(code) .ui.list .list,.markdown:not(code) ol.ui.list ol,.markdown:not(code) ul.ui.list ul{padding-left:2em}.home{padding-bottom:80px}.home .logo{max-width:220px}.home .hero h1,.home .hero h2{font-family:'PT Sans Narrow',sans-serif,'Microsoft YaHei'}@media only screen and (max-width:767px){.home .hero h1{font-size:3.5em}.home .hero h2{font-size:2em}}@media only screen and (min-width:768px){.home .hero h1{font-size:5.5em}.home .hero h2{font-size:3em}}.home .hero .octicon{color:#5aa509;font-size:40px;width:50px}.home .hero.header{font-size:20px}.home p.large{font-size:16px}.home .stackable{padding-top:30px}.home a{color:#5aa509}.signup{padding-top:15px;padding-bottom:80px}.install{padding-top:45px;padding-bottom:80px}.install form label{text-align:right;width:320px!important}.install form input{width:35%!important}.install form .field{text-align:left}.install form .field .help{margin-left:335px!important}.install form .field.optional .title{margin-left:38%}.install .ui .checkbox{margin-left:40%!important}.install .ui .checkbox label{width:auto!important}.form .help{color:#999;padding-top:.6em;padding-bottom:.6em;display:inline-block}.ui.attached.header{background:#f0f0f0}.ui.attached.header .right{margin-top:-5px}.ui.attached.header .right .button{padding:8px 10px;font-weight:400}#create-page-form form{margin:auto}#create-page-form form .ui.message{text-align:center}@media only screen and (min-width:768px){#create-page-form form{width:800px!important}#create-page-form form .header{padding-left:280px!important}#create-page-form form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}#create-page-form form .help{margin-left:265px!important}#create-page-form form .optional .title{margin-left:250px!important}#create-page-form form input,#create-page-form form textarea{width:50%!important}}@media only screen and (max-width:767px){#create-page-form form .optional .title{margin-left:15px}#create-page-form form .inline.field>label{display:block}}.signin .oauth2 div{display:inline-block}.signin .oauth2 div p{margin:10px 5px 0 0;float:left}.signin .oauth2 a{margin-right:3px}.signin .oauth2 a:last-child{margin-right:0}.signin .oauth2 img{width:32px;height:32px}.signin .oauth2 img.openidConnect{width:auto}@media only screen and (min-width:768px){.g-recaptcha{margin:0 auto!important;width:304px;padding-left:30px}}@media screen and (max-height:575px){#rc-imageselect,.g-recaptcha{transform:scale(.77);-webkit-transform:scale(.77);transform-origin:0 0;-webkit-transform-origin:0 0}}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{margin:auto}.user.activate form .ui.message,.user.forgot.password form .ui.message,.user.reset.password form .ui.message,.user.signin form .ui.message,.user.signup form .ui.message{text-align:center}@media only screen and (min-width:768px){.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{width:800px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.signin form .header,.user.signup form .header{padding-left:280px!important}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.user.activate form .help,.user.forgot.password form .help,.user.reset.password form .help,.user.signin form .help,.user.signup form .help{margin-left:265px!important}.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:250px!important}.user.activate form input,.user.activate form textarea,.user.forgot.password form input,.user.forgot.password form textarea,.user.reset.password form input,.user.reset.password form textarea,.user.signin form input,.user.signin form textarea,.user.signup form input,.user.signup form textarea{width:50%!important}}@media only screen and (max-width:767px){.user.activate form .optional .title,.user.forgot.password form .optional .title,.user.reset.password form .optional .title,.user.signin form .optional .title,.user.signup form .optional .title{margin-left:15px}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{display:block}}.user.activate form,.user.forgot.password form,.user.reset.password form,.user.signin form,.user.signup form{width:700px!important}.user.activate form .header,.user.forgot.password form .header,.user.reset.password form .header,.user.signin form .header,.user.signup form .header{padding-left:0!important;text-align:center}.user.activate form .inline.field>label,.user.forgot.password form .inline.field>label,.user.reset.password form .inline.field>label,.user.signin form .inline.field>label,.user.signup form .inline.field>label{width:200px!important}.repository.new.fork form,.repository.new.migrate form,.repository.new.repo form{margin:auto}.repository.new.fork form .ui.message,.repository.new.migrate form .ui.message,.repository.new.repo form .ui.message{text-align:center}@media only screen and (min-width:768px){.repository.new.fork form,.repository.new.migrate form,.repository.new.repo form{width:800px!important}.repository.new.fork form .header,.repository.new.migrate form .header,.repository.new.repo form .header{padding-left:280px!important}.repository.new.fork form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.repo form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.repository.new.fork form .help,.repository.new.migrate form .help,.repository.new.repo form .help{margin-left:265px!important}.repository.new.fork form .optional .title,.repository.new.migrate form .optional .title,.repository.new.repo form .optional .title{margin-left:250px!important}.repository.new.fork form input,.repository.new.fork form textarea,.repository.new.migrate form input,.repository.new.migrate form textarea,.repository.new.repo form input,.repository.new.repo form textarea{width:50%!important}}@media only screen and (max-width:767px){.repository.new.fork form .optional .title,.repository.new.migrate form .optional .title,.repository.new.repo form .optional .title{margin-left:15px}.repository.new.fork form .inline.field>label,.repository.new.migrate form .inline.field>label,.repository.new.repo form .inline.field>label{display:block}}.repository.new.fork form .dropdown .dropdown.icon,.repository.new.migrate form .dropdown .dropdown.icon,.repository.new.repo form .dropdown .dropdown.icon{margin-top:-7px!important}.repository.new.fork form .dropdown .text,.repository.new.migrate form .dropdown .text,.repository.new.repo form .dropdown .text{margin-right:0!important}.repository.new.fork form .dropdown .text i,.repository.new.migrate form .dropdown .text i,.repository.new.repo form .dropdown .text i{margin-right:0!important}.repository.new.fork form .header,.repository.new.migrate form .header,.repository.new.repo form .header{padding-left:0!important;text-align:center}.repository.new.repo .ui.form .selection.dropdown:not(.owner){width:50%!important}@media only screen and (min-width:768px){.repository.new.repo .ui.form #auto-init{margin-left:265px!important}}.new.webhook form .help{margin-left:25px}.new.webhook .events.fields .column{padding-left:40px}.githook textarea{font-family:monospace}.repository{padding-top:15px;padding-bottom:80px}.repository .header-grid{padding-top:5px;padding-bottom:5px}.repository .header-grid .ui.compact.menu{margin-left:1rem}.repository .header-grid .ui.header{margin-top:0}.repository .header-grid .mega-octicon{width:30px;font-size:30px}.repository .header-grid .ui.huge.breadcrumb{font-weight:400;font-size:1.7rem}.repository .header-grid .fork-flag{margin-left:38px;margin-top:3px;display:block;font-size:12px;white-space:nowrap}.repository .header-grid .octicon.octicon-repo-forked{margin-top:-1px;font-size:15px}.repository .header-grid .button{margin-top:2px;margin-bottom:2px}.repository .tabs .navbar{justify-content:initial}.repository .navbar{display:flex;justify-content:space-between}.repository .navbar .ui.label{margin-top:-2px;margin-left:7px;padding:3px 5px}.repository .owner.dropdown{min-width:40%!important}.repository #file-buttons{margin-left:auto!important;font-weight:400}.repository #file-buttons .ui.button{padding:8px 10px;font-weight:400}.repository .metas .menu{max-height:300px;overflow-x:auto}.repository .metas .ui.list .hide{display:none!important}.repository .metas .ui.list .item{padding:0}.repository .metas .ui.list .label.color{padding:0 8px;margin-right:5px}.repository .metas .ui.list a{margin:2px 0}.repository .metas .ui.list a .text{color:#444}.repository .metas .ui.list a .text:hover{color:#000}.repository .header-wrapper{background-color:#FAFAFA;margin-top:-15px;padding-top:15px}.repository .header-wrapper .ui.tabs.divider{border-bottom:none}.repository .header-wrapper .ui.tabular .octicon{margin-right:5px}.repository .filter.menu .label.color{border-radius:3px;margin-left:15px;padding:0 8px}.repository .filter.menu .octicon{float:left;margin:5px -7px 0 -5px;width:16px}.repository .filter.menu .text{margin-left:.9em}.repository .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.repository .filter.menu .dropdown.item{margin:1px;padding-right:0}.repository .select-label .item{max-width:250px;overflow:hidden;text-overflow:ellipsis}.repository .select-label .desc{padding-left:16px}.repository .ui.tabs.container{margin-top:14px;margin-bottom:0}.repository .ui.tabs.container .ui.menu{border-bottom:none}.repository .ui.tabs.divider{margin-top:0;margin-bottom:20px}.repository #clone-panel{width:350px}.repository #clone-panel input{border-radius:0;padding:5px 10px}.repository #clone-panel .clone.button{font-size:13px;padding:0 5px}.repository #clone-panel .clone.button:first-child{border-radius:.28571429rem 0 0 .28571429rem}.repository #clone-panel .icon.button{padding:0 10px}.repository #clone-panel .dropdown .menu{right:0!important;left:auto!important}.repository.file.list .repo-description{display:flex;justify-content:space-between;align-items:center}.repository.file.list #repo-desc{font-size:1.2em}.repository.file.list .choose.reference .header .icon{font-size:1.4em}.repository.file.list .repo-path .divider,.repository.file.list .repo-path .section{display:inline}.repository.file.list #file-buttons{font-weight:400}.repository.file.list #file-buttons .ui.button{padding:8px 10px;font-weight:400}.repository.file.list #repo-files-table thead th{padding-top:8px;padding-bottom:5px;font-weight:400}.repository.file.list #repo-files-table thead th:first-child{display:block;position:relative;width:325%}.repository.file.list #repo-files-table thead .ui.avatar{margin-bottom:5px}.repository.file.list #repo-files-table tbody .octicon{margin-left:3px;margin-right:5px;color:#777}.repository.file.list #repo-files-table tbody .octicon.octicon-mail-reply{margin-right:10px}.repository.file.list #repo-files-table tbody .octicon.octicon-file-directory,.repository.file.list #repo-files-table tbody .octicon.octicon-file-submodule,.repository.file.list #repo-files-table tbody .octicon.octicon-file-symlink-directory{color:#1e70bf}.repository.file.list #repo-files-table td{padding-top:8px;padding-bottom:8px}.repository.file.list #repo-files-table td.message .isSigned{cursor:default}.repository.file.list #repo-files-table tr:hover{background-color:#ffE}.repository.file.list #repo-files-table .jumpable-path{color:#888}.repository.file.list .non-diff-file-content .header .icon{font-size:1em}.repository.file.list .non-diff-file-content .header .file-actions{margin-top:0;margin-bottom:-5px;padding-left:20px}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#767676;vertical-align:middle;background:0 0;border:0;outline:0}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon:hover{color:#4078c0}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon-danger:hover{color:#bd2c00}.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon.disabled{color:#bbb;cursor:default}.repository.file.list .non-diff-file-content .header .file-actions #delete-file-form{display:inline-block}.repository.file.list .non-diff-file-content .view-raw{padding:5px}.repository.file.list .non-diff-file-content .view-raw *{max-width:100%}.repository.file.list .non-diff-file-content .view-raw img{padding:5px 5px 0 5px}.repository.file.list .non-diff-file-content .plain-text{padding:1em 2em 1em 2em}.repository.file.list .non-diff-file-content .code-view *{font-size:12px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:20px}.repository.file.list .non-diff-file-content .code-view table{width:100%}.repository.file.list .non-diff-file-content .code-view .lines-num{vertical-align:top;text-align:right;color:#999;background:#f5f5f5;width:1%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}.repository.file.list .non-diff-file-content .code-view .lines-num span{line-height:20px;padding:0 10px;cursor:pointer;display:block}.repository.file.list .non-diff-file-content .code-view .lines-code,.repository.file.list .non-diff-file-content .code-view .lines-num{padding:0}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs,.repository.file.list .non-diff-file-content .code-view .lines-code ol,.repository.file.list .non-diff-file-content .code-view .lines-code pre,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs,.repository.file.list .non-diff-file-content .code-view .lines-num ol,.repository.file.list .non-diff-file-content .code-view .lines-num pre{background-color:#fff;margin:0;padding:0!important}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li,.repository.file.list .non-diff-file-content .code-view .lines-code ol li,.repository.file.list .non-diff-file-content .code-view .lines-code pre li,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li,.repository.file.list .non-diff-file-content .code-view .lines-num ol li,.repository.file.list .non-diff-file-content .code-view .lines-num pre li{display:block;width:100%}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li.active,.repository.file.list .non-diff-file-content .code-view .lines-code ol li.active,.repository.file.list .non-diff-file-content .code-view .lines-code pre li.active,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li.active,.repository.file.list .non-diff-file-content .code-view .lines-num ol li.active,.repository.file.list .non-diff-file-content .code-view .lines-num pre li.active{background:#ffd}.repository.file.list .non-diff-file-content .code-view .lines-code .hljs li:before,.repository.file.list .non-diff-file-content .code-view .lines-code ol li:before,.repository.file.list .non-diff-file-content .code-view .lines-code pre li:before,.repository.file.list .non-diff-file-content .code-view .lines-num .hljs li:before,.repository.file.list .non-diff-file-content .code-view .lines-num ol li:before,.repository.file.list .non-diff-file-content .code-view .lines-num pre li:before{content:' '}.repository.file.list .non-diff-file-content .code-view .active{background:#ffd}.repository.file.list .sidebar{padding-left:0}.repository.file.list .sidebar .octicon{width:16px}.repository.file.editor .treepath{width:100%}.repository.file.editor .treepath input{vertical-align:middle;box-shadow:rgba(0,0,0,.0745098) 0 1px 2px inset;width:inherit;padding:7px 8px;margin-right:5px}.repository.file.editor .tabular.menu .octicon{margin-right:5px}.repository.file.editor .commit-form-wrapper{padding-left:64px}.repository.file.editor .commit-form-wrapper .commit-avatar{float:left;margin-left:-64px;width:3em;height:auto}.repository.file.editor .commit-form-wrapper .commit-form{position:relative;padding:15px;margin-bottom:10px;border:1px solid #ddd;border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form:after,.repository.file.editor .commit-form-wrapper .commit-form:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.file.editor .commit-form-wrapper .commit-form:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.file.editor .commit-form-wrapper .commit-form:after{border-right-color:#fff}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .branch-name{display:inline-block;padding:3px 6px;font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace;color:rgba(0,0,0,.65);background-color:rgba(209,227,237,.45);border-radius:3px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input{position:relative;margin-left:25px}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input input{width:240px!important;padding-left:26px!important}.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .octicon-git-branch{position:absolute;top:9px;left:10px;color:#b0c4ce}.repository.options #interval{width:100px!important;min-width:100px}.repository.options .danger .item{padding:20px 15px}.repository.options .danger .ui.divider{margin:0}.repository.new.issue .comment.form .comment .avatar{width:3em}.repository.new.issue .comment.form .content{margin-left:4em}.repository.new.issue .comment.form .content:after,.repository.new.issue .comment.form .content:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.new.issue .comment.form .content:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.new.issue .comment.form .content:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.new.issue .comment.form .content:after{border-right-color:#fff}.repository.new.issue .comment.form .content .markdown{font-size:14px}.repository.new.issue .comment.form .metas{min-width:220px}.repository.new.issue .comment.form .metas .filter.menu{max-height:300px;overflow-x:auto}.repository.view.issue .title{padding-bottom:0!important}.repository.view.issue .title h1{font-weight:300;font-size:2.3rem;margin-bottom:5px}.repository.view.issue .title h1 .ui.input{font-size:.5em;vertical-align:top;width:50%;min-width:600px}.repository.view.issue .title h1 .ui.input input{font-size:1.5em;padding:6px 10px}.repository.view.issue .title .index{font-weight:300;color:#aaa;letter-spacing:-1px}.repository.view.issue .title .label{margin-right:10px}.repository.view.issue .title .edit-zone{margin-top:10px}.repository.view.issue .pull-desc code{color:#0166E6}.repository.view.issue .pull.tabular.menu{margin-bottom:10px}.repository.view.issue .pull.tabular.menu .octicon{margin-right:5px}.repository.view.issue .pull.tab.segment{border:none;padding:0;padding-top:10px;box-shadow:none;background-color:inherit}.repository.view.issue .pull .merge.box .avatar{margin-left:10px;margin-top:10px}.repository.view.issue .comment-list:before{display:block;content:"";position:absolute;margin-top:12px;margin-bottom:14px;top:0;bottom:0;left:96px;width:2px;background-color:#f3f3f3;z-index:-1}.repository.view.issue .comment-list .comment .avatar{width:3em}.repository.view.issue .comment-list .comment .tag{color:#767676;margin-top:3px;padding:2px 5px;font-size:12px;border:1px solid rgba(0,0,0,.1);border-radius:3px}.repository.view.issue .comment-list .comment .actions .item{float:left}.repository.view.issue .comment-list .comment .actions .item.tag{margin-right:5px}.repository.view.issue .comment-list .comment .actions .item.action{margin-top:6px;margin-left:10px}.repository.view.issue .comment-list .comment .content{margin-left:4em}.repository.view.issue .comment-list .comment .content>.header{font-weight:400;padding:auto 15px;position:relative;color:#767676;background-color:#f7f7f7;border-bottom:1px solid #eee;border-top-left-radius:3px;border-top-right-radius:3px}.repository.view.issue .comment-list .comment .content>.header:after,.repository.view.issue .comment-list .comment .content>.header:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.view.issue .comment-list .comment .content>.header:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.view.issue .comment-list .comment .content>.header:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.view.issue .comment-list .comment .content>.header .text{max-width:78%;padding-top:10px;padding-bottom:10px}.repository.view.issue .comment-list .comment .content .markdown{font-size:14px}.repository.view.issue .comment-list .comment .content .no-content{color:#767676;font-style:italic}.repository.view.issue .comment-list .comment .content>.bottom.segment{background:#f3f4f5}.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.images::after{clear:both;content:' ';display:block}.repository.view.issue .comment-list .comment .content>.bottom.segment a{display:block;float:left;margin:5px;padding:5px;height:150px;border:solid 1px #eee;border-radius:3px;max-width:150px;background-color:#fff}.repository.view.issue .comment-list .comment .content>.bottom.segment a:before{content:' ';display:inline-block;height:100%;vertical-align:middle}.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.image{max-height:100%;width:auto;margin:0;vertical-align:middle}.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image{font-size:128px;color:#000}.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image:hover{color:#000}.repository.view.issue .comment-list .comment .ui.form .field:first-child{clear:none}.repository.view.issue .comment-list .comment .ui.form .tab.segment{border:none;padding:0;padding-top:10px}.repository.view.issue .comment-list .comment .ui.form textarea{height:200px;font-family:Consolas,monospace}.repository.view.issue .comment-list .comment .edit.buttons{margin-top:10px}.repository.view.issue .comment-list .event{position:relative;margin:15px 0 15px 79px;padding-left:25px}.repository.view.issue .comment-list .event .octicon{width:30px;float:left;text-align:center}.repository.view.issue .comment-list .event .octicon.octicon-circle-slash{margin-top:5px;margin-left:-34.5px;font-size:20px;color:#bd2c00}.repository.view.issue .comment-list .event .octicon.octicon-primitive-dot{margin-left:-28.5px;margin-right:-1px;font-size:30px;color:#6cc644}.repository.view.issue .comment-list .event .octicon.octicon-bookmark{margin-top:3px;margin-left:-31px;margin-right:-1px;font-size:25px}.repository.view.issue .comment-list .event .detail{font-size:.9rem;margin-top:5px;margin-left:35px}.repository.view.issue .comment-list .event .detail .octicon.octicon-git-commit{margin-top:2px}.repository.view.issue .ui.segment.metas{margin-top:-3px}.repository.view.issue .ui.participants img{margin-top:5px;margin-right:5px}.repository .comment.form .ui.comments{margin-top:-12px;max-width:100%}.repository .comment.form .content .field:first-child{clear:none}.repository .comment.form .content .form:after,.repository .comment.form .content .form:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository .comment.form .content .form:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository .comment.form .content .form:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository .comment.form .content .form:after{border-right-color:#fff}.repository .comment.form .content .tab.segment{border:none;padding:0;padding-top:10px}.repository .comment.form .content textarea{height:200px;font-family:Consolas,monospace}.repository .label.list{list-style:none;padding-top:15px}.repository .label.list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .label.list .item a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .label.list .item a:hover{color:#000}.repository .label.list .item a.open-issues{margin-right:30px}.repository .label.list .item .ui.label{font-size:1em}.repository .milestone.list{list-style:none;padding-top:15px}.repository .milestone.list>.item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .milestone.list>.item>a{padding-top:5px;padding-right:10px;color:#000}.repository .milestone.list>.item>a:hover{color:#4078c0}.repository .milestone.list>.item .ui.progress{width:40%;padding:0;border:0;margin:0}.repository .milestone.list>.item .ui.progress .bar{height:20px}.repository .milestone.list>.item .meta{color:#999;padding-top:5px}.repository .milestone.list>.item .meta .issue-stats .octicon{padding-left:5px}.repository .milestone.list>.item .meta .overdue{color:red}.repository .milestone.list>.item .operate{margin-top:-15px}.repository .milestone.list>.item .operate>a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .milestone.list>.item .operate>a:hover{color:#000}.repository .milestone.list>.item .content{padding-top:10px}.repository.new.milestone textarea{height:200px}.repository.new.milestone #deadline{width:150px}.repository.compare.pull .choose.branch .octicon{padding-right:10px}.repository.compare.pull .comment.form .content:after,.repository.compare.pull .comment.form .content:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.repository.compare.pull .comment.form .content:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}.repository.compare.pull .comment.form .content:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}.repository.compare.pull .comment.form .content:after{border-right-color:#fff}.repository .filter.dropdown .menu{margin-top:1px!important}.repository.commits .header .search input{font-weight:400;padding:5px 10px}.repository #commits-table thead th:first-of-type{padding-left:15px}.repository #commits-table thead .sha{width:140px}.repository #commits-table thead .shatd{text-align:center}.repository #commits-table td.sha .sha.label{margin:0}.repository #commits-table.ui.basic.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,0,.02)!important}.repository #commits-table td.sha .sha.label.isSigned,.repository #repo-files-table .sha.label.isSigned{border:1px solid #BBB}.repository #commits-table td.sha .sha.label.isSigned .detail.icon,.repository #repo-files-table .sha.label.isSigned .detail.icon{background:#FAFAFA;margin:-6px -10px -4px 0;padding:5px 3px 5px 6px;border-left:1px solid #BBB;border-top-left-radius:0;border-bottom-left-radius:0}.repository #commits-table td.sha .sha.label.isSigned.isVerified,.repository #repo-files-table .sha.label.isSigned.isVerified{border:1px solid #21BA45;background:#21BA4518}.repository #commits-table td.sha .sha.label.isSigned.isVerified .detail.icon,.repository #repo-files-table .sha.label.isSigned.isVerified .detail.icon{border-left:1px solid #21BA4580}.repository .diff-detail-box{margin:15px 0;line-height:30px}.repository .diff-detail-box ol{clear:both;padding-left:0;margin-top:5px;margin-bottom:28px}.repository .diff-detail-box ol li{list-style:none;padding-bottom:4px;margin-bottom:4px;border-bottom:1px dashed #DDD;padding-left:6px}.repository .diff-detail-box span.status{display:inline-block;width:12px;height:12px;margin-right:8px;vertical-align:middle}.repository .diff-detail-box span.status.modify{background-color:#f0db88}.repository .diff-detail-box span.status.add{background-color:#b4e2b4}.repository .diff-detail-box span.status.del{background-color:#e9aeae}.repository .diff-detail-box span.status.rename{background-color:#dad8ff}.repository .diff-detail-box .ui.right{margin-bottom:15px}.repository .diff-box .header{display:flex;align-items:center}.repository .diff-box .header .count{margin-right:12px;font-size:13px;flex:0 0 auto}.repository .diff-box .header .count .bar{background-color:#bd2c00;height:12px;width:40px;display:inline-block;margin:2px 4px 0 4px;vertical-align:text-top}.repository .diff-box .header .count .bar .add{background-color:#55a532;height:12px}.repository .diff-box .header .file{flex:1;color:#888;word-break:break-all}.repository .diff-box .header .button{margin:-5px 0 -5px 12px;padding:8px 10px;flex:0 0 auto}.repository .diff-file-box .header{background-color:#f7f7f7}.repository .diff-file-box .file-body.file-code .lines-num{text-align:right;color:#A7A7A7;background:#fafafa;width:1%;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;vertical-align:top}.repository .diff-file-box .file-body.file-code .lines-num span.fold{display:block;text-align:center}.repository .diff-file-box .file-body.file-code .lines-num-old{border-right:1px solid #DDD}.repository .diff-file-box .code-diff{font-size:12px}.repository .diff-file-box .code-diff td{padding:0;padding-left:10px;border-top:none}.repository .diff-file-box .code-diff pre{margin:0}.repository .diff-file-box .code-diff .lines-num{border-color:#d4d4d5;border-right-width:1px;border-right-style:solid;padding:0 5px}.repository .diff-file-box .code-diff tbody tr td.halfwidth{width:49%}.repository .diff-file-box .code-diff tbody tr td.tag-code,.repository .diff-file-box .code-diff tbody tr.tag-code td{background-color:#F0F0F0!important;border-color:#D2CECE!important;padding-top:8px;padding-bottom:8px}.repository .diff-file-box .code-diff tbody tr .removed-code{background-color:#f99}.repository .diff-file-box .code-diff tbody tr .added-code{background-color:#9f9}.repository .diff-file-box .code-diff-unified tbody tr.del-code td{background-color:#ffe0e0!important;border-color:#f1c0c0!important}.repository .diff-file-box .code-diff-unified tbody tr.add-code td{background-color:#d6fcd6!important;border-color:#c1e9c1!important}.repository .diff-file-box .code-diff-split table,.repository .diff-file-box .code-diff-split tbody{width:100%}.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(2),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(4){background-color:#fafafa}.repository .diff-file-box .code-diff-split tbody tr td.del-code,.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(2){background-color:#ffe0e0!important;border-color:#f1c0c0!important}.repository .diff-file-box .code-diff-split tbody tr td.add-code,.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(4){background-color:#d6fcd6!important;border-color:#c1e9c1!important}.repository .diff-file-box .code-diff-split tbody tr td:nth-child(3){border-left-width:1px;border-left-style:solid}.repository .diff-file-box.file-content{clear:right}.repository .diff-file-box.file-content img{max-width:100%;padding:5px 5px 0 5px}.repository .code-view{overflow:auto;overflow-x:auto;overflow-y:hidden}.repository .repo-search-result{padding-top:10px;padding-bottom:10px}.repository .repo-search-result .lines-num a{color:inherit}.repository.quickstart .guide .item{padding:1em}.repository.quickstart .guide .item small{font-weight:400}.repository.quickstart .guide .clone.button:first-child{border-radius:.28571429rem 0 0 .28571429rem}.repository.quickstart .guide .ui.action.small.input{width:100%}.repository.quickstart .guide #repo-clone-url{border-radius:0;padding:5px 10px;font-size:1.2em}.repository.release #release-list{border-top:1px solid #DDD;margin-top:20px;padding-top:15px}.repository.release #release-list>li{list-style:none}.repository.release #release-list>li .detail,.repository.release #release-list>li .meta{padding-top:30px;padding-bottom:40px}.repository.release #release-list>li .meta{text-align:right;position:relative}.repository.release #release-list>li .meta .tag:not(.icon){display:block;margin-top:15px}.repository.release #release-list>li .meta .commit{display:block;margin-top:10px}.repository.release #release-list>li .detail{border-left:1px solid #DDD}.repository.release #release-list>li .detail .author img{margin-bottom:-3px}.repository.release #release-list>li .detail .download{margin-top:20px}.repository.release #release-list>li .detail .download>a .octicon{margin-left:5px;margin-right:5px}.repository.release #release-list>li .detail .download .list{padding-left:0;border-top:1px solid #eee}.repository.release #release-list>li .detail .download .list li{list-style:none;display:block;padding-top:8px;padding-bottom:8px;border-bottom:1px solid #eee}.repository.release #release-list>li .detail .dot{width:9px;height:9px;background-color:#ccc;z-index:999;position:absolute;display:block;left:-5px;top:40px;border-radius:6px;border:1px solid #FFF}.repository.new.release .target{min-width:500px}.repository.new.release .target #tag-name{margin-top:-4px}.repository.new.release .target .at{margin-left:-5px;margin-right:5px}.repository.new.release .target .dropdown.icon{margin:0;padding-top:3px}.repository.new.release .target .selection.dropdown{padding-top:10px;padding-bottom:10px}.repository.new.release .prerelease.field{margin-bottom:0}.repository.forks .list{margin-top:0}.repository.forks .list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px solid #DDD}.repository.forks .list .item .ui.avatar{float:left;margin-right:5px}.repository.forks .list .item .link{padding-top:5px}.repository.wiki.start .ui.segment{padding-top:70px;padding-bottom:100px}.repository.wiki.start .ui.segment .mega-octicon{font-size:48px}.repository.wiki.new .CodeMirror .CodeMirror-code{font-family:Consolas,monospace}.repository.wiki.new .CodeMirror .CodeMirror-code .cm-comment{background:inherit}.repository.wiki.new .editor-preview{background-color:#fff}.repository.wiki.view .choose.page{margin-top:-5px}.repository.wiki.view .ui.sub.header{text-transform:none}.repository.wiki.view>.markdown{padding:15px 30px}.repository.wiki.view>.markdown h1:first-of-type,.repository.wiki.view>.markdown h2:first-of-type,.repository.wiki.view>.markdown h3:first-of-type,.repository.wiki.view>.markdown h4:first-of-type,.repository.wiki.view>.markdown h5:first-of-type,.repository.wiki.view>.markdown h6:first-of-type{margin-top:0}@media only screen and (max-width:767px){.repository.wiki .dividing.header .stackable.grid .button{margin-top:2px;margin-bottom:2px}}.repository.settings.collaboration .collaborator.list{padding:0}.repository.settings.collaboration .collaborator.list>.item{margin:0;line-height:2em}.repository.settings.collaboration .collaborator.list>.item:not(:last-child){border-bottom:1px solid #DDD}.repository.settings.collaboration #repo-collab-form #search-user-box .results{left:7px}.repository.settings.collaboration #repo-collab-form .ui.button{margin-left:5px;margin-top:-3px}.repository.settings.branches .protected-branches .selection.dropdown{width:300px}.repository.settings.branches .protected-branches .item{border:1px solid #eaeaea;padding:10px 15px}.repository.settings.branches .protected-branches .item:not(:last-child){border-bottom:0}.repository.settings.branches .branch-protection .help{margin-left:26px;padding-top:0}.repository.settings.branches .branch-protection .fields{margin-left:20px;display:block}.repository.settings.branches .branch-protection .whitelist{margin-left:26px}.repository.settings.branches .branch-protection .whitelist .dropdown img{display:inline-block}.repository.settings.webhook .events .column{padding-bottom:0}.repository.settings.webhook .events .help{font-size:13px;margin-left:26px;padding-top:0}.repository .ui.attached.isSigned.isVerified:not(.positive){border-left:1px solid #A3C293;border-right:1px solid #A3C293}.repository .ui.attached.isSigned.isVerified.top:not(.positive){border-top:1px solid #A3C293}.repository .ui.attached.isSigned.isVerified:not(.positive):last-child{border-bottom:1px solid #A3C293}.repository .ui.segment.sub-menu{padding:7px;line-height:0}.repository .ui.segment.sub-menu .list{width:100%;display:flex}.repository .ui.segment.sub-menu .list .item{width:100%;border-radius:3px}.repository .ui.segment.sub-menu .list .item a{color:#000}.repository .ui.segment.sub-menu .list .item a:hover{color:#666}.repository .ui.segment.sub-menu .list .item.active{background:rgba(0,0,0,.05)}.repository .segment.reactions.dropdown .menu,.repository .select-reaction.dropdown .menu{right:0!important;left:auto!important}.repository .segment.reactions.dropdown .menu>.header,.repository .select-reaction.dropdown .menu>.header{margin:.75rem 0 .5rem}.repository .segment.reactions.dropdown .menu>.item,.repository .select-reaction.dropdown .menu>.item{float:left;padding:.5rem .5rem!important}.repository .segment.reactions.dropdown .menu>.item img.emoji,.repository .select-reaction.dropdown .menu>.item img.emoji{margin-right:0}.repository .segment.reactions{padding:.3em 1em}.repository .segment.reactions .ui.label{padding:.4em}.repository .segment.reactions .ui.label.disabled{cursor:default}.repository .segment.reactions .ui.label>img{height:1.5em!important}.repository .segment.reactions .select-reaction{float:none}.repository .segment.reactions .select-reaction:not(.active) a{display:none}.repository .segment.reactions:hover .select-reaction a{display:block}.user-cards .list{padding:0}.user-cards .list .item{list-style:none;width:32%;margin:10px 10px 10px 0;padding-bottom:14px;float:left}.user-cards .list .item .avatar{width:48px;height:48px;float:left;display:block;margin-right:10px}.user-cards .list .item .name{margin-top:0;margin-bottom:0;font-weight:400}.user-cards .list .item .meta{margin-top:5px}#search-repo-box .results .result .image,#search-user-box .results .result .image{float:left;margin-right:8px;width:2em;height:2em}#search-repo-box .results .result .content,#search-user-box .results .result .content{margin:6px 0}#issue-actions{display:none}.issue.list{list-style:none;padding-top:15px}.issue.list>.item{padding-top:15px;padding-bottom:10px;border-bottom:1px dashed #AAA}.issue.list>.item .title{color:#444;font-size:15px;font-weight:700;margin:0 6px}.issue.list>.item .title:hover{color:#000}.issue.list>.item .comment{padding-right:10px;color:#666}.issue.list>.item .desc{padding-top:5px;color:#999}.issue.list>.item .desc .checklist{padding-left:5px}.issue.list>.item .desc .checklist .progress-bar{margin-left:2px;width:80px;height:6px;display:inline-block;background-color:#eee;overflow:hidden;border-radius:3px;vertical-align:2px!important}.issue.list>.item .desc .checklist .progress-bar .progress{background-color:#ccc;display:block;height:100%}.issue.list>.item .desc a.milestone{padding-left:5px;color:#999!important}.issue.list>.item .desc a.milestone:hover{color:#000!important}.issue.list>.item .desc .assignee{margin-top:-5px;margin-right:5px}.issue.list>.item .desc .overdue{color:red}.page.buttons{padding-top:15px}.ui.form .dropzone{width:100%;margin-bottom:10px;border:2px dashed #0087F7;box-shadow:none!important}.ui.form .dropzone .dz-error-message{top:140px}.settings .content{margin-top:2px}.settings .content .segment,.settings .content>.header{box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.settings .list>.item .green{color:#21BA45!important}.settings .list>.item:not(:first-child){border-top:1px solid #eaeaea;padding:1rem;margin:15px -1rem -1rem -1rem}.settings .list>.item>.mega-octicon{display:table-cell}.settings .list>.item>.mega-octicon+.content{display:table-cell;padding:0 0 0 .5em;vertical-align:top}.settings .list>.item .info{margin-top:10px}.settings .list>.item .info .tab.segment{border:none;padding:10px 0 0}.settings .list.key .meta{padding-top:5px;color:#666}.settings .list.email>.item:not(:first-child){min-height:60px}.settings .list.collaborator>.item{padding:0}.ui.vertical.menu .header.item{font-size:1.1em;background:#f0f0f0}.edit-label.modal .form .column,.new-label.segment .form .column{padding-right:0}.edit-label.modal .form .buttons,.new-label.segment .form .buttons{margin-left:auto;padding-top:15px}.edit-label.modal .form .color.picker.column,.new-label.segment .form .color.picker.column{width:auto}.edit-label.modal .form .color.picker.column .color-picker,.new-label.segment .form .color.picker.column .color-picker{height:35px;width:auto;padding-left:30px}.edit-label.modal .form .minicolors-swatch.minicolors-sprite,.new-label.segment .form .minicolors-swatch.minicolors-sprite{top:10px;left:10px;width:15px;height:15px}.edit-label.modal .form .precolors,.new-label.segment .form .precolors{padding-left:0;padding-right:0;margin:3px 10px auto 10px;width:120px}.edit-label.modal .form .precolors .color,.new-label.segment .form .precolors .color{float:left;width:15px;height:15px}#avatar-arrow:after,#avatar-arrow:before{right:100%;top:20px;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}#avatar-arrow:before{border-right-color:#D4D4D5;border-width:9px;margin-top:-9px}#avatar-arrow:after{border-right-color:#f7f7f7;border-width:8px;margin-top:-8px}#delete-repo-modal .ui.message,#transfer-repo-modal .ui.message{width:100%!important}.tab-size-1{tab-size:1!important;-moz-tab-size:1!important}.tab-size-2{tab-size:2!important;-moz-tab-size:2!important}.tab-size-3{tab-size:3!important;-moz-tab-size:3!important}.tab-size-4{tab-size:4!important;-moz-tab-size:4!important}.tab-size-5{tab-size:5!important;-moz-tab-size:5!important}.tab-size-6{tab-size:6!important;-moz-tab-size:6!important}.tab-size-7{tab-size:7!important;-moz-tab-size:7!important}.tab-size-8{tab-size:8!important;-moz-tab-size:8!important}.tab-size-9{tab-size:9!important;-moz-tab-size:9!important}.tab-size-10{tab-size:10!important;-moz-tab-size:10!important}.tab-size-11{tab-size:11!important;-moz-tab-size:11!important}.tab-size-12{tab-size:12!important;-moz-tab-size:12!important}.tab-size-13{tab-size:13!important;-moz-tab-size:13!important}.tab-size-14{tab-size:14!important;-moz-tab-size:14!important}.tab-size-15{tab-size:15!important;-moz-tab-size:15!important}.tab-size-16{tab-size:16!important;-moz-tab-size:16!important}.stats-table{display:table;width:100%}.stats-table .table-cell{display:table-cell}.stats-table .table-cell.tiny{height:.5em}tbody.commit-list{vertical-align:baseline}.commit-body{white-space:pre-wrap}@media only screen and (max-width:767px){.ui.stackable.menu.mobile--margin-between-items>.item{margin-top:5px;margin-bottom:5px}.ui.stackable.menu.mobile--no-negative-margins{margin-left:0;margin-right:0}}#topic_edit{margin-top:5px;display:none}#repo-topic{margin-top:5px}.CodeMirror{font:14px Consolas,"Liberation Mono",Menlo,Courier,monospace}.CodeMirror.cm-s-default{border-radius:3px;padding:0!important}.CodeMirror .cm-comment{background:inherit!important}.repository.file.editor .tab[data-tab=write]{padding:0!important}.repository.file.editor .tab[data-tab=write] .editor-toolbar{border:none!important}.repository.file.editor .tab[data-tab=write] .CodeMirror{border-left:none;border-right:none;border-bottom:none}.organization{padding-top:15px;padding-bottom:80px}.organization .head .ui.header .text{vertical-align:middle;font-size:1.6rem;margin-left:15px}.organization .head .ui.header .ui.right{margin-top:5px}.organization.new.org form{margin:auto}.organization.new.org form .ui.message{text-align:center}@media only screen and (min-width:768px){.organization.new.org form{width:800px!important}.organization.new.org form .header{padding-left:280px!important}.organization.new.org form .inline.field>label{text-align:right;width:250px!important;word-wrap:break-word}.organization.new.org form .help{margin-left:265px!important}.organization.new.org form .optional .title{margin-left:250px!important}.organization.new.org form input,.organization.new.org form textarea{width:50%!important}}@media only screen and (max-width:767px){.organization.new.org form .optional .title{margin-left:15px}.organization.new.org form .inline.field>label{display:block}}.organization.new.org form .header{padding-left:0!important;text-align:center}.organization.options input{min-width:300px}.organization.profile #org-avatar{width:100px;height:100px;margin-right:15px}.organization.profile #org-info .ui.header{font-size:36px;margin-bottom:0}.organization.profile #org-info .desc{font-size:16px;margin-bottom:10px}.organization.profile #org-info .meta .item{display:inline-block;margin-right:10px}.organization.profile #org-info .meta .item .icon{margin-right:5px}.organization.profile .ui.top.header .ui.right{margin-top:0}.organization.profile .teams .item{padding:10px 15px}.organization.profile .members .ui.avatar,.organization.teams .members .ui.avatar{width:48px;height:48px;margin-right:5px}.organization.invite #invite-box{margin:auto;margin-top:50px;width:500px!important}.organization.invite #invite-box #search-user-box input{margin-left:0;width:300px}.organization.invite #invite-box .ui.button{margin-left:5px;margin-top:-3px}.organization.members .list .item{margin-left:0;margin-right:0;border-bottom:1px solid #eee}.organization.members .list .item .ui.avatar{width:48px;height:48px}.organization.members .list .item .meta{line-height:24px}.organization.teams .detail .item{padding:10px 15px}.organization.teams .detail .item:not(:last-child){border-bottom:1px solid #eee}.organization.teams .members .item,.organization.teams .repositories .item{padding:10px 20px;line-height:32px}.organization.teams .members .item:not(:last-child),.organization.teams .repositories .item:not(:last-child){border-bottom:1px solid #DDD}.organization.teams .members .item .button,.organization.teams .repositories .item .button{padding:9px 10px}.organization.teams #add-member-form input,.organization.teams #add-repo-form input{margin-left:0}.organization.teams #add-member-form .ui.button,.organization.teams #add-repo-form .ui.button{margin-left:5px;margin-top:-3px}.user:not(.icon){padding-top:15px;padding-bottom:80px}.user.profile .ui.card .username{display:block}.user.profile .ui.card .extra.content{padding:0}.user.profile .ui.card .extra.content ul{margin:0;padding:0}.user.profile .ui.card .extra.content ul li{padding:10px;list-style:none}.user.profile .ui.card .extra.content ul li:not(:last-child){border-bottom:1px solid #eaeaea}.user.profile .ui.card .extra.content ul li .octicon{margin-left:1px;margin-right:5px}.user.profile .ui.card .extra.content ul li.follow .ui.button{width:100%}.user.profile .ui.repository.list{margin-top:25px}.user.followers .header.name{font-size:20px;line-height:24px;vertical-align:middle}.user.followers .follow .ui.button{padding:8px 15px}.user.notification .octicon{float:left;font-size:2em}.user.notification .content{float:left;margin-left:7px}.user.notification table form{display:inline-block}.user.notification table button{padding:3px 3px 3px 5px}.user.notification table tr{cursor:pointer}.user.notification .octicon.green{color:#21ba45}.user.notification .octicon.red{color:#d01919}.user.notification .octicon.purple{color:#a333c8}.user.notification .octicon.blue{color:#2185d0}.user.link-account:not(.icon){padding-top:15px;padding-bottom:5px}.user.settings .iconFloat{float:left}.dashboard{padding-top:15px;padding-bottom:80px}.dashboard.feeds .context.user.menu,.dashboard.issues .context.user.menu{z-index:101;min-width:200px}.dashboard.feeds .context.user.menu .ui.header,.dashboard.issues .context.user.menu .ui.header{font-size:1rem;text-transform:none}.dashboard.feeds .filter.menu .item,.dashboard.issues .filter.menu .item{text-align:left}.dashboard.feeds .filter.menu .item .text,.dashboard.issues .filter.menu .item .text{height:16px;vertical-align:middle}.dashboard.feeds .filter.menu .item .text.truncate,.dashboard.issues .filter.menu .item .text.truncate{width:85%}.dashboard.feeds .filter.menu .item .floating.label,.dashboard.issues .filter.menu .item .floating.label{top:7px;left:90%;width:15%}.dashboard.feeds .filter.menu .jump.item,.dashboard.issues .filter.menu .jump.item{margin:1px;padding-right:0}.dashboard.feeds .filter.menu .menu,.dashboard.issues .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.dashboard.feeds .right.stackable.menu>.item.active,.dashboard.issues .right.stackable.menu>.item.active{color:#d9453d}.dashboard .dashboard-repos{margin:0 1px}.feeds .news>.ui.grid{margin-left:auto;margin-right:auto}.feeds .news .ui.avatar{margin-top:13px}.feeds .news p{line-height:1em}.feeds .news .time-since{font-size:13px}.feeds .news .issue.title{width:80%}.feeds .news .push.news .content ul{font-size:13px;list-style:none;padding-left:10px}.feeds .news .push.news .content ul img{margin-bottom:-2px}.feeds .news .push.news .content ul .text.truncate{width:80%;margin-bottom:-5px}.feeds .news .commit-id{font-family:Consolas,monospace}.feeds .news code{padding:1px;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px;word-break:break-all}.feeds .list .header .ui.label{margin-top:-4px;padding:4px 5px;font-weight:400}.feeds .list .header .plus.icon{margin-top:5px}.feeds .list ul{list-style:none;margin:0;padding-left:0}.feeds .list ul li:not(:last-child){border-bottom:1px solid #EAEAEA}.feeds .list ul li.private{background-color:#fcf8e9}.feeds .list ul li a{padding:6px 1.2em;display:block}.feeds .list ul li a .octicon{color:#888}.feeds .list ul li a .octicon.rear{font-size:15px}.feeds .list ul li a .star-num{font-size:12px}.feeds .list .repo-owner-name-list .item-name{max-width:70%;margin-bottom:-4px}.feeds .list #collaborative-repo-list .owner-and-repo{max-width:80%;margin-bottom:-5px}.feeds .list #collaborative-repo-list .owner-name{max-width:120px;margin-bottom:-5px}.admin{padding-top:15px;padding-bottom:80px}.admin .table.segment{padding:0;font-size:13px}.admin .table.segment:not(.striped){padding-top:5px}.admin .table.segment:not(.striped) thead th:last-child{padding-right:5px!important}.admin .table.segment th{padding-top:5px;padding-bottom:5px}.admin .table.segment:not(.select) td:first-of-type,.admin .table.segment:not(.select) th:first-of-type{padding-left:15px!important}.admin .ui.header,.admin .ui.segment{box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.admin.user .email{max-width:200px}.admin dl.admin-dl-horizontal{padding:20px;margin:0}.admin dl.admin-dl-horizontal dd{margin-left:275px}.admin dl.admin-dl-horizontal dt{font-weight:bolder;float:left;width:285px;clear:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin.config #test-mail-btn{margin-left:5px}.explore{padding-top:15px;padding-bottom:80px}.explore .navbar{justify-content:center;padding-top:15px!important;margin-top:-15px!important;margin-bottom:15px!important;background-color:#FAFAFA!important;border-width:1px!important}.explore .navbar .octicon{width:16px;text-align:center;margin-right:5px}.ui.repository.list .item{padding-bottom:25px}.ui.repository.list .item:not(:first-child){border-top:1px solid #eee;padding-top:25px}.ui.repository.list .item .ui.header{font-size:1.5rem;padding-bottom:10px}.ui.repository.list .item .ui.header .name{word-break:break-all}.ui.repository.list .item .ui.header .metas{color:#888;font-size:14px;font-weight:400}.ui.repository.list .item .ui.header .metas span:not(:last-child){margin-right:5px}.ui.repository.list .item .time{font-size:12px;color:grey}.ui.repository.branches .time{font-size:12px;color:grey}.ui.user.list .item{padding-bottom:25px}.ui.user.list .item:not(:first-child){border-top:1px solid #eee;padding-top:25px}.ui.user.list .item .ui.avatar.image{width:40px;height:40px}.ui.user.list .item .description{margin-top:5px}.ui.user.list .item .description .octicon:not(:first-child){margin-left:5px}.ui.user.list .item .description a{color:#333}.ui.user.list .item .description a:hover{text-decoration:underline} \ No newline at end of file diff --git a/public/less/_form.less b/public/less/_form.less index a352e1ebb..db9f8f38a 100644 --- a/public/less/_form.less +++ b/public/less/_form.less @@ -80,6 +80,23 @@ } } } + +@media only screen and (min-width: 768px) { + .g-recaptcha { + margin: 0 auto !important; + width: 304px; + padding-left: 30px; + } +} +@media screen and (max-height: 575px){ + #rc-imageselect, .g-recaptcha { + transform:scale(0.77); + -webkit-transform:scale(0.77); + transform-origin:0 0; + -webkit-transform-origin:0 0; + } +} + .user.activate, .user.forgot.password, .user.reset.password, diff --git a/routers/user/auth.go b/routers/user/auth.go index 317b4af3b..4852d47ae 100644 --- a/routers/user/auth.go +++ b/routers/user/auth.go @@ -17,6 +17,7 @@ import ( "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/recaptcha" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" @@ -641,6 +642,8 @@ func LinkAccount(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("link_account") ctx.Data["LinkAccountMode"] = true ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha + ctx.Data["CaptchaType"] = setting.Service.CaptchaType + ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration ctx.Data["ShowRegistrationButton"] = false @@ -666,6 +669,8 @@ func LinkAccountPostSignIn(ctx *context.Context, signInForm auth.SignInForm) { ctx.Data["LinkAccountMode"] = true ctx.Data["LinkAccountModeSignIn"] = true ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha + ctx.Data["CaptchaType"] = setting.Service.CaptchaType + ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration ctx.Data["ShowRegistrationButton"] = false @@ -732,6 +737,8 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au ctx.Data["LinkAccountMode"] = true ctx.Data["LinkAccountModeRegister"] = true ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha + ctx.Data["CaptchaType"] = setting.Service.CaptchaType + ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration ctx.Data["ShowRegistrationButton"] = false @@ -755,12 +762,21 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au return } - if setting.Service.EnableCaptcha && !cpt.VerifyReq(ctx.Req) { + if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ImageCaptcha && !cpt.VerifyReq(ctx.Req) { ctx.Data["Err_Captcha"] = true ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplLinkAccount, &form) return } + if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ReCaptcha { + valid, _ := recaptcha.Verify(form.GRecaptchaResponse) + if !valid { + ctx.Data["Err_Captcha"] = true + ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplLinkAccount, &form) + return + } + } + if (len(strings.TrimSpace(form.Password)) > 0 || len(strings.TrimSpace(form.Retype)) > 0) && form.Password != form.Retype { ctx.Data["Err_Password"] = true ctx.RenderWithErr(ctx.Tr("form.password_not_match"), tplLinkAccount, &form) @@ -858,6 +874,9 @@ func SignUp(ctx *context.Context) { ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha + ctx.Data["CaptchaType"] = setting.Service.CaptchaType + ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey + ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration ctx.HTML(200, tplSignUp) @@ -871,6 +890,9 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha + ctx.Data["CaptchaType"] = setting.Service.CaptchaType + ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey + //Permission denied if DisableRegistration or AllowOnlyExternalRegistration options are true if !setting.Service.ShowRegistrationButton { ctx.Error(403) @@ -882,12 +904,21 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo return } - if setting.Service.EnableCaptcha && !cpt.VerifyReq(ctx.Req) { + if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ImageCaptcha && !cpt.VerifyReq(ctx.Req) { ctx.Data["Err_Captcha"] = true ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplSignUp, &form) return } + if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ReCaptcha { + valid, _ := recaptcha.Verify(form.GRecaptchaResponse) + if !valid { + ctx.Data["Err_Captcha"] = true + ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplSignUp, &form) + return + } + } + if form.Password != form.Retype { ctx.Data["Err_Password"] = true ctx.RenderWithErr(ctx.Tr("form.password_not_match"), tplSignUp, &form) diff --git a/routers/user/auth_openid.go b/routers/user/auth_openid.go index 9fe3424aa..1f938e3d7 100644 --- a/routers/user/auth_openid.go +++ b/routers/user/auth_openid.go @@ -15,6 +15,7 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/generate" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/recaptcha" "code.gitea.io/gitea/modules/setting" "github.com/go-macaron/captcha" @@ -308,6 +309,8 @@ func RegisterOpenID(ctx *context.Context) { ctx.Data["PageIsOpenIDRegister"] = true ctx.Data["EnableOpenIDSignUp"] = setting.Service.EnableOpenIDSignUp ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha + ctx.Data["CaptchaType"] = setting.Service.CaptchaType + ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey ctx.Data["OpenID"] = oid userName, _ := ctx.Session.Get("openid_determined_username").(string) if userName != "" { @@ -333,14 +336,26 @@ func RegisterOpenIDPost(ctx *context.Context, cpt *captcha.Captcha, form auth.Si ctx.Data["PageIsOpenIDRegister"] = true ctx.Data["EnableOpenIDSignUp"] = setting.Service.EnableOpenIDSignUp ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha + ctx.Data["CaptchaType"] = setting.Service.CaptchaType + ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey ctx.Data["OpenID"] = oid - if setting.Service.EnableCaptcha && !cpt.VerifyReq(ctx.Req) { + if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ImageCaptcha && !cpt.VerifyReq(ctx.Req) { ctx.Data["Err_Captcha"] = true ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplSignUpOID, &form) return } + if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ReCaptcha { + ctx.Req.ParseForm() + valid, _ := recaptcha.Verify(form.GRecaptchaResponse) + if !valid { + ctx.Data["Err_Captcha"] = true + ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplSignUpOID, &form) + return + } + } + len := setting.MinPasswordLength if len < 256 { len = 256 diff --git a/templates/base/footer.tmpl b/templates/base/footer.tmpl index ed4e75ffc..a23ae5730 100644 --- a/templates/base/footer.tmpl +++ b/templates/base/footer.tmpl @@ -67,6 +67,11 @@ {{if .RequireU2F}} {{end}} +{{if .EnableCaptcha}} + {{if eq .CaptchaType "recaptcha"}} + + {{end}} +{{end}} {{if .RequireTribute}} diff --git a/templates/user/auth/signup_inner.tmpl b/templates/user/auth/signup_inner.tmpl index 52386f6dc..cd969276b 100644 --- a/templates/user/auth/signup_inner.tmpl +++ b/templates/user/auth/signup_inner.tmpl @@ -29,7 +29,7 @@
- {{if .EnableCaptcha}} + {{if and .EnableCaptcha (eq .CaptchaType "image")}}
{{.Captcha.CreateHtml}} @@ -39,6 +39,11 @@
{{end}} + {{if and .EnableCaptcha (eq .CaptchaType "recaptcha")}} +
+
+
+ {{end}}
diff --git a/templates/user/auth/signup_openid_register.tmpl b/templates/user/auth/signup_openid_register.tmpl index 741ffdf3b..67f03a19e 100644 --- a/templates/user/auth/signup_openid_register.tmpl +++ b/templates/user/auth/signup_openid_register.tmpl @@ -20,7 +20,7 @@
- {{if .EnableCaptcha}} + {{if and .EnableCaptcha (eq .CaptchaType "image")}}
{{.Captcha.CreateHtml}} @@ -30,6 +30,11 @@
{{end}} + {{if and .EnableCaptcha (eq .CaptchaType "recaptcha")}} +
+
+
+ {{end}}
From e07d3ad0fcdb27f27fb063c287ce5b0f60724286 Mon Sep 17 00:00:00 2001 From: Nicolas Da Mutten Date: Thu, 5 Jul 2018 09:14:56 +0200 Subject: [PATCH 077/124] Fixes repo membership check in API (#4341) Untested, since I can't compile (yet). --- routers/api/v1/org/member.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/api/v1/org/member.go b/routers/api/v1/org/member.go index 0cc531780..65754b88e 100644 --- a/routers/api/v1/org/member.go +++ b/routers/api/v1/org/member.go @@ -133,7 +133,7 @@ func IsMember(ctx *context.APIContext) { ctx.Error(500, "IsOrgMember", err) return } else if userIsMember { - userToCheckIsMember, err := ctx.Org.Organization.IsOrgMember(ctx.User.ID) + userToCheckIsMember, err := ctx.Org.Organization.IsOrgMember(userToCheck.ID) if err != nil { ctx.Error(500, "IsOrgMember", err) } else if userToCheckIsMember { From 5bc8782d33d81681ba18a4ec262a51d856e9975f Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Thu, 5 Jul 2018 16:35:42 +0100 Subject: [PATCH 078/124] Don't display buttons if there are no system notifications (#4280) * Don't display buttons if there are no notices * remove redundant gt check --- templates/admin/notice.tmpl | 50 +++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/templates/admin/notice.tmpl b/templates/admin/notice.tmpl index 745433d18..b1d886be4 100644 --- a/templates/admin/notice.tmpl +++ b/templates/admin/notice.tmpl @@ -34,33 +34,35 @@ {{end}} - - - - - - From 9ca8aaecb4e23d040bee06f846799a6c74b87996 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Thu, 19 Jul 2018 15:26:27 +0000 Subject: [PATCH 114/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_pt-BR.ini | 51 ++++++++++++++++++++++++++------- options/locale/locale_uk-UA.ini | 2 ++ 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index f7b8ed079..e1f4550ff 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -53,7 +53,7 @@ new_mirror=Novo mirror new_fork=Novo Fork de Repositório new_org=Nova organização manage_org=Gerenciar organizações -admin_panel=Administração do site +admin_panel=Administração geral account_settings=Configurações da conta settings=Configurações your_profile=Perfil @@ -93,7 +93,7 @@ no_admin_and_disable_registration=Você não pode desabilitar o auto-cadastro do err_empty_admin_password=A senha do administrador não pode ser em branco. general_title=Configurações gerais -app_name=Título do site +app_name=Nome do servidor app_name_helper=Você pode inserir o nome da empresa aqui. repo_path=Caminho raíz do repositório repo_path_helper=Todos os repositórios remotos do Git serão salvos neste diretório. @@ -597,7 +597,7 @@ editor.name_your_file=Nomeie o seu arquivo… editor.filename_help=Adicione um diretório digitando seu nome seguido por uma barra ('/'). Remova um diretório digitando o backspace no início do campo de entrada. editor.or=ou editor.cancel_lower=Cancelar -editor.commit_changes=Confirmar alterações +editor.commit_changes=Realizar commit das alterações editor.add_tmpl=Adicionar '%s/' editor.add=Adicionar '%s' editor.update=Atualizar '%s' @@ -682,7 +682,7 @@ issues.filter_milestone_no_select=Todos os marcos issues.filter_assignee=Atribuído issues.filter_assginee_no_select=Todos os responsáveis issues.filter_type=Tipo -issues.filter_type.all_issues=Todos os issues +issues.filter_type.all_issues=Todas as issues issues.filter_type.assigned_to_you=Atribuídos a você issues.filter_type.created_by_you=Criado por você issues.filter_type.mentioning_you=Mencionando você @@ -781,6 +781,34 @@ issues.due_date_added=adicionou a data limite %s %s issues.due_date_modified=modificou a data limite para %s ao invés de %s %s issues.due_date_remove=removeu a data limite %s %s issues.due_date_overdue=Em atraso +issues.due_date_invalid=A data limite é inválida ou está fora do intervalo. Por favor, use o formato dd/mm/aaaa. +issues.dependency.title=Dependências +issues.dependency.issue_no_dependencies=Esta issue atualmente não tem dependências. +issues.dependency.pr_no_dependencies=Este pull request atualmente não tem dependências. +issues.dependency.add=Adicione uma nova dependência... +issues.dependency.cancel=Cancelar +issues.dependency.remove=Remover +issues.dependency.issue_number=Número da issue +issues.dependency.added_dependency=`%[2]s adicionou uma nova dependência %[3]s` +issues.dependency.removed_dependency=`%[2]s removeu uma dependência %[3]s` +issues.dependency.issue_closing_blockedby=Fechamento deste pull request está bloqueado pelas seguintes issues +issues.dependency.pr_closing_blockedby=Fechamento desta issue está bloqueado pelas seguintes issues +issues.dependency.issue_close_blocks=Esta issue bloqueia o fechamento das seguintes issues +issues.dependency.pr_close_blocks=Este pull request bloqueia o fechamento das seguintes issues +issues.dependency.issue_close_blocked=Você precisa fechar todas as issues que bloqueiam esta issue antes de poder fechá-la! +issues.dependency.pr_close_blocked=Você precisa fechar todas issues que bloqueiam este pull request antes de poder fazer o merge! +issues.dependency.blocks_short=Bloqueia +issues.dependency.blocked_by_short=Depende de +issues.dependency.remove_header=Remover dependência +issues.dependency.issue_remove_text=Isto irá remover a dependência desta issue. Tem certeza? Você não pode desfazer isso! +issues.dependency.pr_remove_text=Isto irá remover a dependência deste pull request. Tem certeza? Você não pode desfazer isso! +issues.dependency.setting=Issues & PRs podem ter dependências +issues.dependency.add_error_same_issue=Você não pode fazer uma issue depender dela mesma! +issues.dependency.add_error_dep_issue_not_exist=Issue dependente não existe! +issues.dependency.add_error_dep_not_exist=Dependência não existe! +issues.dependency.add_error_dep_exists=Dependência já existe! +issues.dependency.add_error_cannot_create_circular=Você não pode criar uma dependência entre duas issues bloqueando uma a outra! +issues.dependency.add_error_dep_not_same_repo=Ambas as issues devem estar no mesmo repositório! pulls.desc=Habilitar solicitações de merge e revisões de código. pulls.new=Novo pull request @@ -793,7 +821,7 @@ pulls.no_results=Nada encontrado. pulls.nothing_to_compare=Estes branches são iguais. Não há nenhuma necessidade para criar um pull request. pulls.has_pull_request=`Um pull request entre esses branches já existe: %[2]s#%[3]d` pulls.create=Criar pull request -pulls.title_desc=quer mesclar %[1]d commits de %[2]s em %[3]s +pulls.title_desc=quer realizar o merge de %[1]d commits de %[2]s em %[3]s pulls.merged_title_desc=fez merge dos %[1]d commits de %[2]s em %[3]s %[4]s pulls.tab_conversation=Conversação pulls.tab_commits=Commits @@ -818,14 +846,14 @@ milestones.new=Novo marco milestones.open_tab=%d Aberto milestones.close_tab=%d Fechado milestones.closed=Fechado %s -milestones.no_due_date=Sem prazo +milestones.no_due_date=Sem data limite milestones.open=Reabrir milestones.close=Fechar milestones.new_subheader=Marcos organizam as issues e acompanham o progresso. milestones.create=Criar marco milestones.title=Título milestones.desc=Descrição -milestones.due_date=Prazo (opcional) +milestones.due_date=Data limite (opcional) milestones.clear=Limpar milestones.invalid_due_date_format=Formato da data limite deve ser 'dd/mm/aaaa'. milestones.create_success=O marco '%s' foi criado. @@ -837,8 +865,8 @@ milestones.edit_success=O marco '%s' foi atualizado. milestones.deletion=Excluir marco milestones.deletion_desc=A exclusão deste marco irá removê-lo de todas as issues. Tem certeza que deseja continuar? milestones.deletion_success=O marco foi excluído. -milestones.filter_sort.closest_due_date=Prazo mais próximo -milestones.filter_sort.furthest_due_date=Prazo mais longe +milestones.filter_sort.closest_due_date=Data limite mais próxima +milestones.filter_sort.furthest_due_date=Data limite mais distante milestones.filter_sort.least_complete=Menos completo milestones.filter_sort.most_complete=Mais completo milestones.filter_sort.most_issues=Com mais issues @@ -975,7 +1003,7 @@ settings.confirm_wiki_delete=Excluir dados da wiki settings.wiki_deletion_success=Os dados da wiki do repositório foi excluídos. settings.delete=Excluir este repositório settings.delete_desc=A exclusão de um repositório é permanente e não pode ser desfeita. -settings.delete_notices_1=-Esta operação NÃO PODERÁ ser desfeita. +settings.delete_notices_1=- Esta operação NÃO PODERÁ ser desfeita. settings.delete_notices_2=- Essa operação excluirá permanentemente o repositório %s, incluindo código, issues, comentários, dados da wiki e configurações do colaborador. settings.delete_notices_fork_1=- Forks deste repositório se tornarão independentes após a exclusão. settings.deletion_success=O repositório foi excluído. @@ -1443,7 +1471,7 @@ auths.deletion_success=A fonte de autenticação foi excluída. auths.login_source_exist=A fonte de autenticação '%s' já existe. config.server_config=Configuração do servidor -config.app_name=Título do site +config.app_name=Nome do servidor config.app_ver=Versão do Gitea config.app_url=URL base do Gitea config.custom_conf=Caminho do Arquivo de Configuração @@ -1499,6 +1527,7 @@ config.enable_timetracking=Habilitar contador de tempo config.default_enable_timetracking=Habilitar o contador de tempo por padrão config.default_allow_only_contributors_to_track_time=Permitir que apenas os colaboradores acompanhem o contador de tempo config.no_reply_address=Ocultar domínio de e-mail +config.default_enable_dependencies=Habilitar dependências de issue por padrão config.webhook_config=Configuração de Hook da Web config.queue_length=Tamanho da fila diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 839ee3806..20985668e 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -781,6 +781,8 @@ issues.due_date_added=додав(ла) дату завершення %s %s issues.due_date_modified=термін змінено з %s %s на %s issues.due_date_remove=видалив(ла) дату завершення %s %s issues.due_date_overdue=Прострочено +issues.dependency.cancel=Відмінити +issues.dependency.remove=Видалити pulls.desc=Увімкнути запити на злиття та інтерфейс узгодження правок. pulls.new=Новий запит на злиття From d1337299e2c719f5d7eb1e4eff227359a8c1589b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 19 Jul 2018 23:39:19 +0800 Subject: [PATCH 115/124] add valid for lfs oid (#4461) --- modules/lfs/server.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/modules/lfs/server.go b/modules/lfs/server.go index dc1279177..d6543816b 100644 --- a/modules/lfs/server.go +++ b/modules/lfs/server.go @@ -85,9 +85,12 @@ type link struct { var oidRegExp = regexp.MustCompile(`^[A-Fa-f0-9]+$`) +func isOidValid(oid string) bool { + return oidRegExp.MatchString(oid) +} + // ObjectOidHandler is the main request routing entry point into LFS server functions func ObjectOidHandler(ctx *context.Context) { - if !setting.LFS.StartServer { writeStatus(ctx, 404) return @@ -110,6 +113,11 @@ func ObjectOidHandler(ctx *context.Context) { } func getAuthenticatedRepoAndMeta(ctx *context.Context, rv *RequestVars, requireWrite bool) (*models.LFSMetaObject, *models.Repository) { + if !isOidValid(rv.Oid) { + writeStatus(ctx, 404) + return nil, nil + } + repository, err := models.GetRepositoryByOwnerAndName(rv.User, rv.Repo) if err != nil { log.Debug("Could not find repository: %s/%s - %s", rv.User, rv.Repo, err) @@ -222,7 +230,7 @@ func PostHandler(ctx *context.Context) { return } - if !oidRegExp.MatchString(rv.Oid) { + if !isOidValid(rv.Oid) { writeStatus(ctx, 404) return } @@ -249,7 +257,6 @@ func PostHandler(ctx *context.Context) { // BatchHandler provides the batch api func BatchHandler(ctx *context.Context) { - if !setting.LFS.StartServer { writeStatus(ctx, 404) return @@ -266,6 +273,10 @@ func BatchHandler(ctx *context.Context) { // Create a response object for _, object := range bv.Objects { + if !isOidValid(object.Oid) { + continue + } + repository, err := models.GetRepositoryByOwnerAndName(object.User, object.Repo) if err != nil { @@ -292,12 +303,10 @@ func BatchHandler(ctx *context.Context) { continue } - if oidRegExp.MatchString(object.Oid) { - // Object is not found - meta, err = models.NewLFSMetaObject(&models.LFSMetaObject{Oid: object.Oid, Size: object.Size, RepositoryID: repository.ID}) - if err == nil { - responseObjects = append(responseObjects, Represent(object, meta, meta.Existing, !contentStore.Exists(meta))) - } + // Object is not found + meta, err = models.NewLFSMetaObject(&models.LFSMetaObject{Oid: object.Oid, Size: object.Size, RepositoryID: repository.ID}) + if err == nil { + responseObjects = append(responseObjects, Represent(object, meta, meta.Existing, !contentStore.Exists(meta))) } } From 492ec97a461b20a476880ae786b4630843caa397 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Thu, 19 Jul 2018 13:58:33 -0400 Subject: [PATCH 116/124] Redirect to correct page after using scratch token (#4458) --- routers/user/auth.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/routers/user/auth.go b/routers/user/auth.go index 4852d47ae..9a24108c7 100644 --- a/routers/user/auth.go +++ b/routers/user/auth.go @@ -1,4 +1,5 @@ // Copyright 2014 The Gogs Authors. All rights reserved. +// Copyright 2018 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. @@ -320,7 +321,7 @@ func TwoFactorScratchPost(ctx *context.Context, form auth.TwoFactorScratchAuthFo handleSignInFull(ctx, u, remember, false) ctx.Flash.Info(ctx.Tr("auth.twofa_scratch_used")) - ctx.Redirect(setting.AppSubURL + "/user/settings/two_factor") + ctx.Redirect(setting.AppSubURL + "/user/settings/security") return } From 1e2da5d396141c9c240151d8736862f7d04aa46f Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Thu, 19 Jul 2018 17:59:34 +0000 Subject: [PATCH 117/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_pt-BR.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index e1f4550ff..62d21fee5 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -785,7 +785,7 @@ issues.due_date_invalid=A data limite é inválida ou está fora do intervalo. P issues.dependency.title=Dependências issues.dependency.issue_no_dependencies=Esta issue atualmente não tem dependências. issues.dependency.pr_no_dependencies=Este pull request atualmente não tem dependências. -issues.dependency.add=Adicione uma nova dependência... +issues.dependency.add=Adicione... issues.dependency.cancel=Cancelar issues.dependency.remove=Remover issues.dependency.issue_number=Número da issue @@ -922,8 +922,8 @@ activity.closed_issues_count_1=Issue fechada activity.closed_issues_count_n=Issues fechadas activity.title.issues_1=+%d Issue activity.title.issues_n=+%d Issues -activity.title.issues_closed_by=%s fechado por %s -activity.title.issues_created_by=%s criado por %s +activity.title.issues_closed_by=%s fechada por %s +activity.title.issues_created_by=%s criada por %s activity.closed_issue_label=Fechado activity.new_issues_count_1=Nova issue activity.new_issues_count_n=Novas issues @@ -1615,7 +1615,7 @@ create_repo=criou o repositório %s rename_repo=renomeou o repositório %[1]s para %[3]s commit_repo=fez push para %[3]s em %[4]s create_issue=`abriu a issue %s#%[2]s` -close_issue=`fechou issue %s#%[2]s` +close_issue=`fechou a issue %s#%[2]s` reopen_issue=`reabriu a issue %s#%[2]s` create_pull_request=`criou o pull request %s#%[2]s` close_pull_request=`fechou o pull request %s#%[2]s` From 0c59edaafa94738b8eaec1620f20887cc35d90e2 Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Fri, 20 Jul 2018 05:10:17 +0300 Subject: [PATCH 118/124] Update xorm to latest version and fix correct `user` table referencing in sql (#4473) --- Gopkg.lock | 10 +- Gopkg.toml | 2 +- models/issue.go | 2 +- models/issue_list.go | 2 +- models/issue_watch.go | 2 +- models/org.go | 4 +- models/repo.go | 2 +- models/repo_watch.go | 2 +- models/user.go | 8 +- vendor/github.com/go-xorm/builder/builder.go | 39 + .../go-xorm/builder/builder_insert.go | 6 +- .../go-xorm/builder/builder_select.go | 55 +- vendor/github.com/go-xorm/builder/cond.go | 9 +- .../go-xorm/builder/cond_compare.go | 8 +- vendor/github.com/go-xorm/builder/cond_eq.go | 20 +- .../github.com/go-xorm/builder/cond_like.go | 2 +- vendor/github.com/go-xorm/builder/cond_neq.go | 20 +- vendor/github.com/go-xorm/builder/cond_not.go | 24 + .../go-xorm/builder/strings_builder.go | 119 +++ vendor/github.com/go-xorm/core/column.go | 4 +- vendor/github.com/go-xorm/core/db.go | 57 +- vendor/github.com/go-xorm/core/dialect.go | 7 +- vendor/github.com/go-xorm/core/filter.go | 6 +- vendor/github.com/go-xorm/core/index.go | 2 + vendor/github.com/go-xorm/core/rows.go | 64 +- vendor/github.com/go-xorm/core/table.go | 2 - vendor/github.com/go-xorm/core/type.go | 38 +- .../github.com/go-xorm/xorm/dialect_mysql.go | 74 ++ .../go-xorm/xorm/dialect_postgres.go | 105 ++- vendor/github.com/go-xorm/xorm/engine.go | 192 ++--- vendor/github.com/go-xorm/xorm/engine_cond.go | 5 +- .../github.com/go-xorm/xorm/engine_table.go | 113 +++ vendor/github.com/go-xorm/xorm/error.go | 31 +- vendor/github.com/go-xorm/xorm/helpers.go | 162 ---- vendor/github.com/go-xorm/xorm/interface.go | 6 + vendor/github.com/go-xorm/xorm/rows.go | 6 +- vendor/github.com/go-xorm/xorm/session.go | 761 +++++++++--------- .../github.com/go-xorm/xorm/session_cols.go | 115 +++ .../github.com/go-xorm/xorm/session_delete.go | 6 +- .../github.com/go-xorm/xorm/session_exist.go | 2 +- .../github.com/go-xorm/xorm/session_find.go | 49 +- vendor/github.com/go-xorm/xorm/session_get.go | 7 +- .../github.com/go-xorm/xorm/session_insert.go | 168 ++-- .../github.com/go-xorm/xorm/session_query.go | 6 +- .../github.com/go-xorm/xorm/session_schema.go | 87 +- vendor/github.com/go-xorm/xorm/session_tx.go | 2 + .../github.com/go-xorm/xorm/session_update.go | 115 ++- vendor/github.com/go-xorm/xorm/statement.go | 280 +++---- vendor/github.com/go-xorm/xorm/xorm.go | 12 +- 49 files changed, 1718 insertions(+), 1102 deletions(-) create mode 100644 vendor/github.com/go-xorm/builder/strings_builder.go create mode 100644 vendor/github.com/go-xorm/xorm/engine_table.go diff --git a/Gopkg.lock b/Gopkg.lock index df8203267..38573b671 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -288,17 +288,19 @@ [[projects]] name = "github.com/go-xorm/builder" packages = ["."] - revision = "488224409dd8aa2ce7a5baf8d10d55764a913738" + revision = "dc8bf48f58fab2b4da338ffd25191905fd741b8f" + version = "v0.3.0" [[projects]] name = "github.com/go-xorm/core" packages = ["."] - revision = "cb1d0ca71f42d3ee1bf4aba7daa16099bc31a7e9" + revision = "c10e21e7e1cec20e09398f2dfae385e58c8df555" + version = "v0.6.0" [[projects]] name = "github.com/go-xorm/xorm" packages = ["."] - revision = "d4149d1eee0c2c488a74a5863fd9caf13d60fd03" + revision = "ad69f7d8f0861a29438154bb0a20b60501298480" [[projects]] branch = "master" @@ -701,6 +703,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "59451a3ad1d449f75c5e9035daf542a377c5c4a397e219bebec0aa0007ab9c39" + inputs-digest = "5ae18d543bbb8186589c003422b333097d67bb5fed8b4c294be70c012ccffc94" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 933c858ce..65155cea9 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -33,7 +33,7 @@ ignored = ["google.golang.org/appengine*"] [[override]] name = "github.com/go-xorm/xorm" #version = "0.6.5" - revision = "d4149d1eee0c2c488a74a5863fd9caf13d60fd03" + revision = "ad69f7d8f0861a29438154bb0a20b60501298480" [[override]] name = "github.com/go-sql-driver/mysql" diff --git a/models/issue.go b/models/issue.go index c89ffa7d0..1ac200c80 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1297,7 +1297,7 @@ func getParticipantsByIssueID(e Engine, issueID int64) ([]*User, error) { And("`comment`.type = ?", CommentTypeComment). And("`user`.is_active = ?", true). And("`user`.prohibit_login = ?", false). - Join("INNER", "user", "`user`.id = `comment`.poster_id"). + Join("INNER", "`user`", "`user`.id = `comment`.poster_id"). Distinct("poster_id"). Find(&userIDs); err != nil { return nil, fmt.Errorf("get poster IDs: %v", err) diff --git a/models/issue_list.go b/models/issue_list.go index 05130a6ee..fdfca71af 100644 --- a/models/issue_list.go +++ b/models/issue_list.go @@ -166,7 +166,7 @@ func (issues IssueList) loadAssignees(e Engine) error { var assignees = make(map[int64][]*User, len(issues)) rows, err := e.Table("issue_assignees"). - Join("INNER", "user", "`user`.id = `issue_assignees`.assignee_id"). + Join("INNER", "`user`", "`user`.id = `issue_assignees`.assignee_id"). In("`issue_assignees`.issue_id", issues.getIssueIDs()). Rows(new(AssigneeIssue)) if err != nil { diff --git a/models/issue_watch.go b/models/issue_watch.go index 3e7d24821..579c91547 100644 --- a/models/issue_watch.go +++ b/models/issue_watch.go @@ -67,7 +67,7 @@ func getIssueWatchers(e Engine, issueID int64) (watches []*IssueWatch, err error Where("`issue_watch`.issue_id = ?", issueID). And("`user`.is_active = ?", true). And("`user`.prohibit_login = ?", false). - Join("INNER", "user", "`user`.id = `issue_watch`.user_id"). + Join("INNER", "`user`", "`user`.id = `issue_watch`.user_id"). Find(&watches) return } diff --git a/models/org.go b/models/org.go index 23f6c58bf..bd5fc825b 100644 --- a/models/org.go +++ b/models/org.go @@ -383,7 +383,7 @@ func GetOwnedOrgsByUserIDDesc(userID int64, desc string) ([]*User, error) { func GetOrgUsersByUserID(uid int64, all bool) ([]*OrgUser, error) { ous := make([]*OrgUser, 0, 10) sess := x. - Join("LEFT", "user", "`org_user`.org_id=`user`.id"). + Join("LEFT", "`user`", "`org_user`.org_id=`user`.id"). Where("`org_user`.uid=?", uid) if !all { // Only show public organizations @@ -575,7 +575,7 @@ func (org *User) getUserTeams(e Engine, userID int64, cols ...string) ([]*Team, return teams, e. Where("`team_user`.org_id = ?", org.ID). Join("INNER", "team_user", "`team_user`.team_id = team.id"). - Join("INNER", "user", "`user`.id=team_user.uid"). + Join("INNER", "`user`", "`user`.id=team_user.uid"). And("`team_user`.uid = ?", userID). Asc("`user`.name"). Cols(cols...). diff --git a/models/repo.go b/models/repo.go index e87883969..3c4908b0d 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1958,7 +1958,7 @@ func DeleteRepository(doer *User, uid, repoID int64) error { func GetRepositoryByOwnerAndName(ownerName, repoName string) (*Repository, error) { var repo Repository has, err := x.Select("repository.*"). - Join("INNER", "user", "`user`.id = repository.owner_id"). + Join("INNER", "`user`", "`user`.id = repository.owner_id"). Where("repository.lower_name = ?", strings.ToLower(repoName)). And("`user`.lower_name = ?", strings.ToLower(ownerName)). Get(&repo) diff --git a/models/repo_watch.go b/models/repo_watch.go index 8019027c1..95c7e44e9 100644 --- a/models/repo_watch.go +++ b/models/repo_watch.go @@ -54,7 +54,7 @@ func getWatchers(e Engine, repoID int64) ([]*Watch, error) { return watches, e.Where("`watch`.repo_id=?", repoID). And("`user`.is_active=?", true). And("`user`.prohibit_login=?", false). - Join("INNER", "user", "`user`.id = `watch`.user_id"). + Join("INNER", "`user`", "`user`.id = `watch`.user_id"). Find(&watches) } diff --git a/models/user.go b/models/user.go index 0b7af8df6..32b9bfec9 100644 --- a/models/user.go +++ b/models/user.go @@ -374,9 +374,9 @@ func (u *User) GetFollowers(page int) ([]*User, error) { Limit(ItemsPerPage, (page-1)*ItemsPerPage). Where("follow.follow_id=?", u.ID) if setting.UsePostgreSQL { - sess = sess.Join("LEFT", "follow", `"user".id=follow.user_id`) + sess = sess.Join("LEFT", "follow", "`user`.id=follow.user_id") } else { - sess = sess.Join("LEFT", "follow", "user.id=follow.user_id") + sess = sess.Join("LEFT", "follow", "`user`.id=follow.user_id") } return users, sess.Find(&users) } @@ -393,9 +393,9 @@ func (u *User) GetFollowing(page int) ([]*User, error) { Limit(ItemsPerPage, (page-1)*ItemsPerPage). Where("follow.user_id=?", u.ID) if setting.UsePostgreSQL { - sess = sess.Join("LEFT", "follow", `"user".id=follow.follow_id`) + sess = sess.Join("LEFT", "follow", "`user`.id=follow.follow_id") } else { - sess = sess.Join("LEFT", "follow", "user.id=follow.follow_id") + sess = sess.Join("LEFT", "follow", "`user`.id=follow.follow_id") } return users, sess.Find(&users) } diff --git a/vendor/github.com/go-xorm/builder/builder.go b/vendor/github.com/go-xorm/builder/builder.go index 1253b9887..80586ce4e 100644 --- a/vendor/github.com/go-xorm/builder/builder.go +++ b/vendor/github.com/go-xorm/builder/builder.go @@ -4,6 +4,10 @@ package builder +import ( + "fmt" +) + type optype byte const ( @@ -29,6 +33,9 @@ type Builder struct { joins []join inserts Eq updates []Eq + orderBy string + groupBy string + having string } // Select creates a select Builder @@ -67,6 +74,11 @@ func (b *Builder) From(tableName string) *Builder { return b } +// TableName returns the table name +func (b *Builder) TableName() string { + return b.tableName +} + // Into sets insert table name func (b *Builder) Into(tableName string) *Builder { b.tableName = tableName @@ -178,6 +190,33 @@ func (b *Builder) ToSQL() (string, []interface{}, error) { return w.writer.String(), w.args, nil } +// ConvertPlaceholder replaces ? to $1, $2 ... or :1, :2 ... according prefix +func ConvertPlaceholder(sql, prefix string) (string, error) { + buf := StringBuilder{} + var j, start = 0, 0 + for i := 0; i < len(sql); i++ { + if sql[i] == '?' { + _, err := buf.WriteString(sql[start:i]) + if err != nil { + return "", err + } + start = i + 1 + + _, err = buf.WriteString(prefix) + if err != nil { + return "", err + } + + j = j + 1 + _, err = buf.WriteString(fmt.Sprintf("%d", j)) + if err != nil { + return "", err + } + } + } + return buf.String(), nil +} + // ToSQL convert a builder or condtions to SQL and args func ToSQL(cond interface{}) (string, []interface{}, error) { switch cond.(type) { diff --git a/vendor/github.com/go-xorm/builder/builder_insert.go b/vendor/github.com/go-xorm/builder/builder_insert.go index decec9313..9b213ec73 100644 --- a/vendor/github.com/go-xorm/builder/builder_insert.go +++ b/vendor/github.com/go-xorm/builder/builder_insert.go @@ -15,7 +15,7 @@ func (b *Builder) insertWriteTo(w Writer) error { return errors.New("no table indicated") } if len(b.inserts) <= 0 { - return errors.New("no column to be update") + return errors.New("no column to be insert") } if _, err := fmt.Fprintf(w, "INSERT INTO %s (", b.tableName); err != nil { @@ -26,7 +26,9 @@ func (b *Builder) insertWriteTo(w Writer) error { var bs []byte var valBuffer = bytes.NewBuffer(bs) var i = 0 - for col, value := range b.inserts { + + for _, col := range b.inserts.sortedKeys() { + value := b.inserts[col] fmt.Fprint(w, col) if e, ok := value.(expr); ok { fmt.Fprint(valBuffer, e.sql) diff --git a/vendor/github.com/go-xorm/builder/builder_select.go b/vendor/github.com/go-xorm/builder/builder_select.go index 3a3967ccc..deaacbd02 100644 --- a/vendor/github.com/go-xorm/builder/builder_select.go +++ b/vendor/github.com/go-xorm/builder/builder_select.go @@ -34,24 +34,65 @@ func (b *Builder) selectWriteTo(w Writer) error { } } - if _, err := fmt.Fprintf(w, " FROM %s", b.tableName); err != nil { + if _, err := fmt.Fprint(w, " FROM ", b.tableName); err != nil { return err } for _, v := range b.joins { - fmt.Fprintf(w, " %s JOIN %s ON ", v.joinType, v.joinTable) + if _, err := fmt.Fprintf(w, " %s JOIN %s ON ", v.joinType, v.joinTable); err != nil { + return err + } + if err := v.joinCond.WriteTo(w); err != nil { return err } } - if !b.cond.IsValid() { - return nil + if b.cond.IsValid() { + if _, err := fmt.Fprint(w, " WHERE "); err != nil { + return err + } + + if err := b.cond.WriteTo(w); err != nil { + return err + } } - if _, err := fmt.Fprint(w, " WHERE "); err != nil { - return err + if len(b.groupBy) > 0 { + if _, err := fmt.Fprint(w, " GROUP BY ", b.groupBy); err != nil { + return err + } } - return b.cond.WriteTo(w) + if len(b.having) > 0 { + if _, err := fmt.Fprint(w, " HAVING ", b.having); err != nil { + return err + } + } + + if len(b.orderBy) > 0 { + if _, err := fmt.Fprint(w, " ORDER BY ", b.orderBy); err != nil { + return err + } + } + + return nil +} + +// OrderBy orderBy SQL +func (b *Builder) OrderBy(orderBy string) *Builder { + b.orderBy = orderBy + return b +} + +// GroupBy groupby SQL +func (b *Builder) GroupBy(groupby string) *Builder { + b.groupBy = groupby + return b +} + +// Having having SQL +func (b *Builder) Having(having string) *Builder { + b.having = having + return b } diff --git a/vendor/github.com/go-xorm/builder/cond.go b/vendor/github.com/go-xorm/builder/cond.go index 77dd139bf..c0c2553de 100644 --- a/vendor/github.com/go-xorm/builder/cond.go +++ b/vendor/github.com/go-xorm/builder/cond.go @@ -5,7 +5,6 @@ package builder import ( - "bytes" "io" ) @@ -19,15 +18,15 @@ var _ Writer = NewWriter() // BytesWriter implments Writer and save SQL in bytes.Buffer type BytesWriter struct { - writer *bytes.Buffer - buffer []byte + writer *StringBuilder args []interface{} } // NewWriter creates a new string writer func NewWriter() *BytesWriter { - w := &BytesWriter{} - w.writer = bytes.NewBuffer(w.buffer) + w := &BytesWriter{ + writer: &StringBuilder{}, + } return w } diff --git a/vendor/github.com/go-xorm/builder/cond_compare.go b/vendor/github.com/go-xorm/builder/cond_compare.go index e10ef7447..1c293719c 100644 --- a/vendor/github.com/go-xorm/builder/cond_compare.go +++ b/vendor/github.com/go-xorm/builder/cond_compare.go @@ -10,7 +10,13 @@ import "fmt" func WriteMap(w Writer, data map[string]interface{}, op string) error { var args = make([]interface{}, 0, len(data)) var i = 0 - for k, v := range data { + keys := make([]string, 0, len(data)) + for k := range data { + keys = append(keys, k) + } + + for _, k := range keys { + v := data[k] switch v.(type) { case expr: if _, err := fmt.Fprintf(w, "%s%s(", k, op); err != nil { diff --git a/vendor/github.com/go-xorm/builder/cond_eq.go b/vendor/github.com/go-xorm/builder/cond_eq.go index 8777727ff..79d795e6d 100644 --- a/vendor/github.com/go-xorm/builder/cond_eq.go +++ b/vendor/github.com/go-xorm/builder/cond_eq.go @@ -4,7 +4,10 @@ package builder -import "fmt" +import ( + "fmt" + "sort" +) // Incr implements a type used by Eq type Incr int @@ -19,7 +22,8 @@ var _ Cond = Eq{} func (eq Eq) opWriteTo(op string, w Writer) error { var i = 0 - for k, v := range eq { + for _, k := range eq.sortedKeys() { + v := eq[k] switch v.(type) { case []int, []int64, []string, []int32, []int16, []int8, []uint, []uint64, []uint32, []uint16, []interface{}: if err := In(k, v).WriteTo(w); err != nil { @@ -94,3 +98,15 @@ func (eq Eq) Or(conds ...Cond) Cond { func (eq Eq) IsValid() bool { return len(eq) > 0 } + +// sortedKeys returns all keys of this Eq sorted with sort.Strings. +// It is used internally for consistent ordering when generating +// SQL, see https://github.com/go-xorm/builder/issues/10 +func (eq Eq) sortedKeys() []string { + keys := make([]string, 0, len(eq)) + for key := range eq { + keys = append(keys, key) + } + sort.Strings(keys) + return keys +} diff --git a/vendor/github.com/go-xorm/builder/cond_like.go b/vendor/github.com/go-xorm/builder/cond_like.go index 9291f12c9..e34202f8b 100644 --- a/vendor/github.com/go-xorm/builder/cond_like.go +++ b/vendor/github.com/go-xorm/builder/cond_like.go @@ -16,7 +16,7 @@ func (like Like) WriteTo(w Writer) error { if _, err := fmt.Fprintf(w, "%s LIKE ?", like[0]); err != nil { return err } - // FIXME: if use other regular express, this will be failed. but for compitable, keep this + // FIXME: if use other regular express, this will be failed. but for compatible, keep this if like[1][0] == '%' || like[1][len(like[1])-1] == '%' { w.Append(like[1]) } else { diff --git a/vendor/github.com/go-xorm/builder/cond_neq.go b/vendor/github.com/go-xorm/builder/cond_neq.go index d07b2b18e..3a8f3136d 100644 --- a/vendor/github.com/go-xorm/builder/cond_neq.go +++ b/vendor/github.com/go-xorm/builder/cond_neq.go @@ -4,7 +4,10 @@ package builder -import "fmt" +import ( + "fmt" + "sort" +) // Neq defines not equal conditions type Neq map[string]interface{} @@ -15,7 +18,8 @@ var _ Cond = Neq{} func (neq Neq) WriteTo(w Writer) error { var args = make([]interface{}, 0, len(neq)) var i = 0 - for k, v := range neq { + for _, k := range neq.sortedKeys() { + v := neq[k] switch v.(type) { case []int, []int64, []string, []int32, []int16, []int8: if err := NotIn(k, v).WriteTo(w); err != nil { @@ -76,3 +80,15 @@ func (neq Neq) Or(conds ...Cond) Cond { func (neq Neq) IsValid() bool { return len(neq) > 0 } + +// sortedKeys returns all keys of this Neq sorted with sort.Strings. +// It is used internally for consistent ordering when generating +// SQL, see https://github.com/go-xorm/builder/issues/10 +func (neq Neq) sortedKeys() []string { + keys := make([]string, 0, len(neq)) + for key := range neq { + keys = append(keys, key) + } + sort.Strings(keys) + return keys +} diff --git a/vendor/github.com/go-xorm/builder/cond_not.go b/vendor/github.com/go-xorm/builder/cond_not.go index 294a7e072..667dfe729 100644 --- a/vendor/github.com/go-xorm/builder/cond_not.go +++ b/vendor/github.com/go-xorm/builder/cond_not.go @@ -21,6 +21,18 @@ func (not Not) WriteTo(w Writer) error { if _, err := fmt.Fprint(w, "("); err != nil { return err } + case Eq: + if len(not[0].(Eq)) > 1 { + if _, err := fmt.Fprint(w, "("); err != nil { + return err + } + } + case Neq: + if len(not[0].(Neq)) > 1 { + if _, err := fmt.Fprint(w, "("); err != nil { + return err + } + } } if err := not[0].WriteTo(w); err != nil { @@ -32,6 +44,18 @@ func (not Not) WriteTo(w Writer) error { if _, err := fmt.Fprint(w, ")"); err != nil { return err } + case Eq: + if len(not[0].(Eq)) > 1 { + if _, err := fmt.Fprint(w, ")"); err != nil { + return err + } + } + case Neq: + if len(not[0].(Neq)) > 1 { + if _, err := fmt.Fprint(w, ")"); err != nil { + return err + } + } } return nil diff --git a/vendor/github.com/go-xorm/builder/strings_builder.go b/vendor/github.com/go-xorm/builder/strings_builder.go new file mode 100644 index 000000000..d4de8717e --- /dev/null +++ b/vendor/github.com/go-xorm/builder/strings_builder.go @@ -0,0 +1,119 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package builder + +import ( + "unicode/utf8" + "unsafe" +) + +// A StringBuilder is used to efficiently build a string using Write methods. +// It minimizes memory copying. The zero value is ready to use. +// Do not copy a non-zero Builder. +type StringBuilder struct { + addr *StringBuilder // of receiver, to detect copies by value + buf []byte +} + +// noescape hides a pointer from escape analysis. noescape is +// the identity function but escape analysis doesn't think the +// output depends on the input. noescape is inlined and currently +// compiles down to zero instructions. +// USE CAREFULLY! +// This was copied from the runtime; see issues 23382 and 7921. +//go:nosplit +func noescape(p unsafe.Pointer) unsafe.Pointer { + x := uintptr(p) + return unsafe.Pointer(x ^ 0) +} + +func (b *StringBuilder) copyCheck() { + if b.addr == nil { + // This hack works around a failing of Go's escape analysis + // that was causing b to escape and be heap allocated. + // See issue 23382. + // TODO: once issue 7921 is fixed, this should be reverted to + // just "b.addr = b". + b.addr = (*StringBuilder)(noescape(unsafe.Pointer(b))) + } else if b.addr != b { + panic("strings: illegal use of non-zero Builder copied by value") + } +} + +// String returns the accumulated string. +func (b *StringBuilder) String() string { + return *(*string)(unsafe.Pointer(&b.buf)) +} + +// Len returns the number of accumulated bytes; b.Len() == len(b.String()). +func (b *StringBuilder) Len() int { return len(b.buf) } + +// Reset resets the Builder to be empty. +func (b *StringBuilder) Reset() { + b.addr = nil + b.buf = nil +} + +// grow copies the buffer to a new, larger buffer so that there are at least n +// bytes of capacity beyond len(b.buf). +func (b *StringBuilder) grow(n int) { + buf := make([]byte, len(b.buf), 2*cap(b.buf)+n) + copy(buf, b.buf) + b.buf = buf +} + +// Grow grows b's capacity, if necessary, to guarantee space for +// another n bytes. After Grow(n), at least n bytes can be written to b +// without another allocation. If n is negative, Grow panics. +func (b *StringBuilder) Grow(n int) { + b.copyCheck() + if n < 0 { + panic("strings.Builder.Grow: negative count") + } + if cap(b.buf)-len(b.buf) < n { + b.grow(n) + } +} + +// Write appends the contents of p to b's buffer. +// Write always returns len(p), nil. +func (b *StringBuilder) Write(p []byte) (int, error) { + b.copyCheck() + b.buf = append(b.buf, p...) + return len(p), nil +} + +// WriteByte appends the byte c to b's buffer. +// The returned error is always nil. +func (b *StringBuilder) WriteByte(c byte) error { + b.copyCheck() + b.buf = append(b.buf, c) + return nil +} + +// WriteRune appends the UTF-8 encoding of Unicode code point r to b's buffer. +// It returns the length of r and a nil error. +func (b *StringBuilder) WriteRune(r rune) (int, error) { + b.copyCheck() + if r < utf8.RuneSelf { + b.buf = append(b.buf, byte(r)) + return 1, nil + } + l := len(b.buf) + if cap(b.buf)-l < utf8.UTFMax { + b.grow(utf8.UTFMax) + } + n := utf8.EncodeRune(b.buf[l:l+utf8.UTFMax], r) + b.buf = b.buf[:l+n] + return n, nil +} + +// WriteString appends the contents of s to b's buffer. +// It returns the length of s and a nil error. +func (b *StringBuilder) WriteString(s string) (int, error) { + b.copyCheck() + b.buf = append(b.buf, s...) + return len(s), nil +} diff --git a/vendor/github.com/go-xorm/core/column.go b/vendor/github.com/go-xorm/core/column.go index 65370bb5b..20912b713 100644 --- a/vendor/github.com/go-xorm/core/column.go +++ b/vendor/github.com/go-xorm/core/column.go @@ -147,12 +147,12 @@ func (col *Column) ValueOfV(dataStruct *reflect.Value) (*reflect.Value, error) { } fieldValue = fieldValue.Elem().FieldByName(fieldPath[i+1]) } else { - return nil, fmt.Errorf("field %v is not valid", col.FieldName) + return nil, fmt.Errorf("field %v is not valid", col.FieldName) } } if !fieldValue.IsValid() { - return nil, fmt.Errorf("field %v is not valid", col.FieldName) + return nil, fmt.Errorf("field %v is not valid", col.FieldName) } return &fieldValue, nil diff --git a/vendor/github.com/go-xorm/core/db.go b/vendor/github.com/go-xorm/core/db.go index 6111c4b33..9969fa431 100644 --- a/vendor/github.com/go-xorm/core/db.go +++ b/vendor/github.com/go-xorm/core/db.go @@ -7,6 +7,11 @@ import ( "fmt" "reflect" "regexp" + "sync" +) + +var ( + DefaultCacheSize = 200 ) func MapToSlice(query string, mp interface{}) (string, []interface{}, error) { @@ -58,9 +63,16 @@ func StructToSlice(query string, st interface{}) (string, []interface{}, error) return query, args, nil } +type cacheStruct struct { + value reflect.Value + idx int +} + type DB struct { *sql.DB - Mapper IMapper + Mapper IMapper + reflectCache map[reflect.Type]*cacheStruct + reflectCacheMutex sync.RWMutex } func Open(driverName, dataSourceName string) (*DB, error) { @@ -68,11 +80,32 @@ func Open(driverName, dataSourceName string) (*DB, error) { if err != nil { return nil, err } - return &DB{db, NewCacheMapper(&SnakeMapper{})}, nil + return &DB{ + DB: db, + Mapper: NewCacheMapper(&SnakeMapper{}), + reflectCache: make(map[reflect.Type]*cacheStruct), + }, nil } func FromDB(db *sql.DB) *DB { - return &DB{db, NewCacheMapper(&SnakeMapper{})} + return &DB{ + DB: db, + Mapper: NewCacheMapper(&SnakeMapper{}), + reflectCache: make(map[reflect.Type]*cacheStruct), + } +} + +func (db *DB) reflectNew(typ reflect.Type) reflect.Value { + db.reflectCacheMutex.Lock() + defer db.reflectCacheMutex.Unlock() + cs, ok := db.reflectCache[typ] + if !ok || cs.idx+1 > DefaultCacheSize-1 { + cs = &cacheStruct{reflect.MakeSlice(reflect.SliceOf(typ), DefaultCacheSize, DefaultCacheSize), 0} + db.reflectCache[typ] = cs + } else { + cs.idx = cs.idx + 1 + } + return cs.value.Index(cs.idx).Addr() } func (db *DB) Query(query string, args ...interface{}) (*Rows, error) { @@ -83,7 +116,7 @@ func (db *DB) Query(query string, args ...interface{}) (*Rows, error) { } return nil, err } - return &Rows{rows, db.Mapper}, nil + return &Rows{rows, db}, nil } func (db *DB) QueryMap(query string, mp interface{}) (*Rows, error) { @@ -128,8 +161,8 @@ func (db *DB) QueryRowStruct(query string, st interface{}) *Row { type Stmt struct { *sql.Stmt - Mapper IMapper - names map[string]int + db *DB + names map[string]int } func (db *DB) Prepare(query string) (*Stmt, error) { @@ -145,7 +178,7 @@ func (db *DB) Prepare(query string) (*Stmt, error) { if err != nil { return nil, err } - return &Stmt{stmt, db.Mapper, names}, nil + return &Stmt{stmt, db, names}, nil } func (s *Stmt) ExecMap(mp interface{}) (sql.Result, error) { @@ -179,7 +212,7 @@ func (s *Stmt) Query(args ...interface{}) (*Rows, error) { if err != nil { return nil, err } - return &Rows{rows, s.Mapper}, nil + return &Rows{rows, s.db}, nil } func (s *Stmt) QueryMap(mp interface{}) (*Rows, error) { @@ -274,7 +307,7 @@ func (EmptyScanner) Scan(src interface{}) error { type Tx struct { *sql.Tx - Mapper IMapper + db *DB } func (db *DB) Begin() (*Tx, error) { @@ -282,7 +315,7 @@ func (db *DB) Begin() (*Tx, error) { if err != nil { return nil, err } - return &Tx{tx, db.Mapper}, nil + return &Tx{tx, db}, nil } func (tx *Tx) Prepare(query string) (*Stmt, error) { @@ -298,7 +331,7 @@ func (tx *Tx) Prepare(query string) (*Stmt, error) { if err != nil { return nil, err } - return &Stmt{stmt, tx.Mapper, names}, nil + return &Stmt{stmt, tx.db, names}, nil } func (tx *Tx) Stmt(stmt *Stmt) *Stmt { @@ -327,7 +360,7 @@ func (tx *Tx) Query(query string, args ...interface{}) (*Rows, error) { if err != nil { return nil, err } - return &Rows{rows, tx.Mapper}, nil + return &Rows{rows, tx.db}, nil } func (tx *Tx) QueryMap(query string, mp interface{}) (*Rows, error) { diff --git a/vendor/github.com/go-xorm/core/dialect.go b/vendor/github.com/go-xorm/core/dialect.go index 6f2e81d01..c288a0847 100644 --- a/vendor/github.com/go-xorm/core/dialect.go +++ b/vendor/github.com/go-xorm/core/dialect.go @@ -74,6 +74,7 @@ type Dialect interface { GetIndexes(tableName string) (map[string]*Index, error) Filters() []Filter + SetParams(params map[string]string) } func OpenDialect(dialect Dialect) (*DB, error) { @@ -148,7 +149,8 @@ func (db *Base) SupportDropIfExists() bool { } func (db *Base) DropTableSql(tableName string) string { - return fmt.Sprintf("DROP TABLE IF EXISTS `%s`", tableName) + quote := db.dialect.Quote + return fmt.Sprintf("DROP TABLE IF EXISTS %s", quote(tableName)) } func (db *Base) HasRecords(query string, args ...interface{}) (bool, error) { @@ -289,6 +291,9 @@ func (b *Base) LogSQL(sql string, args []interface{}) { } } +func (b *Base) SetParams(params map[string]string) { +} + var ( dialects = map[string]func() Dialect{} ) diff --git a/vendor/github.com/go-xorm/core/filter.go b/vendor/github.com/go-xorm/core/filter.go index 60caaf290..35b0ece67 100644 --- a/vendor/github.com/go-xorm/core/filter.go +++ b/vendor/github.com/go-xorm/core/filter.go @@ -37,9 +37,9 @@ func (q *Quoter) Quote(content string) string { func (i *IdFilter) Do(sql string, dialect Dialect, table *Table) string { quoter := NewQuoter(dialect) if table != nil && len(table.PrimaryKeys) == 1 { - sql = strings.Replace(sql, "`(id)`", quoter.Quote(table.PrimaryKeys[0]), -1) - sql = strings.Replace(sql, quoter.Quote("(id)"), quoter.Quote(table.PrimaryKeys[0]), -1) - return strings.Replace(sql, "(id)", quoter.Quote(table.PrimaryKeys[0]), -1) + sql = strings.Replace(sql, " `(id)` ", " "+quoter.Quote(table.PrimaryKeys[0])+" ", -1) + sql = strings.Replace(sql, " "+quoter.Quote("(id)")+" ", " "+quoter.Quote(table.PrimaryKeys[0])+" ", -1) + return strings.Replace(sql, " (id) ", " "+quoter.Quote(table.PrimaryKeys[0])+" ", -1) } return sql } diff --git a/vendor/github.com/go-xorm/core/index.go b/vendor/github.com/go-xorm/core/index.go index 73b95175a..9aa1b7ac9 100644 --- a/vendor/github.com/go-xorm/core/index.go +++ b/vendor/github.com/go-xorm/core/index.go @@ -22,6 +22,8 @@ type Index struct { func (index *Index) XName(tableName string) string { if !strings.HasPrefix(index.Name, "UQE_") && !strings.HasPrefix(index.Name, "IDX_") { + tableName = strings.Replace(tableName, `"`, "", -1) + tableName = strings.Replace(tableName, `.`, "_", -1) if index.Type == UniqueType { return fmt.Sprintf("UQE_%v_%v", tableName, index.Name) } diff --git a/vendor/github.com/go-xorm/core/rows.go b/vendor/github.com/go-xorm/core/rows.go index 4a4acaa4c..580de4f9c 100644 --- a/vendor/github.com/go-xorm/core/rows.go +++ b/vendor/github.com/go-xorm/core/rows.go @@ -9,7 +9,7 @@ import ( type Rows struct { *sql.Rows - Mapper IMapper + db *DB } func (rs *Rows) ToMapString() ([]map[string]string, error) { @@ -105,7 +105,7 @@ func (rs *Rows) ScanStructByName(dest interface{}) error { newDest := make([]interface{}, len(cols)) var v EmptyScanner for j, name := range cols { - f := fieldByName(vv.Elem(), rs.Mapper.Table2Obj(name)) + f := fieldByName(vv.Elem(), rs.db.Mapper.Table2Obj(name)) if f.IsValid() { newDest[j] = f.Addr().Interface() } else { @@ -116,36 +116,6 @@ func (rs *Rows) ScanStructByName(dest interface{}) error { return rs.Rows.Scan(newDest...) } -type cacheStruct struct { - value reflect.Value - idx int -} - -var ( - reflectCache = make(map[reflect.Type]*cacheStruct) - reflectCacheMutex sync.RWMutex -) - -func ReflectNew(typ reflect.Type) reflect.Value { - reflectCacheMutex.RLock() - cs, ok := reflectCache[typ] - reflectCacheMutex.RUnlock() - - const newSize = 200 - - if !ok || cs.idx+1 > newSize-1 { - cs = &cacheStruct{reflect.MakeSlice(reflect.SliceOf(typ), newSize, newSize), 0} - reflectCacheMutex.Lock() - reflectCache[typ] = cs - reflectCacheMutex.Unlock() - } else { - reflectCacheMutex.Lock() - cs.idx = cs.idx + 1 - reflectCacheMutex.Unlock() - } - return cs.value.Index(cs.idx).Addr() -} - // scan data to a slice's pointer, slice's length should equal to columns' number func (rs *Rows) ScanSlice(dest interface{}) error { vv := reflect.ValueOf(dest) @@ -197,9 +167,7 @@ func (rs *Rows) ScanMap(dest interface{}) error { vvv := vv.Elem() for i, _ := range cols { - newDest[i] = ReflectNew(vvv.Type().Elem()).Interface() - //v := reflect.New(vvv.Type().Elem()) - //newDest[i] = v.Interface() + newDest[i] = rs.db.reflectNew(vvv.Type().Elem()).Interface() } err = rs.Rows.Scan(newDest...) @@ -215,32 +183,6 @@ func (rs *Rows) ScanMap(dest interface{}) error { return nil } -/*func (rs *Rows) ScanMap(dest interface{}) error { - vv := reflect.ValueOf(dest) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return errors.New("dest should be a map's pointer") - } - - cols, err := rs.Columns() - if err != nil { - return err - } - - newDest := make([]interface{}, len(cols)) - err = rs.ScanSlice(newDest) - if err != nil { - return err - } - - vvv := vv.Elem() - - for i, name := range cols { - vname := reflect.ValueOf(name) - vvv.SetMapIndex(vname, reflect.ValueOf(newDest[i]).Elem()) - } - - return nil -}*/ type Row struct { rows *Rows // One of these two will be non-nil: diff --git a/vendor/github.com/go-xorm/core/table.go b/vendor/github.com/go-xorm/core/table.go index 88199bedd..b5d079404 100644 --- a/vendor/github.com/go-xorm/core/table.go +++ b/vendor/github.com/go-xorm/core/table.go @@ -49,7 +49,6 @@ func NewTable(name string, t reflect.Type) *Table { } func (table *Table) columnsByName(name string) []*Column { - n := len(name) for k := range table.columnsMap { @@ -75,7 +74,6 @@ func (table *Table) GetColumn(name string) *Column { } func (table *Table) GetColumnIdx(name string, idx int) *Column { - cols := table.columnsByName(name) if cols != nil && idx < len(cols) { diff --git a/vendor/github.com/go-xorm/core/type.go b/vendor/github.com/go-xorm/core/type.go index 8010a2220..5cbf93057 100644 --- a/vendor/github.com/go-xorm/core/type.go +++ b/vendor/github.com/go-xorm/core/type.go @@ -69,15 +69,18 @@ var ( Enum = "ENUM" Set = "SET" - Char = "CHAR" - Varchar = "VARCHAR" - NVarchar = "NVARCHAR" - TinyText = "TINYTEXT" - Text = "TEXT" - Clob = "CLOB" - MediumText = "MEDIUMTEXT" - LongText = "LONGTEXT" - Uuid = "UUID" + Char = "CHAR" + Varchar = "VARCHAR" + NVarchar = "NVARCHAR" + TinyText = "TINYTEXT" + Text = "TEXT" + NText = "NTEXT" + Clob = "CLOB" + MediumText = "MEDIUMTEXT" + LongText = "LONGTEXT" + Uuid = "UUID" + UniqueIdentifier = "UNIQUEIDENTIFIER" + SysName = "SYSNAME" Date = "DATE" DateTime = "DATETIME" @@ -128,10 +131,12 @@ var ( NVarchar: TEXT_TYPE, TinyText: TEXT_TYPE, Text: TEXT_TYPE, + NText: TEXT_TYPE, MediumText: TEXT_TYPE, LongText: TEXT_TYPE, Uuid: TEXT_TYPE, Clob: TEXT_TYPE, + SysName: TEXT_TYPE, Date: TIME_TYPE, DateTime: TIME_TYPE, @@ -148,11 +153,12 @@ var ( Binary: BLOB_TYPE, VarBinary: BLOB_TYPE, - TinyBlob: BLOB_TYPE, - Blob: BLOB_TYPE, - MediumBlob: BLOB_TYPE, - LongBlob: BLOB_TYPE, - Bytea: BLOB_TYPE, + TinyBlob: BLOB_TYPE, + Blob: BLOB_TYPE, + MediumBlob: BLOB_TYPE, + LongBlob: BLOB_TYPE, + Bytea: BLOB_TYPE, + UniqueIdentifier: BLOB_TYPE, Bool: NUMERIC_TYPE, @@ -289,9 +295,9 @@ func SQLType2Type(st SQLType) reflect.Type { return reflect.TypeOf(float32(1)) case Double: return reflect.TypeOf(float64(1)) - case Char, Varchar, NVarchar, TinyText, Text, MediumText, LongText, Enum, Set, Uuid, Clob: + case Char, Varchar, NVarchar, TinyText, Text, NText, MediumText, LongText, Enum, Set, Uuid, Clob, SysName: return reflect.TypeOf("") - case TinyBlob, Blob, LongBlob, Bytea, Binary, MediumBlob, VarBinary: + case TinyBlob, Blob, LongBlob, Bytea, Binary, MediumBlob, VarBinary, UniqueIdentifier: return reflect.TypeOf([]byte{}) case Bool: return reflect.TypeOf(true) diff --git a/vendor/github.com/go-xorm/xorm/dialect_mysql.go b/vendor/github.com/go-xorm/xorm/dialect_mysql.go index 99100b232..f2b4ff7a7 100644 --- a/vendor/github.com/go-xorm/xorm/dialect_mysql.go +++ b/vendor/github.com/go-xorm/xorm/dialect_mysql.go @@ -172,12 +172,33 @@ type mysql struct { allowAllFiles bool allowOldPasswords bool clientFoundRows bool + rowFormat string } func (db *mysql) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error { return db.Base.Init(d, db, uri, drivername, dataSourceName) } +func (db *mysql) SetParams(params map[string]string) { + rowFormat, ok := params["rowFormat"] + if ok { + var t = strings.ToUpper(rowFormat) + switch t { + case "COMPACT": + fallthrough + case "REDUNDANT": + fallthrough + case "DYNAMIC": + fallthrough + case "COMPRESSED": + db.rowFormat = t + break + default: + break + } + } +} + func (db *mysql) SqlType(c *core.Column) string { var res string switch t := c.SQLType.Name; t { @@ -487,6 +508,59 @@ func (db *mysql) GetIndexes(tableName string) (map[string]*core.Index, error) { return indexes, nil } +func (db *mysql) CreateTableSql(table *core.Table, tableName, storeEngine, charset string) string { + var sql string + sql = "CREATE TABLE IF NOT EXISTS " + if tableName == "" { + tableName = table.Name + } + + sql += db.Quote(tableName) + sql += " (" + + if len(table.ColumnsSeq()) > 0 { + pkList := table.PrimaryKeys + + for _, colName := range table.ColumnsSeq() { + col := table.GetColumn(colName) + if col.IsPrimaryKey && len(pkList) == 1 { + sql += col.String(db) + } else { + sql += col.StringNoPk(db) + } + sql = strings.TrimSpace(sql) + if len(col.Comment) > 0 { + sql += " COMMENT '" + col.Comment + "'" + } + sql += ", " + } + + if len(pkList) > 1 { + sql += "PRIMARY KEY ( " + sql += db.Quote(strings.Join(pkList, db.Quote(","))) + sql += " ), " + } + + sql = sql[:len(sql)-2] + } + sql += ")" + + if storeEngine != "" { + sql += " ENGINE=" + storeEngine + } + + if len(charset) == 0 { + charset = db.URI().Charset + } else if len(charset) > 0 { + sql += " DEFAULT CHARSET " + charset + } + + if db.rowFormat != "" { + sql += " ROW_FORMAT=" + db.rowFormat + } + return sql +} + func (db *mysql) Filters() []core.Filter { return []core.Filter{&core.IdFilter{}} } diff --git a/vendor/github.com/go-xorm/xorm/dialect_postgres.go b/vendor/github.com/go-xorm/xorm/dialect_postgres.go index d6f71acc1..1f74bd312 100644 --- a/vendor/github.com/go-xorm/xorm/dialect_postgres.go +++ b/vendor/github.com/go-xorm/xorm/dialect_postgres.go @@ -769,14 +769,21 @@ var ( DefaultPostgresSchema = "public" ) +const postgresPublicSchema = "public" + type postgres struct { core.Base - schema string } func (db *postgres) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error { - db.schema = DefaultPostgresSchema - return db.Base.Init(d, db, uri, drivername, dataSourceName) + err := db.Base.Init(d, db, uri, drivername, dataSourceName) + if err != nil { + return err + } + if db.Schema == "" { + db.Schema = DefaultPostgresSchema + } + return nil } func (db *postgres) SqlType(c *core.Column) string { @@ -873,32 +880,42 @@ func (db *postgres) IndexOnTable() bool { } func (db *postgres) IndexCheckSql(tableName, idxName string) (string, []interface{}) { - args := []interface{}{tableName, idxName} + if len(db.Schema) == 0 { + args := []interface{}{tableName, idxName} + return `SELECT indexname FROM pg_indexes WHERE tablename = ? AND indexname = ?`, args + } + + args := []interface{}{db.Schema, tableName, idxName} return `SELECT indexname FROM pg_indexes ` + - `WHERE tablename = ? AND indexname = ?`, args + `WHERE schemaname = ? AND tablename = ? AND indexname = ?`, args } func (db *postgres) TableCheckSql(tableName string) (string, []interface{}) { - args := []interface{}{tableName} - return `SELECT tablename FROM pg_tables WHERE tablename = ?`, args + if len(db.Schema) == 0 { + args := []interface{}{tableName} + return `SELECT tablename FROM pg_tables WHERE tablename = ?`, args + } + + args := []interface{}{db.Schema, tableName} + return `SELECT tablename FROM pg_tables WHERE schemaname = ? AND tablename = ?`, args } -/*func (db *postgres) ColumnCheckSql(tableName, colName string) (string, []interface{}) { - args := []interface{}{tableName, colName} - return "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ?" + - " AND column_name = ?", args -}*/ - func (db *postgres) ModifyColumnSql(tableName string, col *core.Column) string { - return fmt.Sprintf("alter table %s ALTER COLUMN %s TYPE %s", - tableName, col.Name, db.SqlType(col)) + if len(db.Schema) == 0 { + return fmt.Sprintf("alter table %s ALTER COLUMN %s TYPE %s", + tableName, col.Name, db.SqlType(col)) + } + return fmt.Sprintf("alter table %s.%s ALTER COLUMN %s TYPE %s", + db.Schema, tableName, col.Name, db.SqlType(col)) } func (db *postgres) DropIndexSql(tableName string, index *core.Index) string { - //var unique string quote := db.Quote idxName := index.Name + tableName = strings.Replace(tableName, `"`, "", -1) + tableName = strings.Replace(tableName, `.`, "_", -1) + if !strings.HasPrefix(idxName, "UQE_") && !strings.HasPrefix(idxName, "IDX_") { if index.Type == core.UniqueType { @@ -907,13 +924,21 @@ func (db *postgres) DropIndexSql(tableName string, index *core.Index) string { idxName = fmt.Sprintf("IDX_%v_%v", tableName, index.Name) } } + if db.Uri.Schema != "" { + idxName = db.Uri.Schema + "." + idxName + } return fmt.Sprintf("DROP INDEX %v", quote(idxName)) } func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) { - args := []interface{}{tableName, colName} - query := "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = $1" + - " AND column_name = $2" + args := []interface{}{db.Schema, tableName, colName} + query := "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = $1 AND table_name = $2" + + " AND column_name = $3" + if len(db.Schema) == 0 { + args = []interface{}{tableName, colName} + query = "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = $1" + + " AND column_name = $2" + } db.LogSQL(query, args) rows, err := db.DB().Query(query, args...) @@ -926,8 +951,7 @@ func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) { } func (db *postgres) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { - // FIXME: the schema should be replaced by user custom's - args := []interface{}{tableName, db.schema} + args := []interface{}{tableName} s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length, numeric_precision, numeric_precision_radix , CASE WHEN p.contype = 'p' THEN true ELSE false END AS primarykey, CASE WHEN p.contype = 'u' THEN true ELSE false END AS uniquekey @@ -938,7 +962,15 @@ FROM pg_attribute f LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey) LEFT JOIN pg_class AS g ON p.confrelid = g.oid LEFT JOIN INFORMATION_SCHEMA.COLUMNS s ON s.column_name=f.attname AND c.relname=s.table_name -WHERE c.relkind = 'r'::char AND c.relname = $1 AND s.table_schema = $2 AND f.attnum > 0 ORDER BY f.attnum;` +WHERE c.relkind = 'r'::char AND c.relname = $1%s AND f.attnum > 0 ORDER BY f.attnum;` + + var f string + if len(db.Schema) != 0 { + args = append(args, db.Schema) + f = " AND s.table_schema = $2" + } + s = fmt.Sprintf(s, f) + db.LogSQL(s, args) rows, err := db.DB().Query(s, args...) @@ -1028,8 +1060,13 @@ WHERE c.relkind = 'r'::char AND c.relname = $1 AND s.table_schema = $2 AND f.att } func (db *postgres) GetTables() ([]*core.Table, error) { - args := []interface{}{db.schema} - s := fmt.Sprintf("SELECT tablename FROM pg_tables WHERE schemaname = $1") + args := []interface{}{} + s := "SELECT tablename FROM pg_tables" + if len(db.Schema) != 0 { + args = append(args, db.Schema) + s = s + " WHERE schemaname = $1" + } + db.LogSQL(s, args) rows, err := db.DB().Query(s, args...) @@ -1053,8 +1090,12 @@ func (db *postgres) GetTables() ([]*core.Table, error) { } func (db *postgres) GetIndexes(tableName string) (map[string]*core.Index, error) { - args := []interface{}{db.schema, tableName} - s := fmt.Sprintf("SELECT indexname, indexdef FROM pg_indexes WHERE schemaname=$1 AND tablename=$2") + args := []interface{}{tableName} + s := fmt.Sprintf("SELECT indexname, indexdef FROM pg_indexes WHERE tablename=$1") + if len(db.Schema) != 0 { + args = append(args, db.Schema) + s = s + " AND schemaname=$2" + } db.LogSQL(s, args) rows, err := db.DB().Query(s, args...) @@ -1182,3 +1223,15 @@ func (p *pqDriver) Parse(driverName, dataSourceName string) (*core.Uri, error) { return db, nil } + +type pqDriverPgx struct { + pqDriver +} + +func (pgx *pqDriverPgx) Parse(driverName, dataSourceName string) (*core.Uri, error) { + // Remove the leading characters for driver to work + if len(dataSourceName) >= 9 && dataSourceName[0] == 0 { + dataSourceName = dataSourceName[9:] + } + return pgx.pqDriver.Parse(driverName, dataSourceName) +} diff --git a/vendor/github.com/go-xorm/xorm/engine.go b/vendor/github.com/go-xorm/xorm/engine.go index 444611afb..846889c36 100644 --- a/vendor/github.com/go-xorm/xorm/engine.go +++ b/vendor/github.com/go-xorm/xorm/engine.go @@ -49,6 +49,35 @@ type Engine struct { tagHandlers map[string]tagHandler engineGroup *EngineGroup + + cachers map[string]core.Cacher + cacherLock sync.RWMutex +} + +func (engine *Engine) setCacher(tableName string, cacher core.Cacher) { + engine.cacherLock.Lock() + engine.cachers[tableName] = cacher + engine.cacherLock.Unlock() +} + +func (engine *Engine) SetCacher(tableName string, cacher core.Cacher) { + engine.setCacher(tableName, cacher) +} + +func (engine *Engine) getCacher(tableName string) core.Cacher { + var cacher core.Cacher + var ok bool + engine.cacherLock.RLock() + cacher, ok = engine.cachers[tableName] + engine.cacherLock.RUnlock() + if !ok && !engine.disableGlobalCache { + cacher = engine.Cacher + } + return cacher +} + +func (engine *Engine) GetCacher(tableName string) core.Cacher { + return engine.getCacher(tableName) } // BufferSize sets buffer size for iterate @@ -165,7 +194,7 @@ func (engine *Engine) Quote(value string) string { } // QuoteTo quotes string and writes into the buffer -func (engine *Engine) QuoteTo(buf *bytes.Buffer, value string) { +func (engine *Engine) QuoteTo(buf *builder.StringBuilder, value string) { if buf == nil { return } @@ -245,13 +274,7 @@ func (engine *Engine) NoCascade() *Session { // MapCacher Set a table use a special cacher func (engine *Engine) MapCacher(bean interface{}, cacher core.Cacher) error { - v := rValue(bean) - tb, err := engine.autoMapType(v) - if err != nil { - return err - } - - tb.Cacher = cacher + engine.setCacher(engine.TableName(bean, true), cacher) return nil } @@ -536,33 +559,6 @@ func (engine *Engine) dumpTables(tables []*core.Table, w io.Writer, tp ...core.D return nil } -func (engine *Engine) tableName(beanOrTableName interface{}) (string, error) { - v := rValue(beanOrTableName) - if v.Type().Kind() == reflect.String { - return beanOrTableName.(string), nil - } else if v.Type().Kind() == reflect.Struct { - return engine.tbName(v), nil - } - return "", errors.New("bean should be a struct or struct's point") -} - -func (engine *Engine) tbName(v reflect.Value) string { - if tb, ok := v.Interface().(TableName); ok { - return tb.TableName() - } - - if v.Type().Kind() == reflect.Ptr { - if tb, ok := reflect.Indirect(v).Interface().(TableName); ok { - return tb.TableName() - } - } else if v.CanAddr() { - if tb, ok := v.Addr().Interface().(TableName); ok { - return tb.TableName() - } - } - return engine.TableMapper.Obj2Table(reflect.Indirect(v).Type().Name()) -} - // Cascade use cascade or not func (engine *Engine) Cascade(trueOrFalse ...bool) *Session { session := engine.NewSession() @@ -846,7 +842,7 @@ func (engine *Engine) TableInfo(bean interface{}) *Table { if err != nil { engine.logger.Error(err) } - return &Table{tb, engine.tbName(v)} + return &Table{tb, engine.TableName(bean)} } func addIndex(indexName string, table *core.Table, col *core.Column, indexType int) { @@ -861,15 +857,6 @@ func addIndex(indexName string, table *core.Table, col *core.Column, indexType i } } -func (engine *Engine) newTable() *core.Table { - table := core.NewEmptyTable() - - if !engine.disableGlobalCache { - table.Cacher = engine.Cacher - } - return table -} - // TableName table name interface to define customerize table name type TableName interface { TableName() string @@ -881,21 +868,9 @@ var ( func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) { t := v.Type() - table := engine.newTable() - if tb, ok := v.Interface().(TableName); ok { - table.Name = tb.TableName() - } else { - if v.CanAddr() { - if tb, ok = v.Addr().Interface().(TableName); ok { - table.Name = tb.TableName() - } - } - if table.Name == "" { - table.Name = engine.TableMapper.Obj2Table(t.Name()) - } - } - + table := core.NewEmptyTable() table.Type = t + table.Name = engine.tbNameForMap(v) var idFieldColName string var hasCacheTag, hasNoCacheTag bool @@ -1049,15 +1024,15 @@ func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) { if hasCacheTag { if engine.Cacher != nil { // !nash! use engine's cacher if provided engine.logger.Info("enable cache on table:", table.Name) - table.Cacher = engine.Cacher + engine.setCacher(table.Name, engine.Cacher) } else { engine.logger.Info("enable LRU cache on table:", table.Name) - table.Cacher = NewLRUCacher2(NewMemoryStore(), time.Hour, 10000) // !nashtsai! HACK use LRU cacher for now + engine.setCacher(table.Name, NewLRUCacher2(NewMemoryStore(), time.Hour, 10000)) } } if hasNoCacheTag { - engine.logger.Info("no cache on table:", table.Name) - table.Cacher = nil + engine.logger.Info("disable cache on table:", table.Name) + engine.setCacher(table.Name, nil) } return table, nil @@ -1116,7 +1091,25 @@ func (engine *Engine) idOfV(rv reflect.Value) (core.PK, error) { pk := make([]interface{}, len(table.PrimaryKeys)) for i, col := range table.PKColumns() { var err error - pkField := v.FieldByName(col.FieldName) + + fieldName := col.FieldName + for { + parts := strings.SplitN(fieldName, ".", 2) + if len(parts) == 1 { + break + } + + v = v.FieldByName(parts[0]) + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + if v.Kind() != reflect.Struct { + return nil, ErrUnSupportedType + } + fieldName = parts[1] + } + + pkField := v.FieldByName(fieldName) switch pkField.Kind() { case reflect.String: pk[i], err = engine.idTypeAssertion(col, pkField.String()) @@ -1162,26 +1155,10 @@ func (engine *Engine) CreateUniques(bean interface{}) error { return session.CreateUniques(bean) } -func (engine *Engine) getCacher2(table *core.Table) core.Cacher { - return table.Cacher -} - // ClearCacheBean if enabled cache, clear the cache bean func (engine *Engine) ClearCacheBean(bean interface{}, id string) error { - v := rValue(bean) - t := v.Type() - if t.Kind() != reflect.Struct { - return errors.New("error params") - } - tableName := engine.tbName(v) - table, err := engine.autoMapType(v) - if err != nil { - return err - } - cacher := table.Cacher - if cacher == nil { - cacher = engine.Cacher - } + tableName := engine.TableName(bean) + cacher := engine.getCacher(tableName) if cacher != nil { cacher.ClearIds(tableName) cacher.DelBean(tableName, id) @@ -1192,21 +1169,8 @@ func (engine *Engine) ClearCacheBean(bean interface{}, id string) error { // ClearCache if enabled cache, clear some tables' cache func (engine *Engine) ClearCache(beans ...interface{}) error { for _, bean := range beans { - v := rValue(bean) - t := v.Type() - if t.Kind() != reflect.Struct { - return errors.New("error params") - } - tableName := engine.tbName(v) - table, err := engine.autoMapType(v) - if err != nil { - return err - } - - cacher := table.Cacher - if cacher == nil { - cacher = engine.Cacher - } + tableName := engine.TableName(bean) + cacher := engine.getCacher(tableName) if cacher != nil { cacher.ClearIds(tableName) cacher.ClearBeans(tableName) @@ -1224,13 +1188,13 @@ func (engine *Engine) Sync(beans ...interface{}) error { for _, bean := range beans { v := rValue(bean) - tableName := engine.tbName(v) + tableNameNoSchema := engine.TableName(bean) table, err := engine.autoMapType(v) if err != nil { return err } - isExist, err := session.Table(bean).isTableExist(tableName) + isExist, err := session.Table(bean).isTableExist(tableNameNoSchema) if err != nil { return err } @@ -1256,12 +1220,12 @@ func (engine *Engine) Sync(beans ...interface{}) error { } } else { for _, col := range table.Columns() { - isExist, err := engine.dialect.IsColumnExist(tableName, col.Name) + isExist, err := engine.dialect.IsColumnExist(tableNameNoSchema, col.Name) if err != nil { return err } if !isExist { - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return err } err = session.addColumn(col.Name) @@ -1272,35 +1236,35 @@ func (engine *Engine) Sync(beans ...interface{}) error { } for name, index := range table.Indexes { - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return err } if index.Type == core.UniqueType { - isExist, err := session.isIndexExist2(tableName, index.Cols, true) + isExist, err := session.isIndexExist2(tableNameNoSchema, index.Cols, true) if err != nil { return err } if !isExist { - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return err } - err = session.addUnique(tableName, name) + err = session.addUnique(tableNameNoSchema, name) if err != nil { return err } } } else if index.Type == core.IndexType { - isExist, err := session.isIndexExist2(tableName, index.Cols, false) + isExist, err := session.isIndexExist2(tableNameNoSchema, index.Cols, false) if err != nil { return err } if !isExist { - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return err } - err = session.addIndex(tableName, name) + err = session.addIndex(tableNameNoSchema, name) if err != nil { return err } @@ -1453,6 +1417,13 @@ func (engine *Engine) Find(beans interface{}, condiBeans ...interface{}) error { return session.Find(beans, condiBeans...) } +// FindAndCount find the results and also return the counts +func (engine *Engine) FindAndCount(rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error) { + session := engine.NewSession() + defer session.Close() + return session.FindAndCount(rowsSlicePtr, condiBean...) +} + // Iterate record by record handle records from table, bean's non-empty fields // are conditions. func (engine *Engine) Iterate(bean interface{}, fun IterFunc) error { @@ -1629,6 +1600,11 @@ func (engine *Engine) SetTZDatabase(tz *time.Location) { engine.DatabaseTZ = tz } +// SetSchema sets the schema of database +func (engine *Engine) SetSchema(schema string) { + engine.dialect.URI().Schema = schema +} + // Unscoped always disable struct tag "deleted" func (engine *Engine) Unscoped() *Session { session := engine.NewSession() diff --git a/vendor/github.com/go-xorm/xorm/engine_cond.go b/vendor/github.com/go-xorm/xorm/engine_cond.go index 6c8e3879c..4dde8662e 100644 --- a/vendor/github.com/go-xorm/xorm/engine_cond.go +++ b/vendor/github.com/go-xorm/xorm/engine_cond.go @@ -9,6 +9,7 @@ import ( "encoding/json" "fmt" "reflect" + "strings" "time" "github.com/go-xorm/builder" @@ -51,7 +52,9 @@ func (engine *Engine) buildConds(table *core.Table, bean interface{}, fieldValuePtr, err := col.ValueOf(bean) if err != nil { - engine.logger.Error(err) + if !strings.Contains(err.Error(), "is not valid") { + engine.logger.Warn(err) + } continue } diff --git a/vendor/github.com/go-xorm/xorm/engine_table.go b/vendor/github.com/go-xorm/xorm/engine_table.go new file mode 100644 index 000000000..94871a4bc --- /dev/null +++ b/vendor/github.com/go-xorm/xorm/engine_table.go @@ -0,0 +1,113 @@ +// Copyright 2018 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xorm + +import ( + "fmt" + "reflect" + "strings" + + "github.com/go-xorm/core" +) + +// TableNameWithSchema will automatically add schema prefix on table name +func (engine *Engine) tbNameWithSchema(v string) string { + // Add schema name as prefix of table name. + // Only for postgres database. + if engine.dialect.DBType() == core.POSTGRES && + engine.dialect.URI().Schema != "" && + engine.dialect.URI().Schema != postgresPublicSchema && + strings.Index(v, ".") == -1 { + return engine.dialect.URI().Schema + "." + v + } + return v +} + +// TableName returns table name with schema prefix if has +func (engine *Engine) TableName(bean interface{}, includeSchema ...bool) string { + tbName := engine.tbNameNoSchema(bean) + if len(includeSchema) > 0 && includeSchema[0] { + tbName = engine.tbNameWithSchema(tbName) + } + + return tbName +} + +// tbName get some table's table name +func (session *Session) tbNameNoSchema(table *core.Table) string { + if len(session.statement.AltTableName) > 0 { + return session.statement.AltTableName + } + + return table.Name +} + +func (engine *Engine) tbNameForMap(v reflect.Value) string { + if v.Type().Implements(tpTableName) { + return v.Interface().(TableName).TableName() + } + if v.Kind() == reflect.Ptr { + v = v.Elem() + if v.Type().Implements(tpTableName) { + return v.Interface().(TableName).TableName() + } + } + + return engine.TableMapper.Obj2Table(v.Type().Name()) +} + +func (engine *Engine) tbNameNoSchema(tablename interface{}) string { + switch tablename.(type) { + case []string: + t := tablename.([]string) + if len(t) > 1 { + return fmt.Sprintf("%v AS %v", engine.Quote(t[0]), engine.Quote(t[1])) + } else if len(t) == 1 { + return engine.Quote(t[0]) + } + case []interface{}: + t := tablename.([]interface{}) + l := len(t) + var table string + if l > 0 { + f := t[0] + switch f.(type) { + case string: + table = f.(string) + case TableName: + table = f.(TableName).TableName() + default: + v := rValue(f) + t := v.Type() + if t.Kind() == reflect.Struct { + table = engine.tbNameForMap(v) + } else { + table = engine.Quote(fmt.Sprintf("%v", f)) + } + } + } + if l > 1 { + return fmt.Sprintf("%v AS %v", engine.Quote(table), + engine.Quote(fmt.Sprintf("%v", t[1]))) + } else if l == 1 { + return engine.Quote(table) + } + case TableName: + return tablename.(TableName).TableName() + case string: + return tablename.(string) + case reflect.Value: + v := tablename.(reflect.Value) + return engine.tbNameForMap(v) + default: + v := rValue(tablename) + t := v.Type() + if t.Kind() == reflect.Struct { + return engine.tbNameForMap(v) + } + return engine.Quote(fmt.Sprintf("%v", tablename)) + } + return "" +} diff --git a/vendor/github.com/go-xorm/xorm/error.go b/vendor/github.com/go-xorm/xorm/error.go index cfeefc31e..a223fc4a8 100644 --- a/vendor/github.com/go-xorm/xorm/error.go +++ b/vendor/github.com/go-xorm/xorm/error.go @@ -6,23 +6,44 @@ package xorm import ( "errors" + "fmt" ) var ( // ErrParamsType params error ErrParamsType = errors.New("Params type error") // ErrTableNotFound table not found error - ErrTableNotFound = errors.New("Not found table") + ErrTableNotFound = errors.New("Table not found") // ErrUnSupportedType unsupported error ErrUnSupportedType = errors.New("Unsupported type error") - // ErrNotExist record is not exist error - ErrNotExist = errors.New("Not exist error") + // ErrNotExist record does not exist error + ErrNotExist = errors.New("Record does not exist") // ErrCacheFailed cache failed error ErrCacheFailed = errors.New("Cache failed") // ErrNeedDeletedCond delete needs less one condition error - ErrNeedDeletedCond = errors.New("Delete need at least one condition") + ErrNeedDeletedCond = errors.New("Delete action needs at least one condition") // ErrNotImplemented not implemented ErrNotImplemented = errors.New("Not implemented") // ErrConditionType condition type unsupported - ErrConditionType = errors.New("Unsupported conditon type") + ErrConditionType = errors.New("Unsupported condition type") ) + +// ErrFieldIsNotExist columns does not exist +type ErrFieldIsNotExist struct { + FieldName string + TableName string +} + +func (e ErrFieldIsNotExist) Error() string { + return fmt.Sprintf("field %s is not valid on table %s", e.FieldName, e.TableName) +} + +// ErrFieldIsNotValid is not valid +type ErrFieldIsNotValid struct { + FieldName string + TableName string +} + +func (e ErrFieldIsNotValid) Error() string { + return fmt.Sprintf("field %s is not valid on table %s", e.FieldName, e.TableName) +} diff --git a/vendor/github.com/go-xorm/xorm/helpers.go b/vendor/github.com/go-xorm/xorm/helpers.go index f39ed4725..f1705782e 100644 --- a/vendor/github.com/go-xorm/xorm/helpers.go +++ b/vendor/github.com/go-xorm/xorm/helpers.go @@ -11,7 +11,6 @@ import ( "sort" "strconv" "strings" - "time" "github.com/go-xorm/core" ) @@ -293,19 +292,6 @@ func structName(v reflect.Type) string { return v.Name() } -func col2NewCols(columns ...string) []string { - newColumns := make([]string, 0, len(columns)) - for _, col := range columns { - col = strings.Replace(col, "`", "", -1) - col = strings.Replace(col, `"`, "", -1) - ccols := strings.Split(col, ",") - for _, c := range ccols { - newColumns = append(newColumns, strings.TrimSpace(c)) - } - } - return newColumns -} - func sliceEq(left, right []string) bool { if len(left) != len(right) { return false @@ -320,154 +306,6 @@ func sliceEq(left, right []string) bool { return true } -func setColumnInt(bean interface{}, col *core.Column, t int64) { - v, err := col.ValueOf(bean) - if err != nil { - return - } - if v.CanSet() { - switch v.Type().Kind() { - case reflect.Int, reflect.Int64, reflect.Int32: - v.SetInt(t) - case reflect.Uint, reflect.Uint64, reflect.Uint32: - v.SetUint(uint64(t)) - } - } -} - -func setColumnTime(bean interface{}, col *core.Column, t time.Time) { - v, err := col.ValueOf(bean) - if err != nil { - return - } - if v.CanSet() { - switch v.Type().Kind() { - case reflect.Struct: - v.Set(reflect.ValueOf(t).Convert(v.Type())) - case reflect.Int, reflect.Int64, reflect.Int32: - v.SetInt(t.Unix()) - case reflect.Uint, reflect.Uint64, reflect.Uint32: - v.SetUint(uint64(t.Unix())) - } - } -} - -func genCols(table *core.Table, session *Session, bean interface{}, useCol bool, includeQuote bool) ([]string, []interface{}, error) { - colNames := make([]string, 0, len(table.ColumnsSeq())) - args := make([]interface{}, 0, len(table.ColumnsSeq())) - - for _, col := range table.Columns() { - if useCol && !col.IsVersion && !col.IsCreated && !col.IsUpdated { - if _, ok := getFlagForColumn(session.statement.columnMap, col); !ok { - continue - } - } - if col.MapType == core.ONLYFROMDB { - continue - } - - fieldValuePtr, err := col.ValueOf(bean) - if err != nil { - return nil, nil, err - } - fieldValue := *fieldValuePtr - - if col.IsAutoIncrement { - switch fieldValue.Type().Kind() { - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int, reflect.Int64: - if fieldValue.Int() == 0 { - continue - } - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint, reflect.Uint64: - if fieldValue.Uint() == 0 { - continue - } - case reflect.String: - if len(fieldValue.String()) == 0 { - continue - } - case reflect.Ptr: - if fieldValue.Pointer() == 0 { - continue - } - } - } - - if col.IsDeleted { - continue - } - - if session.statement.ColumnStr != "" { - if _, ok := getFlagForColumn(session.statement.columnMap, col); !ok { - continue - } else if _, ok := session.statement.incrColumns[col.Name]; ok { - continue - } else if _, ok := session.statement.decrColumns[col.Name]; ok { - continue - } - } - if session.statement.OmitStr != "" { - if _, ok := getFlagForColumn(session.statement.columnMap, col); ok { - continue - } - } - - // !evalphobia! set fieldValue as nil when column is nullable and zero-value - if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok { - if col.Nullable && isZero(fieldValue.Interface()) { - var nilValue *int - fieldValue = reflect.ValueOf(nilValue) - } - } - - if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime /*&& isZero(fieldValue.Interface())*/ { - // if time is non-empty, then set to auto time - val, t := session.engine.nowTime(col) - args = append(args, val) - - var colName = col.Name - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnTime(bean, col, t) - }) - } else if col.IsVersion && session.statement.checkVersion { - args = append(args, 1) - } else { - arg, err := session.value2Interface(col, fieldValue) - if err != nil { - return colNames, args, err - } - args = append(args, arg) - } - - if includeQuote { - colNames = append(colNames, session.engine.Quote(col.Name)+" = ?") - } else { - colNames = append(colNames, col.Name) - } - } - return colNames, args, nil -} - func indexName(tableName, idxName string) string { return fmt.Sprintf("IDX_%v_%v", tableName, idxName) } - -func getFlagForColumn(m map[string]bool, col *core.Column) (val bool, has bool) { - if len(m) == 0 { - return false, false - } - - n := len(col.Name) - - for mk := range m { - if len(mk) != n { - continue - } - if strings.EqualFold(mk, col.Name) { - return m[mk], true - } - } - - return false, false -} diff --git a/vendor/github.com/go-xorm/xorm/interface.go b/vendor/github.com/go-xorm/xorm/interface.go index 9a3b6da0b..0bc12ba00 100644 --- a/vendor/github.com/go-xorm/xorm/interface.go +++ b/vendor/github.com/go-xorm/xorm/interface.go @@ -30,6 +30,7 @@ type Interface interface { Exec(string, ...interface{}) (sql.Result, error) Exist(bean ...interface{}) (bool, error) Find(interface{}, ...interface{}) error + FindAndCount(interface{}, ...interface{}) (int64, error) Get(interface{}) (bool, error) GroupBy(keys string) *Session ID(interface{}) *Session @@ -41,6 +42,7 @@ type Interface interface { IsTableExist(beanOrTableName interface{}) (bool, error) Iterate(interface{}, IterFunc) error Limit(int, ...int) *Session + MustCols(columns ...string) *Session NoAutoCondition(...bool) *Session NotIn(string, ...interface{}) *Session Join(joinOperator string, tablename interface{}, condition string, args ...interface{}) *Session @@ -75,6 +77,7 @@ type EngineInterface interface { Dialect() core.Dialect DropTables(...interface{}) error DumpAllToFile(fp string, tp ...core.DbType) error + GetCacher(string) core.Cacher GetColumnMapper() core.IMapper GetDefaultCacher() core.Cacher GetTableMapper() core.IMapper @@ -83,9 +86,11 @@ type EngineInterface interface { NewSession() *Session NoAutoTime() *Session Quote(string) string + SetCacher(string, core.Cacher) SetDefaultCacher(core.Cacher) SetLogLevel(core.LogLevel) SetMapper(core.IMapper) + SetSchema(string) SetTZDatabase(tz *time.Location) SetTZLocation(tz *time.Location) ShowSQL(show ...bool) @@ -93,6 +98,7 @@ type EngineInterface interface { Sync2(...interface{}) error StoreEngine(storeEngine string) *Session TableInfo(bean interface{}) *Table + TableName(interface{}, ...bool) string UnMapType(reflect.Type) } diff --git a/vendor/github.com/go-xorm/xorm/rows.go b/vendor/github.com/go-xorm/xorm/rows.go index 31e29ae26..54ec7f37a 100644 --- a/vendor/github.com/go-xorm/xorm/rows.go +++ b/vendor/github.com/go-xorm/xorm/rows.go @@ -32,7 +32,7 @@ func newRows(session *Session, bean interface{}) (*Rows, error) { var args []interface{} var err error - if err = rows.session.statement.setRefValue(rValue(bean)); err != nil { + if err = rows.session.statement.setRefBean(bean); err != nil { return nil, err } @@ -94,8 +94,7 @@ func (rows *Rows) Scan(bean interface{}) error { return fmt.Errorf("scan arg is incompatible type to [%v]", rows.beanType) } - dataStruct := rValue(bean) - if err := rows.session.statement.setRefValue(dataStruct); err != nil { + if err := rows.session.statement.setRefBean(bean); err != nil { return err } @@ -104,6 +103,7 @@ func (rows *Rows) Scan(bean interface{}) error { return err } + dataStruct := rValue(bean) _, err = rows.session.slice2Bean(scanResults, rows.fields, bean, &dataStruct, rows.session.statement.RefTable) if err != nil { return err diff --git a/vendor/github.com/go-xorm/xorm/session.go b/vendor/github.com/go-xorm/xorm/session.go index 5c6cb5f9d..3775eb011 100644 --- a/vendor/github.com/go-xorm/xorm/session.go +++ b/vendor/github.com/go-xorm/xorm/session.go @@ -278,24 +278,22 @@ func (session *Session) doPrepare(db *core.DB, sqlStr string) (stmt *core.Stmt, return } -func (session *Session) getField(dataStruct *reflect.Value, key string, table *core.Table, idx int) *reflect.Value { +func (session *Session) getField(dataStruct *reflect.Value, key string, table *core.Table, idx int) (*reflect.Value, error) { var col *core.Column if col = table.GetColumnIdx(key, idx); col == nil { - //session.engine.logger.Warnf("table %v has no column %v. %v", table.Name, key, table.ColumnsSeq()) - return nil + return nil, ErrFieldIsNotExist{key, table.Name} } fieldValue, err := col.ValueOfV(dataStruct) if err != nil { - session.engine.logger.Error(err) - return nil + return nil, err } if !fieldValue.IsValid() || !fieldValue.CanSet() { - session.engine.logger.Warnf("table %v's column %v is not valid or cannot set", table.Name, key) - return nil + return nil, ErrFieldIsNotValid{key, table.Name} } - return fieldValue + + return fieldValue, nil } // Cell cell is a result of one column field @@ -407,409 +405,417 @@ func (session *Session) slice2Bean(scanResults []interface{}, fields []string, b } tempMap[lKey] = idx - if fieldValue := session.getField(dataStruct, key, table, idx); fieldValue != nil { - rawValue := reflect.Indirect(reflect.ValueOf(scanResults[ii])) - - // if row is null then ignore - if rawValue.Interface() == nil { - continue + fieldValue, err := session.getField(dataStruct, key, table, idx) + if err != nil { + if !strings.Contains(err.Error(), "is not valid") { + session.engine.logger.Warn(err) } + continue + } + if fieldValue == nil { + continue + } + rawValue := reflect.Indirect(reflect.ValueOf(scanResults[ii])) - if fieldValue.CanAddr() { - if structConvert, ok := fieldValue.Addr().Interface().(core.Conversion); ok { - if data, err := value2Bytes(&rawValue); err == nil { - if err := structConvert.FromDB(data); err != nil { - return nil, err - } - } else { + // if row is null then ignore + if rawValue.Interface() == nil { + continue + } + + if fieldValue.CanAddr() { + if structConvert, ok := fieldValue.Addr().Interface().(core.Conversion); ok { + if data, err := value2Bytes(&rawValue); err == nil { + if err := structConvert.FromDB(data); err != nil { return nil, err } - continue - } - } - - if _, ok := fieldValue.Interface().(core.Conversion); ok { - if data, err := value2Bytes(&rawValue); err == nil { - if fieldValue.Kind() == reflect.Ptr && fieldValue.IsNil() { - fieldValue.Set(reflect.New(fieldValue.Type().Elem())) - } - fieldValue.Interface().(core.Conversion).FromDB(data) } else { return nil, err } continue } + } - rawValueType := reflect.TypeOf(rawValue.Interface()) - vv := reflect.ValueOf(rawValue.Interface()) - col := table.GetColumnIdx(key, idx) - if col.IsPrimaryKey { - pk = append(pk, rawValue.Interface()) + if _, ok := fieldValue.Interface().(core.Conversion); ok { + if data, err := value2Bytes(&rawValue); err == nil { + if fieldValue.Kind() == reflect.Ptr && fieldValue.IsNil() { + fieldValue.Set(reflect.New(fieldValue.Type().Elem())) + } + fieldValue.Interface().(core.Conversion).FromDB(data) + } else { + return nil, err } - fieldType := fieldValue.Type() - hasAssigned := false + continue + } - if col.SQLType.IsJson() { - var bs []byte - if rawValueType.Kind() == reflect.String { - bs = []byte(vv.String()) - } else if rawValueType.ConvertibleTo(core.BytesType) { - bs = vv.Bytes() + rawValueType := reflect.TypeOf(rawValue.Interface()) + vv := reflect.ValueOf(rawValue.Interface()) + col := table.GetColumnIdx(key, idx) + if col.IsPrimaryKey { + pk = append(pk, rawValue.Interface()) + } + fieldType := fieldValue.Type() + hasAssigned := false + + if col.SQLType.IsJson() { + var bs []byte + if rawValueType.Kind() == reflect.String { + bs = []byte(vv.String()) + } else if rawValueType.ConvertibleTo(core.BytesType) { + bs = vv.Bytes() + } else { + return nil, fmt.Errorf("unsupported database data type: %s %v", key, rawValueType.Kind()) + } + + hasAssigned = true + + if len(bs) > 0 { + if fieldType.Kind() == reflect.String { + fieldValue.SetString(string(bs)) + continue + } + if fieldValue.CanAddr() { + err := json.Unmarshal(bs, fieldValue.Addr().Interface()) + if err != nil { + return nil, err + } } else { - return nil, fmt.Errorf("unsupported database data type: %s %v", key, rawValueType.Kind()) - } - - hasAssigned = true - - if len(bs) > 0 { - if fieldType.Kind() == reflect.String { - fieldValue.SetString(string(bs)) - continue - } - if fieldValue.CanAddr() { - err := json.Unmarshal(bs, fieldValue.Addr().Interface()) - if err != nil { - return nil, err - } - } else { - x := reflect.New(fieldType) - err := json.Unmarshal(bs, x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) + x := reflect.New(fieldType) + err := json.Unmarshal(bs, x.Interface()) + if err != nil { + return nil, err } + fieldValue.Set(x.Elem()) } - - continue } - switch fieldType.Kind() { - case reflect.Complex64, reflect.Complex128: - // TODO: reimplement this - var bs []byte - if rawValueType.Kind() == reflect.String { - bs = []byte(vv.String()) - } else if rawValueType.ConvertibleTo(core.BytesType) { - bs = vv.Bytes() - } + continue + } - hasAssigned = true - if len(bs) > 0 { - if fieldValue.CanAddr() { - err := json.Unmarshal(bs, fieldValue.Addr().Interface()) - if err != nil { - return nil, err - } - } else { - x := reflect.New(fieldType) - err := json.Unmarshal(bs, x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) + switch fieldType.Kind() { + case reflect.Complex64, reflect.Complex128: + // TODO: reimplement this + var bs []byte + if rawValueType.Kind() == reflect.String { + bs = []byte(vv.String()) + } else if rawValueType.ConvertibleTo(core.BytesType) { + bs = vv.Bytes() + } + + hasAssigned = true + if len(bs) > 0 { + if fieldValue.CanAddr() { + err := json.Unmarshal(bs, fieldValue.Addr().Interface()) + if err != nil { + return nil, err } + } else { + x := reflect.New(fieldType) + err := json.Unmarshal(bs, x.Interface()) + if err != nil { + return nil, err + } + fieldValue.Set(x.Elem()) } + } + case reflect.Slice, reflect.Array: + switch rawValueType.Kind() { case reflect.Slice, reflect.Array: - switch rawValueType.Kind() { - case reflect.Slice, reflect.Array: - switch rawValueType.Elem().Kind() { - case reflect.Uint8: - if fieldType.Elem().Kind() == reflect.Uint8 { - hasAssigned = true - if col.SQLType.IsText() { - x := reflect.New(fieldType) - err := json.Unmarshal(vv.Bytes(), x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) - } else { - if fieldValue.Len() > 0 { - for i := 0; i < fieldValue.Len(); i++ { - if i < vv.Len() { - fieldValue.Index(i).Set(vv.Index(i)) - } - } - } else { - for i := 0; i < vv.Len(); i++ { - fieldValue.Set(reflect.Append(*fieldValue, vv.Index(i))) - } - } - } - } - } - } - case reflect.String: - if rawValueType.Kind() == reflect.String { - hasAssigned = true - fieldValue.SetString(vv.String()) - } - case reflect.Bool: - if rawValueType.Kind() == reflect.Bool { - hasAssigned = true - fieldValue.SetBool(vv.Bool()) - } - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - switch rawValueType.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - hasAssigned = true - fieldValue.SetInt(vv.Int()) - } - case reflect.Float32, reflect.Float64: - switch rawValueType.Kind() { - case reflect.Float32, reflect.Float64: - hasAssigned = true - fieldValue.SetFloat(vv.Float()) - } - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - switch rawValueType.Kind() { - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - hasAssigned = true - fieldValue.SetUint(vv.Uint()) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - hasAssigned = true - fieldValue.SetUint(uint64(vv.Int())) - } - case reflect.Struct: - if fieldType.ConvertibleTo(core.TimeType) { - dbTZ := session.engine.DatabaseTZ - if col.TimeZone != nil { - dbTZ = col.TimeZone - } - - if rawValueType == core.TimeType { + switch rawValueType.Elem().Kind() { + case reflect.Uint8: + if fieldType.Elem().Kind() == reflect.Uint8 { hasAssigned = true - - t := vv.Convert(core.TimeType).Interface().(time.Time) - - z, _ := t.Zone() - // set new location if database don't save timezone or give an incorrect timezone - if len(z) == 0 || t.Year() == 0 || t.Location().String() != dbTZ.String() { // !nashtsai! HACK tmp work around for lib/pq doesn't properly time with location - session.engine.logger.Debugf("empty zone key[%v] : %v | zone: %v | location: %+v\n", key, t, z, *t.Location()) - t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), - t.Minute(), t.Second(), t.Nanosecond(), dbTZ) - } - - t = t.In(session.engine.TZLocation) - fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) - } else if rawValueType == core.IntType || rawValueType == core.Int64Type || - rawValueType == core.Int32Type { - hasAssigned = true - - t := time.Unix(vv.Int(), 0).In(session.engine.TZLocation) - fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) - } else { - if d, ok := vv.Interface().([]uint8); ok { - hasAssigned = true - t, err := session.byte2Time(col, d) - if err != nil { - session.engine.logger.Error("byte2Time error:", err.Error()) - hasAssigned = false - } else { - fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) - } - } else if d, ok := vv.Interface().(string); ok { - hasAssigned = true - t, err := session.str2Time(col, d) - if err != nil { - session.engine.logger.Error("byte2Time error:", err.Error()) - hasAssigned = false - } else { - fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) - } - } else { - return nil, fmt.Errorf("rawValueType is %v, value is %v", rawValueType, vv.Interface()) - } - } - } else if nulVal, ok := fieldValue.Addr().Interface().(sql.Scanner); ok { - // !! 增加支持sql.Scanner接口的结构,如sql.NullString - hasAssigned = true - if err := nulVal.Scan(vv.Interface()); err != nil { - session.engine.logger.Error("sql.Sanner error:", err.Error()) - hasAssigned = false - } - } else if col.SQLType.IsJson() { - if rawValueType.Kind() == reflect.String { - hasAssigned = true - x := reflect.New(fieldType) - if len([]byte(vv.String())) > 0 { - err := json.Unmarshal([]byte(vv.String()), x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) - } - } else if rawValueType.Kind() == reflect.Slice { - hasAssigned = true - x := reflect.New(fieldType) - if len(vv.Bytes()) > 0 { + if col.SQLType.IsText() { + x := reflect.New(fieldType) err := json.Unmarshal(vv.Bytes(), x.Interface()) if err != nil { return nil, err } fieldValue.Set(x.Elem()) - } - } - } else if session.statement.UseCascade { - table, err := session.engine.autoMapType(*fieldValue) - if err != nil { - return nil, err - } - - hasAssigned = true - if len(table.PrimaryKeys) != 1 { - return nil, errors.New("unsupported non or composited primary key cascade") - } - var pk = make(core.PK, len(table.PrimaryKeys)) - pk[0], err = asKind(vv, rawValueType) - if err != nil { - return nil, err - } - - if !isPKZero(pk) { - // !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch - // however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne - // property to be fetched lazily - structInter := reflect.New(fieldValue.Type()) - has, err := session.ID(pk).NoCascade().get(structInter.Interface()) - if err != nil { - return nil, err - } - if has { - fieldValue.Set(structInter.Elem()) } else { - return nil, errors.New("cascade obj is not exist") + if fieldValue.Len() > 0 { + for i := 0; i < fieldValue.Len(); i++ { + if i < vv.Len() { + fieldValue.Index(i).Set(vv.Index(i)) + } + } + } else { + for i := 0; i < vv.Len(); i++ { + fieldValue.Set(reflect.Append(*fieldValue, vv.Index(i))) + } + } } } } - case reflect.Ptr: - // !nashtsai! TODO merge duplicated codes above - switch fieldType { - // following types case matching ptr's native type, therefore assign ptr directly - case core.PtrStringType: - if rawValueType.Kind() == reflect.String { - x := vv.String() - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrBoolType: - if rawValueType.Kind() == reflect.Bool { - x := vv.Bool() - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrTimeType: - if rawValueType == core.PtrTimeType { - hasAssigned = true - var x = rawValue.Interface().(time.Time) - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrFloat64Type: - if rawValueType.Kind() == reflect.Float64 { - x := vv.Float() - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrUint64Type: - if rawValueType.Kind() == reflect.Int64 { - var x = uint64(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrInt64Type: - if rawValueType.Kind() == reflect.Int64 { - x := vv.Int() - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrFloat32Type: - if rawValueType.Kind() == reflect.Float64 { - var x = float32(vv.Float()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrIntType: - if rawValueType.Kind() == reflect.Int64 { - var x = int(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrInt32Type: - if rawValueType.Kind() == reflect.Int64 { - var x = int32(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrInt8Type: - if rawValueType.Kind() == reflect.Int64 { - var x = int8(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrInt16Type: - if rawValueType.Kind() == reflect.Int64 { - var x = int16(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrUintType: - if rawValueType.Kind() == reflect.Int64 { - var x = uint(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrUint32Type: - if rawValueType.Kind() == reflect.Int64 { - var x = uint32(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.Uint8Type: - if rawValueType.Kind() == reflect.Int64 { - var x = uint8(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.Uint16Type: - if rawValueType.Kind() == reflect.Int64 { - var x = uint16(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.Complex64Type: - var x complex64 - if len([]byte(vv.String())) > 0 { - err := json.Unmarshal([]byte(vv.String()), &x) - if err != nil { - return nil, err - } - fieldValue.Set(reflect.ValueOf(&x)) - } - hasAssigned = true - case core.Complex128Type: - var x complex128 - if len([]byte(vv.String())) > 0 { - err := json.Unmarshal([]byte(vv.String()), &x) - if err != nil { - return nil, err - } - fieldValue.Set(reflect.ValueOf(&x)) - } - hasAssigned = true - } // switch fieldType - } // switch fieldType.Kind() + } + case reflect.String: + if rawValueType.Kind() == reflect.String { + hasAssigned = true + fieldValue.SetString(vv.String()) + } + case reflect.Bool: + if rawValueType.Kind() == reflect.Bool { + hasAssigned = true + fieldValue.SetBool(vv.Bool()) + } + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + switch rawValueType.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + hasAssigned = true + fieldValue.SetInt(vv.Int()) + } + case reflect.Float32, reflect.Float64: + switch rawValueType.Kind() { + case reflect.Float32, reflect.Float64: + hasAssigned = true + fieldValue.SetFloat(vv.Float()) + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + switch rawValueType.Kind() { + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: + hasAssigned = true + fieldValue.SetUint(vv.Uint()) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + hasAssigned = true + fieldValue.SetUint(uint64(vv.Int())) + } + case reflect.Struct: + if fieldType.ConvertibleTo(core.TimeType) { + dbTZ := session.engine.DatabaseTZ + if col.TimeZone != nil { + dbTZ = col.TimeZone + } - // !nashtsai! for value can't be assigned directly fallback to convert to []byte then back to value - if !hasAssigned { - data, err := value2Bytes(&rawValue) + if rawValueType == core.TimeType { + hasAssigned = true + + t := vv.Convert(core.TimeType).Interface().(time.Time) + + z, _ := t.Zone() + // set new location if database don't save timezone or give an incorrect timezone + if len(z) == 0 || t.Year() == 0 || t.Location().String() != dbTZ.String() { // !nashtsai! HACK tmp work around for lib/pq doesn't properly time with location + session.engine.logger.Debugf("empty zone key[%v] : %v | zone: %v | location: %+v\n", key, t, z, *t.Location()) + t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), + t.Minute(), t.Second(), t.Nanosecond(), dbTZ) + } + + t = t.In(session.engine.TZLocation) + fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) + } else if rawValueType == core.IntType || rawValueType == core.Int64Type || + rawValueType == core.Int32Type { + hasAssigned = true + + t := time.Unix(vv.Int(), 0).In(session.engine.TZLocation) + fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) + } else { + if d, ok := vv.Interface().([]uint8); ok { + hasAssigned = true + t, err := session.byte2Time(col, d) + if err != nil { + session.engine.logger.Error("byte2Time error:", err.Error()) + hasAssigned = false + } else { + fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) + } + } else if d, ok := vv.Interface().(string); ok { + hasAssigned = true + t, err := session.str2Time(col, d) + if err != nil { + session.engine.logger.Error("byte2Time error:", err.Error()) + hasAssigned = false + } else { + fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) + } + } else { + return nil, fmt.Errorf("rawValueType is %v, value is %v", rawValueType, vv.Interface()) + } + } + } else if nulVal, ok := fieldValue.Addr().Interface().(sql.Scanner); ok { + // !! 增加支持sql.Scanner接口的结构,如sql.NullString + hasAssigned = true + if err := nulVal.Scan(vv.Interface()); err != nil { + session.engine.logger.Error("sql.Sanner error:", err.Error()) + hasAssigned = false + } + } else if col.SQLType.IsJson() { + if rawValueType.Kind() == reflect.String { + hasAssigned = true + x := reflect.New(fieldType) + if len([]byte(vv.String())) > 0 { + err := json.Unmarshal([]byte(vv.String()), x.Interface()) + if err != nil { + return nil, err + } + fieldValue.Set(x.Elem()) + } + } else if rawValueType.Kind() == reflect.Slice { + hasAssigned = true + x := reflect.New(fieldType) + if len(vv.Bytes()) > 0 { + err := json.Unmarshal(vv.Bytes(), x.Interface()) + if err != nil { + return nil, err + } + fieldValue.Set(x.Elem()) + } + } + } else if session.statement.UseCascade { + table, err := session.engine.autoMapType(*fieldValue) if err != nil { return nil, err } - if err = session.bytes2Value(col, fieldValue, data); err != nil { + hasAssigned = true + if len(table.PrimaryKeys) != 1 { + return nil, errors.New("unsupported non or composited primary key cascade") + } + var pk = make(core.PK, len(table.PrimaryKeys)) + pk[0], err = asKind(vv, rawValueType) + if err != nil { return nil, err } + + if !isPKZero(pk) { + // !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch + // however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne + // property to be fetched lazily + structInter := reflect.New(fieldValue.Type()) + has, err := session.ID(pk).NoCascade().get(structInter.Interface()) + if err != nil { + return nil, err + } + if has { + fieldValue.Set(structInter.Elem()) + } else { + return nil, errors.New("cascade obj is not exist") + } + } + } + case reflect.Ptr: + // !nashtsai! TODO merge duplicated codes above + switch fieldType { + // following types case matching ptr's native type, therefore assign ptr directly + case core.PtrStringType: + if rawValueType.Kind() == reflect.String { + x := vv.String() + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrBoolType: + if rawValueType.Kind() == reflect.Bool { + x := vv.Bool() + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrTimeType: + if rawValueType == core.PtrTimeType { + hasAssigned = true + var x = rawValue.Interface().(time.Time) + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrFloat64Type: + if rawValueType.Kind() == reflect.Float64 { + x := vv.Float() + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrUint64Type: + if rawValueType.Kind() == reflect.Int64 { + var x = uint64(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrInt64Type: + if rawValueType.Kind() == reflect.Int64 { + x := vv.Int() + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrFloat32Type: + if rawValueType.Kind() == reflect.Float64 { + var x = float32(vv.Float()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrIntType: + if rawValueType.Kind() == reflect.Int64 { + var x = int(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrInt32Type: + if rawValueType.Kind() == reflect.Int64 { + var x = int32(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrInt8Type: + if rawValueType.Kind() == reflect.Int64 { + var x = int8(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrInt16Type: + if rawValueType.Kind() == reflect.Int64 { + var x = int16(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrUintType: + if rawValueType.Kind() == reflect.Int64 { + var x = uint(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.PtrUint32Type: + if rawValueType.Kind() == reflect.Int64 { + var x = uint32(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.Uint8Type: + if rawValueType.Kind() == reflect.Int64 { + var x = uint8(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.Uint16Type: + if rawValueType.Kind() == reflect.Int64 { + var x = uint16(vv.Int()) + hasAssigned = true + fieldValue.Set(reflect.ValueOf(&x)) + } + case core.Complex64Type: + var x complex64 + if len([]byte(vv.String())) > 0 { + err := json.Unmarshal([]byte(vv.String()), &x) + if err != nil { + return nil, err + } + fieldValue.Set(reflect.ValueOf(&x)) + } + hasAssigned = true + case core.Complex128Type: + var x complex128 + if len([]byte(vv.String())) > 0 { + err := json.Unmarshal([]byte(vv.String()), &x) + if err != nil { + return nil, err + } + fieldValue.Set(reflect.ValueOf(&x)) + } + hasAssigned = true + } // switch fieldType + } // switch fieldType.Kind() + + // !nashtsai! for value can't be assigned directly fallback to convert to []byte then back to value + if !hasAssigned { + data, err := value2Bytes(&rawValue) + if err != nil { + return nil, err + } + + if err = session.bytes2Value(col, fieldValue, data); err != nil { + return nil, err } } } @@ -828,15 +834,6 @@ func (session *Session) LastSQL() (string, []interface{}) { return session.lastSQL, session.lastSQLArgs } -// tbName get some table's table name -func (session *Session) tbNameNoSchema(table *core.Table) string { - if len(session.statement.AltTableName) > 0 { - return session.statement.AltTableName - } - - return table.Name -} - // Unscoped always disable struct tag "deleted" func (session *Session) Unscoped() *Session { session.statement.Unscoped() diff --git a/vendor/github.com/go-xorm/xorm/session_cols.go b/vendor/github.com/go-xorm/xorm/session_cols.go index 9972cb0ae..47d109c6c 100644 --- a/vendor/github.com/go-xorm/xorm/session_cols.go +++ b/vendor/github.com/go-xorm/xorm/session_cols.go @@ -4,6 +4,121 @@ package xorm +import ( + "reflect" + "strings" + "time" + + "github.com/go-xorm/core" +) + +type incrParam struct { + colName string + arg interface{} +} + +type decrParam struct { + colName string + arg interface{} +} + +type exprParam struct { + colName string + expr string +} + +type columnMap []string + +func (m columnMap) contain(colName string) bool { + if len(m) == 0 { + return false + } + + n := len(colName) + for _, mk := range m { + if len(mk) != n { + continue + } + if strings.EqualFold(mk, colName) { + return true + } + } + + return false +} + +func (m *columnMap) add(colName string) bool { + if m.contain(colName) { + return false + } + *m = append(*m, colName) + return true +} + +func setColumnInt(bean interface{}, col *core.Column, t int64) { + v, err := col.ValueOf(bean) + if err != nil { + return + } + if v.CanSet() { + switch v.Type().Kind() { + case reflect.Int, reflect.Int64, reflect.Int32: + v.SetInt(t) + case reflect.Uint, reflect.Uint64, reflect.Uint32: + v.SetUint(uint64(t)) + } + } +} + +func setColumnTime(bean interface{}, col *core.Column, t time.Time) { + v, err := col.ValueOf(bean) + if err != nil { + return + } + if v.CanSet() { + switch v.Type().Kind() { + case reflect.Struct: + v.Set(reflect.ValueOf(t).Convert(v.Type())) + case reflect.Int, reflect.Int64, reflect.Int32: + v.SetInt(t.Unix()) + case reflect.Uint, reflect.Uint64, reflect.Uint32: + v.SetUint(uint64(t.Unix())) + } + } +} + +func getFlagForColumn(m map[string]bool, col *core.Column) (val bool, has bool) { + if len(m) == 0 { + return false, false + } + + n := len(col.Name) + + for mk := range m { + if len(mk) != n { + continue + } + if strings.EqualFold(mk, col.Name) { + return m[mk], true + } + } + + return false, false +} + +func col2NewCols(columns ...string) []string { + newColumns := make([]string, 0, len(columns)) + for _, col := range columns { + col = strings.Replace(col, "`", "", -1) + col = strings.Replace(col, `"`, "", -1) + ccols := strings.Split(col, ",") + for _, c := range ccols { + newColumns = append(newColumns, strings.TrimSpace(c)) + } + } + return newColumns +} + // Incr provides a query string like "count = count + 1" func (session *Session) Incr(column string, arg ...interface{}) *Session { session.statement.Incr(column, arg...) diff --git a/vendor/github.com/go-xorm/xorm/session_delete.go b/vendor/github.com/go-xorm/xorm/session_delete.go index 688b122ca..d9cf3ea93 100644 --- a/vendor/github.com/go-xorm/xorm/session_delete.go +++ b/vendor/github.com/go-xorm/xorm/session_delete.go @@ -27,7 +27,7 @@ func (session *Session) cacheDelete(table *core.Table, tableName, sqlStr string, return ErrCacheFailed } - cacher := session.engine.getCacher2(table) + cacher := session.engine.getCacher(tableName) pkColumns := table.PKColumns() ids, err := core.GetCacheSql(cacher, tableName, newsql, args) if err != nil { @@ -79,7 +79,7 @@ func (session *Session) Delete(bean interface{}) (int64, error) { defer session.Close() } - if err := session.statement.setRefValue(rValue(bean)); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return 0, err } @@ -199,7 +199,7 @@ func (session *Session) Delete(bean interface{}) (int64, error) { }) } - if cacher := session.engine.getCacher2(table); cacher != nil && session.statement.UseCache { + if cacher := session.engine.getCacher(tableName); cacher != nil && session.statement.UseCache { session.cacheDelete(table, tableNameNoQuote, deleteSQL, argsForCache...) } diff --git a/vendor/github.com/go-xorm/xorm/session_exist.go b/vendor/github.com/go-xorm/xorm/session_exist.go index 378a64837..74a660e85 100644 --- a/vendor/github.com/go-xorm/xorm/session_exist.go +++ b/vendor/github.com/go-xorm/xorm/session_exist.go @@ -57,7 +57,7 @@ func (session *Session) Exist(bean ...interface{}) (bool, error) { } if beanValue.Elem().Kind() == reflect.Struct { - if err := session.statement.setRefValue(beanValue.Elem()); err != nil { + if err := session.statement.setRefBean(bean[0]); err != nil { return false, err } } diff --git a/vendor/github.com/go-xorm/xorm/session_find.go b/vendor/github.com/go-xorm/xorm/session_find.go index f95dcfef2..46bbf26c9 100644 --- a/vendor/github.com/go-xorm/xorm/session_find.go +++ b/vendor/github.com/go-xorm/xorm/session_find.go @@ -29,6 +29,39 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) return session.find(rowsSlicePtr, condiBean...) } +// FindAndCount find the results and also return the counts +func (session *Session) FindAndCount(rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error) { + if session.isAutoClose { + defer session.Close() + } + + session.autoResetStatement = false + err := session.find(rowsSlicePtr, condiBean...) + if err != nil { + return 0, err + } + + sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) + if sliceValue.Kind() != reflect.Slice && sliceValue.Kind() != reflect.Map { + return 0, errors.New("needs a pointer to a slice or a map") + } + + sliceElementType := sliceValue.Type().Elem() + if sliceElementType.Kind() == reflect.Ptr { + sliceElementType = sliceElementType.Elem() + } + session.autoResetStatement = true + + if session.statement.selectStr != "" { + session.statement.selectStr = "" + } + if session.statement.OrderStr != "" { + session.statement.OrderStr = "" + } + + return session.Count(reflect.New(sliceElementType).Interface()) +} + func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) error { sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) if sliceValue.Kind() != reflect.Slice && sliceValue.Kind() != reflect.Map { @@ -42,7 +75,7 @@ func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) if sliceElementType.Kind() == reflect.Ptr { if sliceElementType.Elem().Kind() == reflect.Struct { pv := reflect.New(sliceElementType.Elem()) - if err := session.statement.setRefValue(pv.Elem()); err != nil { + if err := session.statement.setRefValue(pv); err != nil { return err } } else { @@ -50,7 +83,7 @@ func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) } } else if sliceElementType.Kind() == reflect.Struct { pv := reflect.New(sliceElementType) - if err := session.statement.setRefValue(pv.Elem()); err != nil { + if err := session.statement.setRefValue(pv); err != nil { return err } } else { @@ -128,7 +161,7 @@ func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) } args = append(session.statement.joinArgs, condArgs...) - sqlStr, err = session.statement.genSelectSQL(columnStr, condSQL) + sqlStr, err = session.statement.genSelectSQL(columnStr, condSQL, true, true) if err != nil { return err } @@ -143,7 +176,7 @@ func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) } if session.canCache() { - if cacher := session.engine.getCacher2(table); cacher != nil && + if cacher := session.engine.getCacher(table.Name); cacher != nil && !session.statement.IsDistinct && !session.statement.unscoped { err = session.cacheFind(sliceElementType, sqlStr, rowsSlicePtr, args...) @@ -288,6 +321,12 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in return ErrCacheFailed } + tableName := session.statement.TableName() + cacher := session.engine.getCacher(tableName) + if cacher == nil { + return nil + } + for _, filter := range session.engine.dialect.Filters() { sqlStr = filter.Do(sqlStr, session.engine.dialect, session.statement.RefTable) } @@ -297,9 +336,7 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in return ErrCacheFailed } - tableName := session.statement.TableName() table := session.statement.RefTable - cacher := session.engine.getCacher2(table) ids, err := core.GetCacheSql(cacher, tableName, newsql, args) if err != nil { rows, err := session.queryRows(newsql, args...) diff --git a/vendor/github.com/go-xorm/xorm/session_get.go b/vendor/github.com/go-xorm/xorm/session_get.go index 68b37af7f..3b2c9493c 100644 --- a/vendor/github.com/go-xorm/xorm/session_get.go +++ b/vendor/github.com/go-xorm/xorm/session_get.go @@ -31,7 +31,7 @@ func (session *Session) get(bean interface{}) (bool, error) { } if beanValue.Elem().Kind() == reflect.Struct { - if err := session.statement.setRefValue(beanValue.Elem()); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return false, err } } @@ -57,7 +57,7 @@ func (session *Session) get(bean interface{}) (bool, error) { table := session.statement.RefTable if session.canCache() && beanValue.Elem().Kind() == reflect.Struct { - if cacher := session.engine.getCacher2(table); cacher != nil && + if cacher := session.engine.getCacher(table.Name); cacher != nil && !session.statement.unscoped { has, err := session.cacheGet(bean, sqlStr, args...) if err != ErrCacheFailed { @@ -134,8 +134,9 @@ func (session *Session) cacheGet(bean interface{}, sqlStr string, args ...interf return false, ErrCacheFailed } - cacher := session.engine.getCacher2(session.statement.RefTable) tableName := session.statement.TableName() + cacher := session.engine.getCacher(tableName) + session.engine.logger.Debug("[cacheGet] find sql:", newsql, args) table := session.statement.RefTable ids, err := core.GetCacheSql(cacher, tableName, newsql, args) diff --git a/vendor/github.com/go-xorm/xorm/session_insert.go b/vendor/github.com/go-xorm/xorm/session_insert.go index 129ee2309..2ea58fdaf 100644 --- a/vendor/github.com/go-xorm/xorm/session_insert.go +++ b/vendor/github.com/go-xorm/xorm/session_insert.go @@ -66,11 +66,12 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error return 0, errors.New("could not insert a empty slice") } - if err := session.statement.setRefValue(reflect.ValueOf(sliceValue.Index(0).Interface())); err != nil { + if err := session.statement.setRefBean(sliceValue.Index(0).Interface()); err != nil { return 0, err } - if len(session.statement.TableName()) <= 0 { + tableName := session.statement.TableName() + if len(tableName) <= 0 { return 0, ErrTableNotFound } @@ -115,15 +116,11 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error if col.IsDeleted { continue } - if session.statement.ColumnStr != "" { - if _, ok := getFlagForColumn(session.statement.columnMap, col); !ok { - continue - } + if session.statement.omitColumnMap.contain(col.Name) { + continue } - if session.statement.OmitStr != "" { - if _, ok := getFlagForColumn(session.statement.columnMap, col); ok { - continue - } + if len(session.statement.columnMap) > 0 && !session.statement.columnMap.contain(col.Name) { + continue } if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime { val, t := session.engine.nowTime(col) @@ -170,15 +167,11 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error if col.IsDeleted { continue } - if session.statement.ColumnStr != "" { - if _, ok := getFlagForColumn(session.statement.columnMap, col); !ok { - continue - } + if session.statement.omitColumnMap.contain(col.Name) { + continue } - if session.statement.OmitStr != "" { - if _, ok := getFlagForColumn(session.statement.columnMap, col); ok { - continue - } + if len(session.statement.columnMap) > 0 && !session.statement.columnMap.contain(col.Name) { + continue } if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime { val, t := session.engine.nowTime(col) @@ -211,38 +204,33 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error } cleanupProcessorsClosures(&session.beforeClosures) - var sql = "INSERT INTO %s (%v%v%v) VALUES (%v)" - var statement string - var tableName = session.statement.TableName() + var sql string if session.engine.dialect.DBType() == core.ORACLE { - sql = "INSERT ALL INTO %s (%v%v%v) VALUES (%v) SELECT 1 FROM DUAL" temp := fmt.Sprintf(") INTO %s (%v%v%v) VALUES (", session.engine.Quote(tableName), session.engine.QuoteStr(), strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()), session.engine.QuoteStr()) - statement = fmt.Sprintf(sql, + sql = fmt.Sprintf("INSERT ALL INTO %s (%v%v%v) VALUES (%v) SELECT 1 FROM DUAL", session.engine.Quote(tableName), session.engine.QuoteStr(), strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()), session.engine.QuoteStr(), strings.Join(colMultiPlaces, temp)) } else { - statement = fmt.Sprintf(sql, + sql = fmt.Sprintf("INSERT INTO %s (%v%v%v) VALUES (%v)", session.engine.Quote(tableName), session.engine.QuoteStr(), strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()), session.engine.QuoteStr(), strings.Join(colMultiPlaces, "),(")) } - res, err := session.exec(statement, args...) + res, err := session.exec(sql, args...) if err != nil { return 0, err } - if cacher := session.engine.getCacher2(table); cacher != nil && session.statement.UseCache { - session.cacheInsert(table, tableName) - } + session.cacheInsert(tableName) lenAfterClosures := len(session.afterClosures) for i := 0; i < size; i++ { @@ -298,7 +286,7 @@ func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) { } func (session *Session) innerInsert(bean interface{}) (int64, error) { - if err := session.statement.setRefValue(rValue(bean)); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return 0, err } if len(session.statement.TableName()) <= 0 { @@ -316,8 +304,8 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { if processor, ok := interface{}(bean).(BeforeInsertProcessor); ok { processor.BeforeInsert() } - // -- - colNames, args, err := genCols(session.statement.RefTable, session, bean, false, false) + + colNames, args, err := session.genInsertColumns(bean) if err != nil { return 0, err } @@ -402,9 +390,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { defer handleAfterInsertProcessorFunc(bean) - if cacher := session.engine.getCacher2(table); cacher != nil && session.statement.UseCache { - session.cacheInsert(table, tableName) - } + session.cacheInsert(tableName) if table.Version != "" && session.statement.checkVersion { verValue, err := table.VersionColumn().ValueOf(bean) @@ -447,9 +433,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { } defer handleAfterInsertProcessorFunc(bean) - if cacher := session.engine.getCacher2(table); cacher != nil && session.statement.UseCache { - session.cacheInsert(table, tableName) - } + session.cacheInsert(tableName) if table.Version != "" && session.statement.checkVersion { verValue, err := table.VersionColumn().ValueOf(bean) @@ -490,9 +474,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { defer handleAfterInsertProcessorFunc(bean) - if cacher := session.engine.getCacher2(table); cacher != nil && session.statement.UseCache { - session.cacheInsert(table, tableName) - } + session.cacheInsert(tableName) if table.Version != "" && session.statement.checkVersion { verValue, err := table.VersionColumn().ValueOf(bean) @@ -539,16 +521,104 @@ func (session *Session) InsertOne(bean interface{}) (int64, error) { return session.innerInsert(bean) } -func (session *Session) cacheInsert(table *core.Table, tables ...string) error { - if table == nil { - return ErrCacheFailed +func (session *Session) cacheInsert(table string) error { + if !session.statement.UseCache { + return nil } - - cacher := session.engine.getCacher2(table) - for _, t := range tables { - session.engine.logger.Debug("[cache] clear sql:", t) - cacher.ClearIds(t) + cacher := session.engine.getCacher(table) + if cacher == nil { + return nil } - + session.engine.logger.Debug("[cache] clear sql:", table) + cacher.ClearIds(table) return nil } + +// genInsertColumns generates insert needed columns +func (session *Session) genInsertColumns(bean interface{}) ([]string, []interface{}, error) { + table := session.statement.RefTable + colNames := make([]string, 0, len(table.ColumnsSeq())) + args := make([]interface{}, 0, len(table.ColumnsSeq())) + + for _, col := range table.Columns() { + if col.MapType == core.ONLYFROMDB { + continue + } + + if col.IsDeleted { + continue + } + + if session.statement.omitColumnMap.contain(col.Name) { + continue + } + + if len(session.statement.columnMap) > 0 && !session.statement.columnMap.contain(col.Name) { + continue + } + + if _, ok := session.statement.incrColumns[col.Name]; ok { + continue + } else if _, ok := session.statement.decrColumns[col.Name]; ok { + continue + } + + fieldValuePtr, err := col.ValueOf(bean) + if err != nil { + return nil, nil, err + } + fieldValue := *fieldValuePtr + + if col.IsAutoIncrement { + switch fieldValue.Type().Kind() { + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int, reflect.Int64: + if fieldValue.Int() == 0 { + continue + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint, reflect.Uint64: + if fieldValue.Uint() == 0 { + continue + } + case reflect.String: + if len(fieldValue.String()) == 0 { + continue + } + case reflect.Ptr: + if fieldValue.Pointer() == 0 { + continue + } + } + } + + // !evalphobia! set fieldValue as nil when column is nullable and zero-value + if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok { + if col.Nullable && isZero(fieldValue.Interface()) { + var nilValue *int + fieldValue = reflect.ValueOf(nilValue) + } + } + + if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime /*&& isZero(fieldValue.Interface())*/ { + // if time is non-empty, then set to auto time + val, t := session.engine.nowTime(col) + args = append(args, val) + + var colName = col.Name + session.afterClosures = append(session.afterClosures, func(bean interface{}) { + col := table.GetColumn(colName) + setColumnTime(bean, col, t) + }) + } else if col.IsVersion && session.statement.checkVersion { + args = append(args, 1) + } else { + arg, err := session.value2Interface(col, fieldValue) + if err != nil { + return colNames, args, err + } + args = append(args, arg) + } + + colNames = append(colNames, col.Name) + } + return colNames, args, nil +} diff --git a/vendor/github.com/go-xorm/xorm/session_query.go b/vendor/github.com/go-xorm/xorm/session_query.go index f8098f849..5c9aeb391 100644 --- a/vendor/github.com/go-xorm/xorm/session_query.go +++ b/vendor/github.com/go-xorm/xorm/session_query.go @@ -64,13 +64,17 @@ func (session *Session) genQuerySQL(sqlorArgs ...interface{}) (string, []interfa } } + if err := session.statement.processIDParam(); err != nil { + return "", nil, err + } + condSQL, condArgs, err := builder.ToSQL(session.statement.cond) if err != nil { return "", nil, err } args := append(session.statement.joinArgs, condArgs...) - sqlStr, err := session.statement.genSelectSQL(columnStr, condSQL) + sqlStr, err := session.statement.genSelectSQL(columnStr, condSQL, true, true) if err != nil { return "", nil, err } diff --git a/vendor/github.com/go-xorm/xorm/session_schema.go b/vendor/github.com/go-xorm/xorm/session_schema.go index a2708b736..369ec72a4 100644 --- a/vendor/github.com/go-xorm/xorm/session_schema.go +++ b/vendor/github.com/go-xorm/xorm/session_schema.go @@ -6,9 +6,7 @@ package xorm import ( "database/sql" - "errors" "fmt" - "reflect" "strings" "github.com/go-xorm/core" @@ -34,8 +32,7 @@ func (session *Session) CreateTable(bean interface{}) error { } func (session *Session) createTable(bean interface{}) error { - v := rValue(bean) - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return err } @@ -54,8 +51,7 @@ func (session *Session) CreateIndexes(bean interface{}) error { } func (session *Session) createIndexes(bean interface{}) error { - v := rValue(bean) - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return err } @@ -78,8 +74,7 @@ func (session *Session) CreateUniques(bean interface{}) error { } func (session *Session) createUniques(bean interface{}) error { - v := rValue(bean) - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return err } @@ -103,8 +98,7 @@ func (session *Session) DropIndexes(bean interface{}) error { } func (session *Session) dropIndexes(bean interface{}) error { - v := rValue(bean) - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return err } @@ -128,11 +122,7 @@ func (session *Session) DropTable(beanOrTableName interface{}) error { } func (session *Session) dropTable(beanOrTableName interface{}) error { - tableName, err := session.engine.tableName(beanOrTableName) - if err != nil { - return err - } - + tableName := session.engine.TableName(beanOrTableName) var needDrop = true if !session.engine.dialect.SupportDropIfExists() { sqlStr, args := session.engine.dialect.TableCheckSql(tableName) @@ -144,8 +134,8 @@ func (session *Session) dropTable(beanOrTableName interface{}) error { } if needDrop { - sqlStr := session.engine.Dialect().DropTableSql(tableName) - _, err = session.exec(sqlStr) + sqlStr := session.engine.Dialect().DropTableSql(session.engine.TableName(tableName, true)) + _, err := session.exec(sqlStr) return err } return nil @@ -157,10 +147,7 @@ func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error) defer session.Close() } - tableName, err := session.engine.tableName(beanOrTableName) - if err != nil { - return false, err - } + tableName := session.engine.TableName(beanOrTableName) return session.isTableExist(tableName) } @@ -173,24 +160,15 @@ func (session *Session) isTableExist(tableName string) (bool, error) { // IsTableEmpty if table have any records func (session *Session) IsTableEmpty(bean interface{}) (bool, error) { - v := rValue(bean) - t := v.Type() - - if t.Kind() == reflect.String { - if session.isAutoClose { - defer session.Close() - } - return session.isTableEmpty(bean.(string)) - } else if t.Kind() == reflect.Struct { - rows, err := session.Count(bean) - return rows == 0, err + if session.isAutoClose { + defer session.Close() } - return false, errors.New("bean should be a struct or struct's point") + return session.isTableEmpty(session.engine.TableName(bean)) } func (session *Session) isTableEmpty(tableName string) (bool, error) { var total int64 - sqlStr := fmt.Sprintf("select count(*) from %s", session.engine.Quote(tableName)) + sqlStr := fmt.Sprintf("select count(*) from %s", session.engine.Quote(session.engine.TableName(tableName, true))) err := session.queryRow(sqlStr).Scan(&total) if err != nil { if err == sql.ErrNoRows { @@ -255,6 +233,12 @@ func (session *Session) Sync2(beans ...interface{}) error { return err } + session.autoResetStatement = false + defer func() { + session.autoResetStatement = true + session.resetStatement() + }() + var structTables []*core.Table for _, bean := range beans { @@ -264,7 +248,8 @@ func (session *Session) Sync2(beans ...interface{}) error { return err } structTables = append(structTables, table) - var tbName = session.tbNameNoSchema(table) + tbName := engine.TableName(bean) + tbNameWithSchema := engine.TableName(tbName, true) var oriTable *core.Table for _, tb := range tables { @@ -309,32 +294,32 @@ func (session *Session) Sync2(beans ...interface{}) error { if engine.dialect.DBType() == core.MYSQL || engine.dialect.DBType() == core.POSTGRES { engine.logger.Infof("Table %s column %s change type from %s to %s\n", - tbName, col.Name, curType, expectedType) - _, err = session.exec(engine.dialect.ModifyColumnSql(table.Name, col)) + tbNameWithSchema, col.Name, curType, expectedType) + _, err = session.exec(engine.dialect.ModifyColumnSql(tbNameWithSchema, col)) } else { engine.logger.Warnf("Table %s column %s db type is %s, struct type is %s\n", - tbName, col.Name, curType, expectedType) + tbNameWithSchema, col.Name, curType, expectedType) } } else if strings.HasPrefix(curType, core.Varchar) && strings.HasPrefix(expectedType, core.Varchar) { if engine.dialect.DBType() == core.MYSQL { if oriCol.Length < col.Length { engine.logger.Infof("Table %s column %s change type from varchar(%d) to varchar(%d)\n", - tbName, col.Name, oriCol.Length, col.Length) - _, err = session.exec(engine.dialect.ModifyColumnSql(table.Name, col)) + tbNameWithSchema, col.Name, oriCol.Length, col.Length) + _, err = session.exec(engine.dialect.ModifyColumnSql(tbNameWithSchema, col)) } } } else { if !(strings.HasPrefix(curType, expectedType) && curType[len(expectedType)] == '(') { engine.logger.Warnf("Table %s column %s db type is %s, struct type is %s", - tbName, col.Name, curType, expectedType) + tbNameWithSchema, col.Name, curType, expectedType) } } } else if expectedType == core.Varchar { if engine.dialect.DBType() == core.MYSQL { if oriCol.Length < col.Length { engine.logger.Infof("Table %s column %s change type from varchar(%d) to varchar(%d)\n", - tbName, col.Name, oriCol.Length, col.Length) - _, err = session.exec(engine.dialect.ModifyColumnSql(table.Name, col)) + tbNameWithSchema, col.Name, oriCol.Length, col.Length) + _, err = session.exec(engine.dialect.ModifyColumnSql(tbNameWithSchema, col)) } } } @@ -348,7 +333,7 @@ func (session *Session) Sync2(beans ...interface{}) error { } } else { session.statement.RefTable = table - session.statement.tableName = tbName + session.statement.tableName = tbNameWithSchema err = session.addColumn(col.Name) } if err != nil { @@ -371,7 +356,7 @@ func (session *Session) Sync2(beans ...interface{}) error { if oriIndex != nil { if oriIndex.Type != index.Type { - sql := engine.dialect.DropIndexSql(tbName, oriIndex) + sql := engine.dialect.DropIndexSql(tbNameWithSchema, oriIndex) _, err = session.exec(sql) if err != nil { return err @@ -387,7 +372,7 @@ func (session *Session) Sync2(beans ...interface{}) error { for name2, index2 := range oriTable.Indexes { if _, ok := foundIndexNames[name2]; !ok { - sql := engine.dialect.DropIndexSql(tbName, index2) + sql := engine.dialect.DropIndexSql(tbNameWithSchema, index2) _, err = session.exec(sql) if err != nil { return err @@ -398,12 +383,12 @@ func (session *Session) Sync2(beans ...interface{}) error { for name, index := range addedNames { if index.Type == core.UniqueType { session.statement.RefTable = table - session.statement.tableName = tbName - err = session.addUnique(tbName, name) + session.statement.tableName = tbNameWithSchema + err = session.addUnique(tbNameWithSchema, name) } else if index.Type == core.IndexType { session.statement.RefTable = table - session.statement.tableName = tbName - err = session.addIndex(tbName, name) + session.statement.tableName = tbNameWithSchema + err = session.addIndex(tbNameWithSchema, name) } if err != nil { return err @@ -428,7 +413,7 @@ func (session *Session) Sync2(beans ...interface{}) error { for _, colName := range table.ColumnsSeq() { if oriTable.GetColumn(colName) == nil { - engine.logger.Warnf("Table %s has column %s but struct has not related field", table.Name, colName) + engine.logger.Warnf("Table %s has column %s but struct has not related field", engine.TableName(table.Name, true), colName) } } } diff --git a/vendor/github.com/go-xorm/xorm/session_tx.go b/vendor/github.com/go-xorm/xorm/session_tx.go index 84d2f7f9d..c8d759a31 100644 --- a/vendor/github.com/go-xorm/xorm/session_tx.go +++ b/vendor/github.com/go-xorm/xorm/session_tx.go @@ -24,6 +24,7 @@ func (session *Session) Rollback() error { if !session.isAutoCommit && !session.isCommitedOrRollbacked { session.saveLastSQL(session.engine.dialect.RollBackStr()) session.isCommitedOrRollbacked = true + session.isAutoCommit = true return session.tx.Rollback() } return nil @@ -34,6 +35,7 @@ func (session *Session) Commit() error { if !session.isAutoCommit && !session.isCommitedOrRollbacked { session.saveLastSQL("COMMIT") session.isCommitedOrRollbacked = true + session.isAutoCommit = true var err error if err = session.tx.Commit(); err == nil { // handle processors after tx committed diff --git a/vendor/github.com/go-xorm/xorm/session_update.go b/vendor/github.com/go-xorm/xorm/session_update.go index f55874566..84c7e7fec 100644 --- a/vendor/github.com/go-xorm/xorm/session_update.go +++ b/vendor/github.com/go-xorm/xorm/session_update.go @@ -40,7 +40,7 @@ func (session *Session) cacheUpdate(table *core.Table, tableName, sqlStr string, } } - cacher := session.engine.getCacher2(table) + cacher := session.engine.getCacher(tableName) session.engine.logger.Debug("[cacheUpdate] get cache sql", newsql, args[nStart:]) ids, err := core.GetCacheSql(cacher, tableName, newsql, args[nStart:]) if err != nil { @@ -167,7 +167,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 var isMap = t.Kind() == reflect.Map var isStruct = t.Kind() == reflect.Struct if isStruct { - if err := session.statement.setRefValue(v); err != nil { + if err := session.statement.setRefBean(bean); err != nil { return 0, err } @@ -176,12 +176,10 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 } if session.statement.ColumnStr == "" { - colNames, args = buildUpdates(session.engine, session.statement.RefTable, bean, false, false, - false, false, session.statement.allUseBool, session.statement.useAllCols, - session.statement.mustColumnMap, session.statement.nullableMap, - session.statement.columnMap, true, session.statement.unscoped) + colNames, args = session.statement.buildUpdates(bean, false, false, + false, false, true) } else { - colNames, args, err = genCols(session.statement.RefTable, session, bean, true, true) + colNames, args, err = session.genUpdateColumns(bean) if err != nil { return 0, err } @@ -202,7 +200,8 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 table := session.statement.RefTable if session.statement.UseAutoTime && table != nil && table.Updated != "" { - if _, ok := session.statement.columnMap[strings.ToLower(table.Updated)]; !ok { + if !session.statement.columnMap.contain(table.Updated) && + !session.statement.omitColumnMap.contain(table.Updated) { colNames = append(colNames, session.engine.Quote(table.Updated)+" = ?") col := table.UpdatedColumn() val, t := session.engine.nowTime(col) @@ -362,12 +361,11 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 } } - if table != nil { - if cacher := session.engine.getCacher2(table); cacher != nil && session.statement.UseCache { - //session.cacheUpdate(table, tableName, sqlStr, args...) - cacher.ClearIds(tableName) - cacher.ClearBeans(tableName) - } + if cacher := session.engine.getCacher(tableName); cacher != nil && session.statement.UseCache { + //session.cacheUpdate(table, tableName, sqlStr, args...) + session.engine.logger.Debug("[cacheUpdate] clear table ", tableName) + cacher.ClearIds(tableName) + cacher.ClearBeans(tableName) } // handle after update processors @@ -402,3 +400,92 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 return res.RowsAffected() } + +func (session *Session) genUpdateColumns(bean interface{}) ([]string, []interface{}, error) { + table := session.statement.RefTable + colNames := make([]string, 0, len(table.ColumnsSeq())) + args := make([]interface{}, 0, len(table.ColumnsSeq())) + + for _, col := range table.Columns() { + if !col.IsVersion && !col.IsCreated && !col.IsUpdated { + if session.statement.omitColumnMap.contain(col.Name) { + continue + } + } + if col.MapType == core.ONLYFROMDB { + continue + } + + fieldValuePtr, err := col.ValueOf(bean) + if err != nil { + return nil, nil, err + } + fieldValue := *fieldValuePtr + + if col.IsAutoIncrement { + switch fieldValue.Type().Kind() { + case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int, reflect.Int64: + if fieldValue.Int() == 0 { + continue + } + case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint, reflect.Uint64: + if fieldValue.Uint() == 0 { + continue + } + case reflect.String: + if len(fieldValue.String()) == 0 { + continue + } + case reflect.Ptr: + if fieldValue.Pointer() == 0 { + continue + } + } + } + + if col.IsDeleted || col.IsCreated { + continue + } + + if len(session.statement.columnMap) > 0 { + if !session.statement.columnMap.contain(col.Name) { + continue + } else if _, ok := session.statement.incrColumns[col.Name]; ok { + continue + } else if _, ok := session.statement.decrColumns[col.Name]; ok { + continue + } + } + + // !evalphobia! set fieldValue as nil when column is nullable and zero-value + if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok { + if col.Nullable && isZero(fieldValue.Interface()) { + var nilValue *int + fieldValue = reflect.ValueOf(nilValue) + } + } + + if col.IsUpdated && session.statement.UseAutoTime /*&& isZero(fieldValue.Interface())*/ { + // if time is non-empty, then set to auto time + val, t := session.engine.nowTime(col) + args = append(args, val) + + var colName = col.Name + session.afterClosures = append(session.afterClosures, func(bean interface{}) { + col := table.GetColumn(colName) + setColumnTime(bean, col, t) + }) + } else if col.IsVersion && session.statement.checkVersion { + args = append(args, 1) + } else { + arg, err := session.value2Interface(col, fieldValue) + if err != nil { + return colNames, args, err + } + args = append(args, arg) + } + + colNames = append(colNames, session.engine.Quote(col.Name)+" = ?") + } + return colNames, args, nil +} diff --git a/vendor/github.com/go-xorm/xorm/statement.go b/vendor/github.com/go-xorm/xorm/statement.go index 6400425b2..7856936f5 100644 --- a/vendor/github.com/go-xorm/xorm/statement.go +++ b/vendor/github.com/go-xorm/xorm/statement.go @@ -5,7 +5,6 @@ package xorm import ( - "bytes" "database/sql/driver" "encoding/json" "errors" @@ -18,21 +17,6 @@ import ( "github.com/go-xorm/core" ) -type incrParam struct { - colName string - arg interface{} -} - -type decrParam struct { - colName string - arg interface{} -} - -type exprParam struct { - colName string - expr string -} - // Statement save all the sql info for executing SQL type Statement struct { RefTable *core.Table @@ -47,7 +31,6 @@ type Statement struct { HavingStr string ColumnStr string selectStr string - columnMap map[string]bool useAllCols bool OmitStr string AltTableName string @@ -67,6 +50,8 @@ type Statement struct { allUseBool bool checkVersion bool unscoped bool + columnMap columnMap + omitColumnMap columnMap mustColumnMap map[string]bool nullableMap map[string]bool incrColumns map[string]incrParam @@ -89,7 +74,8 @@ func (statement *Statement) Init() { statement.HavingStr = "" statement.ColumnStr = "" statement.OmitStr = "" - statement.columnMap = make(map[string]bool) + statement.columnMap = columnMap{} + statement.omitColumnMap = columnMap{} statement.AltTableName = "" statement.tableName = "" statement.idParam = nil @@ -221,34 +207,33 @@ func (statement *Statement) setRefValue(v reflect.Value) error { if err != nil { return err } - statement.tableName = statement.Engine.tbName(v) + statement.tableName = statement.Engine.TableName(v, true) return nil } -// Table tempororily set table name, the parameter could be a string or a pointer of struct -func (statement *Statement) Table(tableNameOrBean interface{}) *Statement { - v := rValue(tableNameOrBean) - t := v.Type() - if t.Kind() == reflect.String { - statement.AltTableName = tableNameOrBean.(string) - } else if t.Kind() == reflect.Struct { - var err error - statement.RefTable, err = statement.Engine.autoMapType(v) - if err != nil { - statement.Engine.logger.Error(err) - return statement - } - statement.AltTableName = statement.Engine.tbName(v) +func (statement *Statement) setRefBean(bean interface{}) error { + var err error + statement.RefTable, err = statement.Engine.autoMapType(rValue(bean)) + if err != nil { + return err } - return statement + statement.tableName = statement.Engine.TableName(bean, true) + return nil } // Auto generating update columnes and values according a struct -func buildUpdates(engine *Engine, table *core.Table, bean interface{}, - includeVersion bool, includeUpdated bool, includeNil bool, - includeAutoIncr bool, allUseBool bool, useAllCols bool, - mustColumnMap map[string]bool, nullableMap map[string]bool, - columnMap map[string]bool, update, unscoped bool) ([]string, []interface{}) { +func (statement *Statement) buildUpdates(bean interface{}, + includeVersion, includeUpdated, includeNil, + includeAutoIncr, update bool) ([]string, []interface{}) { + engine := statement.Engine + table := statement.RefTable + allUseBool := statement.allUseBool + useAllCols := statement.useAllCols + mustColumnMap := statement.mustColumnMap + nullableMap := statement.nullableMap + columnMap := statement.columnMap + omitColumnMap := statement.omitColumnMap + unscoped := statement.unscoped var colNames = make([]string, 0) var args = make([]interface{}, 0) @@ -268,7 +253,14 @@ func buildUpdates(engine *Engine, table *core.Table, bean interface{}, if col.IsDeleted && !unscoped { continue } - if use, ok := columnMap[strings.ToLower(col.Name)]; ok && !use { + if omitColumnMap.contain(col.Name) { + continue + } + if len(columnMap) > 0 && !columnMap.contain(col.Name) { + continue + } + + if col.MapType == core.ONLYFROMDB { continue } @@ -604,17 +596,10 @@ func (statement *Statement) col2NewColsWithQuote(columns ...string) []string { } func (statement *Statement) colmap2NewColsWithQuote() []string { - newColumns := make([]string, 0, len(statement.columnMap)) - for col := range statement.columnMap { - fields := strings.Split(strings.TrimSpace(col), ".") - if len(fields) == 1 { - newColumns = append(newColumns, statement.Engine.quote(fields[0])) - } else if len(fields) == 2 { - newColumns = append(newColumns, statement.Engine.quote(fields[0])+"."+ - statement.Engine.quote(fields[1])) - } else { - panic(errors.New("unwanted colnames")) - } + newColumns := make([]string, len(statement.columnMap), len(statement.columnMap)) + copy(newColumns, statement.columnMap) + for i := 0; i < len(statement.columnMap); i++ { + newColumns[i] = statement.Engine.Quote(newColumns[i]) } return newColumns } @@ -642,10 +627,11 @@ func (statement *Statement) Select(str string) *Statement { func (statement *Statement) Cols(columns ...string) *Statement { cols := col2NewCols(columns...) for _, nc := range cols { - statement.columnMap[strings.ToLower(nc)] = true + statement.columnMap.add(nc) } newColumns := statement.colmap2NewColsWithQuote() + statement.ColumnStr = strings.Join(newColumns, ", ") statement.ColumnStr = strings.Replace(statement.ColumnStr, statement.Engine.quote("*"), "*", -1) return statement @@ -680,7 +666,7 @@ func (statement *Statement) UseBool(columns ...string) *Statement { func (statement *Statement) Omit(columns ...string) { newColumns := col2NewCols(columns...) for _, nc := range newColumns { - statement.columnMap[strings.ToLower(nc)] = false + statement.omitColumnMap = append(statement.omitColumnMap, nc) } statement.OmitStr = statement.Engine.Quote(strings.Join(newColumns, statement.Engine.Quote(", "))) } @@ -719,10 +705,9 @@ func (statement *Statement) OrderBy(order string) *Statement { // Desc generate `ORDER BY xx DESC` func (statement *Statement) Desc(colNames ...string) *Statement { - var buf bytes.Buffer - fmt.Fprintf(&buf, statement.OrderStr) + var buf builder.StringBuilder if len(statement.OrderStr) > 0 { - fmt.Fprint(&buf, ", ") + fmt.Fprint(&buf, statement.OrderStr, ", ") } newColNames := statement.col2NewColsWithQuote(colNames...) fmt.Fprintf(&buf, "%v DESC", strings.Join(newColNames, " DESC, ")) @@ -732,10 +717,9 @@ func (statement *Statement) Desc(colNames ...string) *Statement { // Asc provide asc order by query condition, the input parameters are columns. func (statement *Statement) Asc(colNames ...string) *Statement { - var buf bytes.Buffer - fmt.Fprintf(&buf, statement.OrderStr) + var buf builder.StringBuilder if len(statement.OrderStr) > 0 { - fmt.Fprint(&buf, ", ") + fmt.Fprint(&buf, statement.OrderStr, ", ") } newColNames := statement.col2NewColsWithQuote(colNames...) fmt.Fprintf(&buf, "%v ASC", strings.Join(newColNames, " ASC, ")) @@ -743,48 +727,35 @@ func (statement *Statement) Asc(colNames ...string) *Statement { return statement } +// Table tempororily set table name, the parameter could be a string or a pointer of struct +func (statement *Statement) Table(tableNameOrBean interface{}) *Statement { + v := rValue(tableNameOrBean) + t := v.Type() + if t.Kind() == reflect.Struct { + var err error + statement.RefTable, err = statement.Engine.autoMapType(v) + if err != nil { + statement.Engine.logger.Error(err) + return statement + } + } + + statement.AltTableName = statement.Engine.TableName(tableNameOrBean, true) + return statement +} + // Join The joinOP should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN func (statement *Statement) Join(joinOP string, tablename interface{}, condition string, args ...interface{}) *Statement { - var buf bytes.Buffer + var buf builder.StringBuilder if len(statement.JoinStr) > 0 { fmt.Fprintf(&buf, "%v %v JOIN ", statement.JoinStr, joinOP) } else { fmt.Fprintf(&buf, "%v JOIN ", joinOP) } - switch tablename.(type) { - case []string: - t := tablename.([]string) - if len(t) > 1 { - fmt.Fprintf(&buf, "%v AS %v", statement.Engine.Quote(t[0]), statement.Engine.Quote(t[1])) - } else if len(t) == 1 { - fmt.Fprintf(&buf, statement.Engine.Quote(t[0])) - } - case []interface{}: - t := tablename.([]interface{}) - l := len(t) - var table string - if l > 0 { - f := t[0] - v := rValue(f) - t := v.Type() - if t.Kind() == reflect.String { - table = f.(string) - } else if t.Kind() == reflect.Struct { - table = statement.Engine.tbName(v) - } - } - if l > 1 { - fmt.Fprintf(&buf, "%v AS %v", statement.Engine.Quote(table), - statement.Engine.Quote(fmt.Sprintf("%v", t[1]))) - } else if l == 1 { - fmt.Fprintf(&buf, statement.Engine.Quote(table)) - } - default: - fmt.Fprintf(&buf, statement.Engine.Quote(fmt.Sprintf("%v", tablename))) - } + tbName := statement.Engine.TableName(tablename, true) - fmt.Fprintf(&buf, " ON %v", condition) + fmt.Fprintf(&buf, "%s ON %v", tbName, condition) statement.JoinStr = buf.String() statement.joinArgs = append(statement.joinArgs, args...) return statement @@ -809,18 +780,20 @@ func (statement *Statement) Unscoped() *Statement { } func (statement *Statement) genColumnStr() string { - var buf bytes.Buffer if statement.RefTable == nil { return "" } + var buf builder.StringBuilder columns := statement.RefTable.Columns() for _, col := range columns { - if statement.OmitStr != "" { - if _, ok := getFlagForColumn(statement.columnMap, col); ok { - continue - } + if statement.omitColumnMap.contain(col.Name) { + continue + } + + if len(statement.columnMap) > 0 && !statement.columnMap.contain(col.Name) { + continue } if col.MapType == core.ONLYTODB { @@ -831,10 +804,6 @@ func (statement *Statement) genColumnStr() string { buf.WriteString(", ") } - if col.IsPrimaryKey && statement.Engine.Dialect().DBType() == "ql" { - buf.WriteString("id() AS ") - } - if statement.JoinStr != "" { if statement.TableAlias != "" { buf.WriteString(statement.TableAlias) @@ -859,11 +828,13 @@ func (statement *Statement) genCreateTableSQL() string { func (statement *Statement) genIndexSQL() []string { var sqls []string tbName := statement.TableName() - quote := statement.Engine.Quote - for idxName, index := range statement.RefTable.Indexes { + for _, index := range statement.RefTable.Indexes { if index.Type == core.IndexType { - sql := fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(tbName, idxName)), - quote(tbName), quote(strings.Join(index.Cols, quote(",")))) + sql := statement.Engine.dialect.CreateIndexSql(tbName, index) + /*idxTBName := strings.Replace(tbName, ".", "_", -1) + idxTBName = strings.Replace(idxTBName, `"`, "", -1) + sql := fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(idxTBName, idxName)), + quote(tbName), quote(strings.Join(index.Cols, quote(","))))*/ sqls = append(sqls, sql) } } @@ -889,16 +860,18 @@ func (statement *Statement) genUniqueSQL() []string { func (statement *Statement) genDelIndexSQL() []string { var sqls []string tbName := statement.TableName() + idxPrefixName := strings.Replace(tbName, `"`, "", -1) + idxPrefixName = strings.Replace(idxPrefixName, `.`, "_", -1) for idxName, index := range statement.RefTable.Indexes { var rIdxName string if index.Type == core.UniqueType { - rIdxName = uniqueName(tbName, idxName) + rIdxName = uniqueName(idxPrefixName, idxName) } else if index.Type == core.IndexType { - rIdxName = indexName(tbName, idxName) + rIdxName = indexName(idxPrefixName, idxName) } - sql := fmt.Sprintf("DROP INDEX %v", statement.Engine.Quote(rIdxName)) + sql := fmt.Sprintf("DROP INDEX %v", statement.Engine.Quote(statement.Engine.TableName(rIdxName, true))) if statement.Engine.dialect.IndexOnTable() { - sql += fmt.Sprintf(" ON %v", statement.Engine.Quote(statement.TableName())) + sql += fmt.Sprintf(" ON %v", statement.Engine.Quote(tbName)) } sqls = append(sqls, sql) } @@ -949,7 +922,7 @@ func (statement *Statement) genGetSQL(bean interface{}) (string, []interface{}, v := rValue(bean) isStruct := v.Kind() == reflect.Struct if isStruct { - statement.setRefValue(v) + statement.setRefBean(bean) } var columnStr = statement.ColumnStr @@ -982,13 +955,17 @@ func (statement *Statement) genGetSQL(bean interface{}) (string, []interface{}, if err := statement.mergeConds(bean); err != nil { return "", nil, err } + } else { + if err := statement.processIDParam(); err != nil { + return "", nil, err + } } condSQL, condArgs, err := builder.ToSQL(statement.cond) if err != nil { return "", nil, err } - sqlStr, err := statement.genSelectSQL(columnStr, condSQL) + sqlStr, err := statement.genSelectSQL(columnStr, condSQL, true, true) if err != nil { return "", nil, err } @@ -1001,7 +978,7 @@ func (statement *Statement) genCountSQL(beans ...interface{}) (string, []interfa var condArgs []interface{} var err error if len(beans) > 0 { - statement.setRefValue(rValue(beans[0])) + statement.setRefBean(beans[0]) condSQL, condArgs, err = statement.genConds(beans[0]) } else { condSQL, condArgs, err = builder.ToSQL(statement.cond) @@ -1018,7 +995,7 @@ func (statement *Statement) genCountSQL(beans ...interface{}) (string, []interfa selectSQL = "count(*)" } } - sqlStr, err := statement.genSelectSQL(selectSQL, condSQL) + sqlStr, err := statement.genSelectSQL(selectSQL, condSQL, false, false) if err != nil { return "", nil, err } @@ -1027,7 +1004,7 @@ func (statement *Statement) genCountSQL(beans ...interface{}) (string, []interfa } func (statement *Statement) genSumSQL(bean interface{}, columns ...string) (string, []interface{}, error) { - statement.setRefValue(rValue(bean)) + statement.setRefBean(bean) var sumStrs = make([]string, 0, len(columns)) for _, colName := range columns { @@ -1043,7 +1020,7 @@ func (statement *Statement) genSumSQL(bean interface{}, columns ...string) (stri return "", nil, err } - sqlStr, err := statement.genSelectSQL(sumSelect, condSQL) + sqlStr, err := statement.genSelectSQL(sumSelect, condSQL, true, true) if err != nil { return "", nil, err } @@ -1051,27 +1028,20 @@ func (statement *Statement) genSumSQL(bean interface{}, columns ...string) (stri return sqlStr, append(statement.joinArgs, condArgs...), nil } -func (statement *Statement) genSelectSQL(columnStr, condSQL string) (a string, err error) { - var distinct string +func (statement *Statement) genSelectSQL(columnStr, condSQL string, needLimit, needOrderBy bool) (string, error) { + var ( + distinct string + dialect = statement.Engine.Dialect() + quote = statement.Engine.Quote + fromStr = " FROM " + top, mssqlCondi, whereStr string + ) if statement.IsDistinct && !strings.HasPrefix(columnStr, "count") { distinct = "DISTINCT " } - - var dialect = statement.Engine.Dialect() - var quote = statement.Engine.Quote - var top string - var mssqlCondi string - - if err := statement.processIDParam(); err != nil { - return "", err - } - - var buf bytes.Buffer if len(condSQL) > 0 { - fmt.Fprintf(&buf, " WHERE %v", condSQL) + whereStr = " WHERE " + condSQL } - var whereStr = buf.String() - var fromStr = " FROM " if dialect.DBType() == core.MSSQL && strings.Contains(statement.TableName(), "..") { fromStr += statement.TableName() @@ -1118,9 +1088,10 @@ func (statement *Statement) genSelectSQL(columnStr, condSQL string) (a string, e } var orderStr string - if len(statement.OrderStr) > 0 { + if needOrderBy && len(statement.OrderStr) > 0 { orderStr = " ORDER BY " + statement.OrderStr } + var groupStr string if len(statement.GroupByStr) > 0 { groupStr = " GROUP BY " + statement.GroupByStr @@ -1130,45 +1101,50 @@ func (statement *Statement) genSelectSQL(columnStr, condSQL string) (a string, e } } - // !nashtsai! REVIEW Sprintf is considered slowest mean of string concatnation, better to work with builder pattern - a = fmt.Sprintf("SELECT %v%v%v%v%v", distinct, top, columnStr, fromStr, whereStr) + var buf builder.StringBuilder + fmt.Fprintf(&buf, "SELECT %v%v%v%v%v", distinct, top, columnStr, fromStr, whereStr) if len(mssqlCondi) > 0 { if len(whereStr) > 0 { - a += " AND " + mssqlCondi + fmt.Fprint(&buf, " AND ", mssqlCondi) } else { - a += " WHERE " + mssqlCondi + fmt.Fprint(&buf, " WHERE ", mssqlCondi) } } if statement.GroupByStr != "" { - a = fmt.Sprintf("%v GROUP BY %v", a, statement.GroupByStr) + fmt.Fprint(&buf, " GROUP BY ", statement.GroupByStr) } if statement.HavingStr != "" { - a = fmt.Sprintf("%v %v", a, statement.HavingStr) + fmt.Fprint(&buf, " ", statement.HavingStr) } - if statement.OrderStr != "" { - a = fmt.Sprintf("%v ORDER BY %v", a, statement.OrderStr) + if needOrderBy && statement.OrderStr != "" { + fmt.Fprint(&buf, " ORDER BY ", statement.OrderStr) } - if dialect.DBType() != core.MSSQL && dialect.DBType() != core.ORACLE { - if statement.Start > 0 { - a = fmt.Sprintf("%v LIMIT %v OFFSET %v", a, statement.LimitN, statement.Start) - } else if statement.LimitN > 0 { - a = fmt.Sprintf("%v LIMIT %v", a, statement.LimitN) - } - } else if dialect.DBType() == core.ORACLE { - if statement.Start != 0 || statement.LimitN != 0 { - a = fmt.Sprintf("SELECT %v FROM (SELECT %v,ROWNUM RN FROM (%v) at WHERE ROWNUM <= %d) aat WHERE RN > %d", columnStr, columnStr, a, statement.Start+statement.LimitN, statement.Start) + if needLimit { + if dialect.DBType() != core.MSSQL && dialect.DBType() != core.ORACLE { + if statement.Start > 0 { + fmt.Fprintf(&buf, " LIMIT %v OFFSET %v", statement.LimitN, statement.Start) + } else if statement.LimitN > 0 { + fmt.Fprint(&buf, " LIMIT ", statement.LimitN) + } + } else if dialect.DBType() == core.ORACLE { + if statement.Start != 0 || statement.LimitN != 0 { + oldString := buf.String() + buf.Reset() + fmt.Fprintf(&buf, "SELECT %v FROM (SELECT %v,ROWNUM RN FROM (%v) at WHERE ROWNUM <= %d) aat WHERE RN > %d", + columnStr, columnStr, oldString, statement.Start+statement.LimitN, statement.Start) + } } } if statement.IsForUpdate { - a = dialect.ForUpdateSql(a) + return dialect.ForUpdateSql(buf.String()), nil } - return + return buf.String(), nil } func (statement *Statement) processIDParam() error { - if statement.idParam == nil { + if statement.idParam == nil || statement.RefTable == nil { return nil } diff --git a/vendor/github.com/go-xorm/xorm/xorm.go b/vendor/github.com/go-xorm/xorm/xorm.go index 4fdadf2fa..141c4897d 100644 --- a/vendor/github.com/go-xorm/xorm/xorm.go +++ b/vendor/github.com/go-xorm/xorm/xorm.go @@ -17,7 +17,7 @@ import ( const ( // Version show the xorm's version - Version string = "0.6.4.0910" + Version string = "0.7.0.0504" ) func regDrvsNDialects() bool { @@ -31,7 +31,7 @@ func regDrvsNDialects() bool { "mysql": {"mysql", func() core.Driver { return &mysqlDriver{} }, func() core.Dialect { return &mysql{} }}, "mymysql": {"mysql", func() core.Driver { return &mymysqlDriver{} }, func() core.Dialect { return &mysql{} }}, "postgres": {"postgres", func() core.Driver { return &pqDriver{} }, func() core.Dialect { return &postgres{} }}, - "pgx": {"postgres", func() core.Driver { return &pqDriver{} }, func() core.Dialect { return &postgres{} }}, + "pgx": {"postgres", func() core.Driver { return &pqDriverPgx{} }, func() core.Dialect { return &postgres{} }}, "sqlite3": {"sqlite3", func() core.Driver { return &sqlite3Driver{} }, func() core.Dialect { return &sqlite3{} }}, "oci8": {"oracle", func() core.Driver { return &oci8Driver{} }, func() core.Dialect { return &oracle{} }}, "goracle": {"oracle", func() core.Driver { return &goracleDriver{} }, func() core.Dialect { return &oracle{} }}, @@ -90,6 +90,7 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) { TagIdentifier: "xorm", TZLocation: time.Local, tagHandlers: defaultTagHandlers, + cachers: make(map[string]core.Cacher), } if uri.DbType == core.SQLITE { @@ -108,6 +109,13 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) { return engine, nil } +// NewEngineWithParams new a db manager with params. The params will be passed to dialect. +func NewEngineWithParams(driverName string, dataSourceName string, params map[string]string) (*Engine, error) { + engine, err := NewEngine(driverName, dataSourceName) + engine.dialect.SetParams(params) + return engine, err +} + // Clone clone an engine func (engine *Engine) Clone() (*Engine, error) { return NewEngine(engine.DriverName(), engine.DataSourceName()) From cc9fa062e60fcb7096d5d0521497266a3d58a99d Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Fri, 20 Jul 2018 02:11:33 +0000 Subject: [PATCH 119/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_pt-BR.ini | 2 +- options/locale/locale_uk-UA.ini | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index 62d21fee5..055ba994f 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -930,7 +930,7 @@ activity.new_issues_count_n=Novas issues activity.new_issue_label=Aberto activity.title.unresolved_conv_1=%d conversa não resolvida activity.title.unresolved_conv_n=%d conversas não resolvidas -activity.unresolved_conv_desc=Estes problemas foram recentemente alterados e pull requests ainda não foram resolvidos. +activity.unresolved_conv_desc=Estas issues foram recentemente alteradas e pull requests ainda não foram resolvidos. activity.unresolved_conv_label=Abrir activity.title.releases_1=%d Versão activity.title.releases_n=%d Versões diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 20985668e..8efcc4c15 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -781,8 +781,17 @@ issues.due_date_added=додав(ла) дату завершення %s %s issues.due_date_modified=термін змінено з %s %s на %s issues.due_date_remove=видалив(ла) дату завершення %s %s issues.due_date_overdue=Прострочено +issues.due_date_invalid=Термін дії не дійсний або не відповідає дійсності. Будь ласка, використовуйте формат yyyy-mm-dd. +issues.dependency.title=Залежності +issues.dependency.issue_no_dependencies=Ця проблема в даний час не має залежностей. +issues.dependency.pr_no_dependencies=Цей запит на злиття в даний час не має залежностей. +issues.dependency.add=Додати нову залежність... issues.dependency.cancel=Відмінити issues.dependency.remove=Видалити +issues.dependency.issue_number=Номер проблеми +issues.dependency.added_dependency=
0%
[2]s додано нову залежність %[3]s' +issues.dependency.removed_dependency=
0%
[2]s видалено залежність %[3]s' +issues.dependency.blocks_short=Блоки pulls.desc=Увімкнути запити на злиття та інтерфейс узгодження правок. pulls.new=Новий запит на злиття From b174817b6a6c4b32956d52878f54f62b9bf79638 Mon Sep 17 00:00:00 2001 From: bugreport0 <32939607+bugreport0@users.noreply.github.com> Date: Fri, 20 Jul 2018 16:40:08 +0000 Subject: [PATCH 120/124] Improve English translation for new features. (#4481) --- options/locale/locale_en-US.ini | 65 ++++++++++++++++----------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 72e79cf90..629d84e05 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -32,16 +32,16 @@ twofa_scratch = Two-Factor Scratch Code passcode = Passcode u2f_insert_key = Insert your security key -u2f_sign_in = Press the button on your security key. If you can't find a button, re-insert it. +u2f_sign_in = Press the button on your security key. If your security key has no button, re-insert it. u2f_press_button = Please press the button on your security key… u2f_use_twofa = Use a two-factor code from your phone -u2f_error = We can't read your security key! -u2f_unsupported_browser = Your browser don't support U2F keys. Please try another browser. -u2f_error_1 = An unknown error occured. Please retry. -u2f_error_2 = Please make sure that you're using an encrypted connection (https://) and visiting the correct URL. -u2f_error_3 = The server could not proceed your request. -u2f_error_4 = The presented key is not eligible for this request. If you try to register it, make sure that the key isn't already registered. -u2f_error_5 = Timeout reached before your key could be read. Please reload to retry. +u2f_error = Could not read your security key. +u2f_unsupported_browser = Your browser does not support U2F security keys. +u2f_error_1 = An unknown error occurred. Please retry. +u2f_error_2 = Please make sure to use the correct, encrypted (https://) URL. +u2f_error_3 = The server could not process your request. +u2f_error_4 = The security key is not permitted for this request. Please make sure that the key is not already registered. +u2f_error_5 = Timeout reached before your key could be read. Please reload this page and retry. u2f_reload = Reload repository = Repository @@ -130,7 +130,7 @@ federated_avatar_lookup = Enable Federated Avatars federated_avatar_lookup_popup = Enable federated avatar lookup using Libravatar. disable_registration = Disable Self-Registration disable_registration_popup = Disable user self-registration. Only administrators will be able to create new user accounts. -allow_only_external_registration_popup=Enable the registration only through external services. +allow_only_external_registration_popup = Allow Registration Only Through External Services openid_signin = Enable OpenID Sign-In openid_signin_popup = Enable user sign-in via OpenID. openid_signup = Enable OpenID Self-Registration @@ -463,13 +463,13 @@ then_enter_passcode = And enter the passcode shown in the application: passcode_invalid = The passcode is incorrect. Try again. twofa_enrolled = Your account has been enrolled into two-factor authentication. Store your scratch token (%s) in a safe place as it is only shown once! -u2f_desc = Security keys are hardware devices containing cryptographic keys. They could be used for two factor authentication. The security key must support the FIDO U2F standard. -u2f_require_twofa = Two-Factor-Authentication must be enrolled in order to use security keys. +u2f_desc = Security keys are hardware devices containing cryptographic keys. They can be used for two-factor authentication. Security keys must support the FIDO U2F standard. +u2f_require_twofa = Your account must be enrolled in two-factor authentication to use security keys. u2f_register_key = Add Security Key u2f_nickname = Nickname u2f_press_button = Press the button on your security key to register it. u2f_delete_key = Remove Security Key -u2f_delete_key_desc= If you remove a security key you cannot login with it anymore. Are you sure? +u2f_delete_key_desc = If you remove a security key you can no longer sign in with it. Continue? manage_account_links = Manage Linked Accounts manage_account_links_desc = These external accounts are linked to your Gitea account. @@ -650,7 +650,7 @@ issues.new.open_milestone = Open Milestones issues.new.closed_milestone = Closed Milestones issues.new.assignees = Assignees issues.new.clear_assignees = Clear assignees -issues.new.no_assignees = Nobody assigned +issues.new.no_assignees = No Assignees issues.no_ref = No Branch/Tag Specified issues.create = Create Issue issues.new_label = New Label @@ -781,34 +781,33 @@ issues.due_date_added = "added the due date %s %s" issues.due_date_modified = "modified the due date to %s from %s %s" issues.due_date_remove = "removed the due date %s %s" issues.due_date_overdue = "Overdue" -issues.due_date_invalid = "The due date is invalid or out of range. Please use the format yyyy-mm-dd." +issues.due_date_invalid = "The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'." issues.dependency.title = Dependencies issues.dependency.issue_no_dependencies = This issue currently doesn't have any dependencies. issues.dependency.pr_no_dependencies = This pull request currently doesn't have any dependencies. -issues.dependency.add = Add a new dependency... +issues.dependency.add = Add dependency... issues.dependency.cancel = Cancel issues.dependency.remove = Remove -issues.dependency.issue_number = Issuenumber issues.dependency.added_dependency = `%[2]s added a new dependency %[3]s` issues.dependency.removed_dependency = `%[2]s removed a dependency %[3]s` issues.dependency.issue_closing_blockedby = Closing this pull request is blocked by the following issues issues.dependency.pr_closing_blockedby = Closing this issue is blocked by the following issues issues.dependency.issue_close_blocks = This issue blocks closing of the following issues issues.dependency.pr_close_blocks = This pull request blocks closing of the following issues -issues.dependency.issue_close_blocked = You need to close all issues blocking this issue before you can close it! -issues.dependency.pr_close_blocked = You need to close all issues blocking this pull request before you can merge it! +issues.dependency.issue_close_blocked = You need to close all issues blocking this issue before you can close it. +issues.dependency.pr_close_blocked = You need to close all issues blocking this pull request before you can merge it. issues.dependency.blocks_short = Blocks issues.dependency.blocked_by_short = Depends on issues.dependency.remove_header = Remove Dependency -issues.dependency.issue_remove_text = This will remove the dependency to this issue. Are you sure? You cannot undo this! -issues.dependency.pr_remove_text = This will remove the dependency to this pull request. Are you sure? You cannot undo this! -issues.dependency.setting = Issues & PRs can have dependencies -issues.dependency.add_error_same_issue = You cannot make an issue depend on itself! -issues.dependency.add_error_dep_issue_not_exist = Dependent issue does not exist! -issues.dependency.add_error_dep_not_exist = Dependency does not exist! -issues.dependency.add_error_dep_exists = Dependency already exists! -issues.dependency.add_error_cannot_create_circular = You cannot create a dependency with two issues blocking each other! -issues.dependency.add_error_dep_not_same_repo = Both issues must be in the same repo! +issues.dependency.issue_remove_text = This will remove the dependency from this issue. Continue? +issues.dependency.pr_remove_text = This will remove the dependency from this pull request. Continue? +issues.dependency.setting = Enable Dependencies For Issues and Pull Requests +issues.dependency.add_error_same_issue = You cannot make an issue depend on itself. +issues.dependency.add_error_dep_issue_not_exist = Dependent issue does not exist. +issues.dependency.add_error_dep_not_exist = Dependency does not exist. +issues.dependency.add_error_dep_exists = Dependency already exists. +issues.dependency.add_error_cannot_create_circular = You cannot create a dependency with two issues blocking each other. +issues.dependency.add_error_dep_not_same_repo = Both issues must be in the same repository. pulls.desc = Enable merge requests and code reviews. pulls.new = New Pull Request @@ -1196,8 +1195,8 @@ branch.protected_deletion_failed = Branch '%s' is protected. It cannot be delete topic.manage_topics = Manage Topics topic.done = Done -topic.count_prompt = You can't select more than 25 topics -topic.format_prompt = Topics must start with a letter or number, can include hyphens(-) and must be no more than 35 characters long +topic.count_prompt = You can not select more than 25 topics +topic.format_prompt = Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long. [org] org_name_holder = Organization Name @@ -1302,8 +1301,8 @@ dashboard.operation_switch = Switch dashboard.operation_run = Run dashboard.clean_unbind_oauth = Clean unbound OAuth connections dashboard.clean_unbind_oauth_success = All unbound OAuth connections have been deleted. -dashboard.delete_inactivate_accounts = Delete all not activated accounts -dashboard.delete_inactivate_accounts_success = All not activated accounts have been deleted. +dashboard.delete_inactivate_accounts = Delete all unactivated accounts +dashboard.delete_inactivate_accounts_success = All unactivated accounts have been deleted. dashboard.delete_repo_archives = Delete all repository archives dashboard.delete_repo_archives_success = All repository archives have been deleted. dashboard.delete_missing_repos = Delete all repositories missing their Git files @@ -1511,7 +1510,7 @@ config.db_path = Path config.service_config = Service Configuration config.register_email_confirm = Require Email Confirmation to Register config.disable_register = Disable Self-Registration -config.allow_only_external_registration = Enable the registration only through external services +config.allow_only_external_registration = Allow Registration Only Through External Services config.enable_openid_signup = Enable OpenID Self-Registration config.enable_openid_signin = Enable OpenID Sign-In config.show_registration_button = Show Register Button @@ -1527,7 +1526,7 @@ config.enable_timetracking = Enable Time Tracking config.default_enable_timetracking = Enable Time Tracking by Default config.default_allow_only_contributors_to_track_time = Let Only Contributors Track Time config.no_reply_address = Hidden Email Domain -config.default_enable_dependencies = Enable issue dependencies by default +config.default_enable_dependencies = Enable Issue Dependencies by Default config.webhook_config = Webhook Configuration config.queue_length = Queue Length From 0bb1c842087295fd7ccd96adedeed57b7c0b30d9 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 21 Jul 2018 05:08:15 +0800 Subject: [PATCH 121/124] Add csv file render support defaultly (#4105) * add csv file render support defaultly * escaping csv column content --- main.go | 1 + modules/markup/csv/csv.go | 58 ++++++++++++++++++++++++++++++++++ modules/markup/csv/csv_test.go | 25 +++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 modules/markup/csv/csv.go create mode 100644 modules/markup/csv/csv_test.go diff --git a/main.go b/main.go index 179132f58..e73f1d60a 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,7 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" // register supported doc types + _ "code.gitea.io/gitea/modules/markup/csv" _ "code.gitea.io/gitea/modules/markup/markdown" _ "code.gitea.io/gitea/modules/markup/orgmode" diff --git a/modules/markup/csv/csv.go b/modules/markup/csv/csv.go new file mode 100644 index 000000000..077947e77 --- /dev/null +++ b/modules/markup/csv/csv.go @@ -0,0 +1,58 @@ +// Copyright 2018 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package markup + +import ( + "bytes" + "encoding/csv" + "html" + "io" + + "code.gitea.io/gitea/modules/markup" +) + +func init() { + markup.RegisterParser(Parser{}) +} + +// Parser implements markup.Parser for orgmode +type Parser struct { +} + +// Name implements markup.Parser +func (Parser) Name() string { + return "csv" +} + +// Extensions implements markup.Parser +func (Parser) Extensions() []string { + return []string{".csv"} +} + +// Render implements markup.Parser +func (Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte { + rd := csv.NewReader(bytes.NewReader(rawBytes)) + var tmpBlock bytes.Buffer + tmpBlock.WriteString(``) + for { + fields, err := rd.Read() + if err == io.EOF { + break + } + if err != nil { + continue + } + tmpBlock.WriteString("") + for _, field := range fields { + tmpBlock.WriteString("") + } + tmpBlock.WriteString("") + } + tmpBlock.WriteString("
") + tmpBlock.WriteString(html.EscapeString(field)) + tmpBlock.WriteString("
") + + return tmpBlock.Bytes() +} diff --git a/modules/markup/csv/csv_test.go b/modules/markup/csv/csv_test.go new file mode 100644 index 000000000..f050296ce --- /dev/null +++ b/modules/markup/csv/csv_test.go @@ -0,0 +1,25 @@ +// Copyright 2018 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package markup + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestRenderCSV(t *testing.T) { + var parser Parser + var kases = map[string]string{ + "a": "
a
", + "1,2": "
12
", + "
": "
<br/>
", + } + + for k, v := range kases { + res := parser.Render([]byte(k), "", nil, false) + assert.EqualValues(t, v, string(res)) + } +} From 5fa403c874ef32053f3e04fba7e7b1f605842900 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Fri, 20 Jul 2018 21:09:20 +0000 Subject: [PATCH 122/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_de-DE.ini | 18 ----------- options/locale/locale_es-ES.ini | 5 ---- options/locale/locale_fr-FR.ini | 16 ---------- options/locale/locale_id-ID.ini | 8 ----- options/locale/locale_it-IT.ini | 17 ----------- options/locale/locale_lv-LV.ini | 18 ----------- options/locale/locale_nl-NL.ini | 6 ---- options/locale/locale_pt-BR.ini | 53 ++++++++++++++++----------------- options/locale/locale_ru-RU.ini | 18 ----------- options/locale/locale_sv-SE.ini | 18 ----------- options/locale/locale_uk-UA.ini | 21 ------------- options/locale/locale_zh-CN.ini | 18 ----------- options/locale/locale_zh-TW.ini | 14 --------- 13 files changed, 26 insertions(+), 204 deletions(-) diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index 6206db445..f77ae2e09 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -32,16 +32,8 @@ twofa_scratch=Zwei-Faktor-Einmalpasswort passcode=PIN u2f_insert_key=Hardware-Sicherheitsschlüssel einstecken -u2f_sign_in=Drücke den Knopf auf deinem Sicherheitsschlüssel. Wenn deiner keinen Knopf hat, stecke ihn erneut ein. u2f_press_button=Drücke den Knopf auf deinem Sicherheitsschlüssel… u2f_use_twofa=Zwei-Faktor-Authentifizierung via Handy verwenden -u2f_error=Wir können deinen Hardware-Sicherheitsschlüssel nicht lesen! -u2f_unsupported_browser=Dein Browser unterstützt keine U2F-Geräte. Bitte benutze einen anderen Browser. -u2f_error_1=Ein unbekannter Fehler ist aufgetreten. Bitte versuche es erneut. -u2f_error_2=Stelle sicher, dass du einen verschlüsselte Verbindung (https://) benutzt und die richtige URL eingeben hast. -u2f_error_3=Der Server kann deine Anfrage nicht bearbeiten. -u2f_error_4=Dieser Sicherheitsschlüssel ist nicht berechtigt. Wenn du versuchst, einen neuen Sicherheitsschlüssel zu registrieren, stelle bitte sicher, dass du ihn nicht bereits registriert hast. -u2f_error_5=Das Zeitlimit wurde erreicht bevor dein Schlüssel gelesen werden konnte. Bitte lade die Seite neu. u2f_reload=Neu laden repository=Repository @@ -130,7 +122,6 @@ federated_avatar_lookup=Föderierte Profilbilder einschalten federated_avatar_lookup_popup=Föderierte Profilbilder via Libravatar aktivieren. disable_registration=Registrierung deaktivieren disable_registration_popup=Registrierung neuer Benutzer deaktivieren. Nur Administratoren werden neue Benutzerkonten anlegen können. -allow_only_external_registration_popup=Registrierung nur über externe Services aktiveren. openid_signin=OpenID-Anmeldung aktivieren openid_signin_popup=Benutzeranmeldung via OpenID aktivieren. openid_signup=OpenID-Selbstregistrierung aktivieren @@ -463,13 +454,10 @@ then_enter_passcode=Und gebe dann die angezeigte PIN der Anwendung ein: passcode_invalid=Die PIN ist falsch. Probiere es erneut. twofa_enrolled=Die Zwei-Faktor-Authentifizierung wurde für dein Konto aktiviert. Bewahre dein Einmalpasswort (%s) an einem sicheren Ort auf, da es nicht wieder angezeigt werden wird. -u2f_desc=Hardware-Sicherheitsschlüssel sind Geräte, die kryptografische Schlüssel beinhalten. Diese können für die Zwei-Faktor-Authentifizierung verwendet werden. Der Sicherheitsschlüssel muss den Standard FIDO U2F unterstützen. -u2f_require_twofa=Du musst die Zwei-Faktor-Authentifizierung aktivieren, um Hardware-Sicherheitsschlüssel nutzen zu können. u2f_register_key=Sicherheitsschlüssel hinzufügen u2f_nickname=Nickname u2f_press_button=Drücke den Knopf auf deinem Sicherheitsschlüssel, um diesen zu registrieren. u2f_delete_key=Sicherheitsschlüssel entfernen -u2f_delete_key_desc=Wenn du den Sicherheitsschlüssel entfernst, kannst du dich nicht mehr mit diesem einloggen. Bist du sicher? manage_account_links=Verknüpfte Accounts verwalten manage_account_links_desc=Diese externen Accounts sind mit deinem Gitea-Account verknüpft. @@ -650,7 +638,6 @@ issues.new.open_milestone=Offene Meilensteine issues.new.closed_milestone=Geschlossene Meilensteine issues.new.assignees=Zuständig issues.new.clear_assignees=Zuständige entfernen -issues.new.no_assignees=Niemand zugewiesen issues.no_ref=Keine Branch/Tag angegeben issues.create=Issue erstellen issues.new_label=Neues Label @@ -1167,8 +1154,6 @@ branch.protected_deletion_failed=Branch „%s“ ist geschützt und kann nicht g topic.manage_topics=Themen verwalten topic.done=Fertig -topic.count_prompt=Du kannst nicht mehr als 25 Themen auswählen -topic.format_prompt=Themen müssen mit einem Buchstaben oder einer Zahl beginnen. Sie können Bindestriche (-) enthalten und dürfen nicht länger als 35 Zeichen sein [org] org_name_holder=Name der Organisation @@ -1273,8 +1258,6 @@ dashboard.operation_switch=Wechseln dashboard.operation_run=Ausführen dashboard.clean_unbind_oauth=Nicht verbundene OAuth-Verbindungen löschen dashboard.clean_unbind_oauth_success=Alle unverbundene OAuth-Verbindungen wurden gelöscht. -dashboard.delete_inactivate_accounts=Lösche alle nicht-aktivierten Accounts -dashboard.delete_inactivate_accounts_success=Alle nicht-aktivierten Accounts wurden gelöscht. dashboard.delete_repo_archives=Alle Repository-Archive löschen dashboard.delete_repo_archives_success=Alle Repository-Archive wurden gelöscht. dashboard.delete_missing_repos=Alle Repository-Datensätze mit verlorenen gegangenen Git-Dateien löschen @@ -1482,7 +1465,6 @@ config.db_path=Verzeichnis config.service_config=Service-Konfiguration config.register_email_confirm=E-Mail-Bestätigung benötigt zum Registrieren config.disable_register=Selbstegistrierung deaktivieren -config.allow_only_external_registration=Registrierung nur über externe Services aktiveren config.enable_openid_signup=OpenID-Selbstregistrierung aktivieren config.enable_openid_signin=OpenID-Anmeldung aktivieren config.show_registration_button=Schaltfläche zum Registrieren anzeigen diff --git a/options/locale/locale_es-ES.ini b/options/locale/locale_es-ES.ini index 65240c87d..a69aad09a 100644 --- a/options/locale/locale_es-ES.ini +++ b/options/locale/locale_es-ES.ini @@ -32,11 +32,6 @@ passcode=Contraseña u2f_insert_key=Inserte su clave de seguridad u2f_use_twofa=Use un código de dos factores de su celular -u2f_error=No podemos leer su llave de seguridad! -u2f_unsupported_browser=Su navegador no soporta llaves U2F. Por favor utilicé otro navegador. -u2f_error_1=Un error desconocido ha ocurrido. Por favor vuelva a intentarlo. -u2f_error_2=Por favor asegúrese de que está utilizando una conexión cifrada (https://) y que esta visitando la dirección URL correcta. -u2f_error_3=El servidor no pudo procesar su petición. u2f_reload=Recargar repository=Repositorio diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index 3f8a6c2a9..098ff005a 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -32,16 +32,8 @@ twofa_scratch=Code de secours pour l'authentification à deux facteurs passcode=Code d'accès u2f_insert_key=Insérez votre clef de sécurité -u2f_sign_in=Appuyez sur le bouton de votre clef de sécurité. Si vous ne voyez pas de bouton, ré-insérez là. u2f_press_button=Veuillez appuyer sur le bouton de votre clef de sécurité… u2f_use_twofa=Utilisez l'authentification à deux facteurs avec votre téléphone -u2f_error=Nous ne pouvons pas lire votre clé de sécurité ! -u2f_unsupported_browser=Votre navigateur n'est pas compatible avec les clefs U2F. Veuillez réessayer avec un autre navigateur. -u2f_error_1=Une erreur inconnue s'est produite. Veuillez réessayer. -u2f_error_2=Veuillez vous assurer que vous utilisez une connexion chiffrée (https) et que vous visitez la bonne adresse. -u2f_error_3=Le serveur n'a pas pu répondre à votre requête. -u2f_error_4=Cette clef n'est pas compatible avec votre requête. Si vous êtes en train de l'enregistrer, veuillez vous assurer que cette clef n'est pas déjà enregistrée. -u2f_error_5=Le délai d'attente imparti a été atteint avant que votre clef ne puisse être lue. Veuillez recharger la page pour réessayer. u2f_reload=Recharger repository=Dépôt @@ -129,7 +121,6 @@ federated_avatar_lookup=Activer les avatars unifiés federated_avatar_lookup_popup=Activer la recherche unifiée d'avatars en utilisant le service open source unifié basé sur libravatar. disable_registration=Désactiver le formulaire d'inscription disable_registration_popup=Désactiver les nouvelles inscriptions. Seuls les administrateurs pourront créer de nouveaux comptes utilisateurs. -allow_only_external_registration_popup=N'autoriser l'inscription qu'à partir des services externes. openid_signin=Activer l'inscription OpenID openid_signin_popup=Activer l'authentification via OpenID. openid_signup=Activer l'inscription OpenID @@ -462,13 +453,10 @@ then_enter_passcode=Et entrez le mot de passe s'affichant dans l'application : passcode_invalid=Le mot de passe est invalide. Réessayez. twofa_enrolled=L'authentification à deux facteurs a été activée pour votre compte. Gardez votre jeton de secours (%s) en lieu sûr car il ne vous sera montré qu'une seule fois ! -u2f_desc=Les clefs de sécurité sont des dispositifs matériels contenant des clefs cryptographiques. Elles peuvent être utilisées pour l'authentification à deux facteurs. La clef de sécurité doit supporter le standard FIDO U2F. -u2f_require_twofa=L'authentification à deux facteurs doit être activée afin d'utiliser une clef de sécurité. u2f_register_key=Ajouter une clef de sécurité u2f_nickname=Pseudonyme u2f_press_button=Appuyer sur le bouton de votre clef de sécurité pour l'enregistrer. u2f_delete_key=Supprimer une clef de sécurité -u2f_delete_key_desc=Si vous supprimez une clef de sécurité vous ne pourrez plus l'utiliser pour vous connecter. Continuer? manage_account_links=Gérer les comptes liés manage_account_links_desc=Ces comptes externes sont liés à votre compte Gitea. @@ -643,7 +631,6 @@ issues.new.open_milestone=Ouvrir un jalon issues.new.closed_milestone=Jalons fermés issues.new.assignees=Affecté à issues.new.clear_assignees=Supprimer les affectations -issues.new.no_assignees=Aucune affectation issues.no_ref=Aucune branche/tag spécifiés issues.create=Créer un ticket issues.new_label=Nouvelle étiquette @@ -1158,8 +1145,6 @@ branch.protected_deletion_failed=La branche '%s' est protégé. Il ne peut pas topic.manage_topics=Gérer les sujets topic.done=Terminé -topic.count_prompt=Vous ne pouvez pas sélectionner plus de 25 sujets -topic.format_prompt=Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets (-), sans dépasser 35 caractères [org] org_name_holder=Nom de l'organisation @@ -1471,7 +1456,6 @@ config.db_path=Emplacement config.service_config=Configuration du service config.register_email_confirm=Exiger la confirmation de l'e-mail lors de l'inscription config.disable_register=Désactiver le formulaire d'inscription -config.allow_only_external_registration=N'autoriser l'inscription qu'à partir des services externes config.enable_openid_signup=Activer l'inscription avec OpenID config.enable_openid_signin=Activer la connexion avec OpenID config.show_registration_button=Afficher le bouton d'enregistrement diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini index 50aa4c656..8d0961b97 100644 --- a/options/locale/locale_id-ID.ini +++ b/options/locale/locale_id-ID.ini @@ -32,16 +32,8 @@ twofa_scratch=Kode Awal Dua Faktor passcode=Kode Akses u2f_insert_key=Masukkan kunci keamanan anda -u2f_sign_in=Tekan tombol pada kunci keamanan anda. Jika anda tidak menemukan tombol, masukkan kembali. u2f_press_button=Silahkan tekan tombol pada kunci keamanan anda… u2f_use_twofa=Menggunakan kode dua faktor dari telepon anda -u2f_error=Kami tidak bisa membaca kunci keamanan anda! -u2f_unsupported_browser=Browser anda tidak mendukung kunci U2F. Silakan mencoba browser lain. -u2f_error_1=Terdapat kesalahan yang tidak diketahui. Mohon coba lagi. -u2f_error_2=Pastikan bahwa anda menggunakan koneksi terenkripsi (https://) dan mengunjungi URL yang benar. -u2f_error_3=Server tidak bisa melanjutkan permintaan anda. -u2f_error_4=Kunci tidak layak untuk permintaan ini. Jika Anda mencoba untuk mendaftarkanya, pastikan bahwa kunci sudah tidak terdaftar. -u2f_error_5=Timeout tercapai sebelum kunci anda bisa terbaca. Silahkan muat ulang untuk mencoba kembali. u2f_reload=Muat Ulang repository=Repositori diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini index 7a8909800..980c3770c 100644 --- a/options/locale/locale_it-IT.ini +++ b/options/locale/locale_it-IT.ini @@ -32,16 +32,8 @@ twofa_scratch=Codice di recupero per la verifica in due passaggi passcode=Codice di sicurezza u2f_insert_key=Inserisci la chiave di sicurezza -u2f_sign_in=Premi il pulsante sulla tua chiave di sicurezza. Se non riesci a trovare alcun pulsante, reinseriscilo. u2f_press_button=Si prega di premere il pulsante sulla tua chiave di sicurezza… u2f_use_twofa=Usa un codice di verifica in due passaggi dal tuo telefono -u2f_error=Non riusciamo a leggere la tua chiave di sicurezza! -u2f_unsupported_browser=Il tuo browser non supporta le chiavi U2F. Si prega di provare un altro browser. -u2f_error_1=Si è verificato un errore sconosciuto. Si prega di riprovare. -u2f_error_2=Si prega di assicurarsi che si sta utilizza una connessione crittografata (https://) e visitando l'URL corretto. -u2f_error_3=Il server non ha potuto eseguire la richiesta. -u2f_error_4=La chiave data non è idonea per questa richiesta. Se stai provando a registrarla, assicurati che la chiave non sia già stata registrata. -u2f_error_5=Timeout raggiunto prima che la tua chiave potesse essere letta. Si prega di ricaricare per riprovare. u2f_reload=Ricarica repository=Repository @@ -129,7 +121,6 @@ federated_avatar_lookup=Attiva i Federated Avatar federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. disable_registration=Disattiva Self-Registration disable_registration_popup=Disattiva la user self-registration. Solo gli amministratori saranno in grado di creare account. -allow_only_external_registration_popup=Attiva la registrazione solo tramite servizi esterni. openid_signin=Attiva l'accesso OpenID openid_signin_popup=Attiva registrazione utente via OpenID. openid_signup=Attiva OpenID Self-Registration @@ -462,14 +453,10 @@ then_enter_passcode=E immetti il codice di accesso indicato nell'applicazione: passcode_invalid=Il codice di accesso non è corretto. Riprova. twofa_enrolled=Il tuo account è stato registrato alla verifica in due passaggi. Conserva il token di sicurezza (%s) in un luogo sicuro in quanto viene visualizzato sono una volta! -u2f_desc=Le chiavi di sicurezza sono dispositivi hardware contenenti chiavi crittografiche. Potrebbero essere usate per la verifica in due passaggi. -La chiave di sicurezza deve supportare lo standard FIDO U2F. -u2f_require_twofa=La verifica in due passaggi deve essere attiva per poter utilizzare le chiavi di protezione. u2f_register_key=Aggiungi chiave di sicurezza u2f_nickname=Nickname u2f_press_button=Premi il pulsante sulla tua chiave di sicurezza per registrarla. u2f_delete_key=Rimuovi chiave di sicurezza -u2f_delete_key_desc=Se si rimuove una chiave di sicurezza non sarà più possibile effettuare l'accesso con essa. Sei sicuro? manage_account_links=Gestisci gli account collegati manage_account_links_desc=Questi account esterni sono collegati al tuo account Gitea. @@ -644,7 +631,6 @@ issues.new.open_milestone=Apri Milestone issues.new.closed_milestone=Milestone chiuse issues.new.assignees=Assegnatari issues.new.clear_assignees=Cancella assegnatari -issues.new.no_assignees=Nessuno assegnato issues.no_ref=Nessun Branch/Tag specificato issues.create=Crea Problema issues.new_label=Nuova etichetta @@ -1159,8 +1145,6 @@ branch.protected_deletion_failed=Il branch '%s' è protetto. Non può essere eli topic.manage_topics=Gestisci argomenti topic.done=Fatto -topic.count_prompt=Non puoi selezione più di 25 argomenti -topic.format_prompt=Gli argomenti devono iniziare con una lettera o un numero, possono includere il carattere hiphens(-) e non possono essere più lunghi di 35 caratteri [org] org_name_holder=Nome dell'Organizzazione @@ -1472,7 +1456,6 @@ config.db_path=Percorso config.service_config=Configurazione Servizio config.register_email_confirm=Richiedere la conferma Email per registrarsi config.disable_register=Disattiva Self-Registration -config.allow_only_external_registration=Attiva la registrazione solo tramite servizi esterni config.enable_openid_signup=Attiva OpenID Self-Registration config.enable_openid_signin=Attiva l'accesso tramite OpenID config.show_registration_button=Mostra Pulsane Registrazione diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini index 4bb962cb0..d835c6478 100644 --- a/options/locale/locale_lv-LV.ini +++ b/options/locale/locale_lv-LV.ini @@ -32,16 +32,8 @@ twofa_scratch=Divu faktoru vienreizējais kods passcode=Kods u2f_insert_key=Ievietojiet Jūsu drošības atslēgu -u2f_sign_in=Nospiediet drošības atslēgas pogu. Ja nevarat to atrast, ievietojiet atkārtoti. u2f_press_button=Nospiediet drošības atslēgas pogu… u2f_use_twofa=Izmantot divu faktoru kodu no tālruņa -u2f_error=Nav iespējams nolasīt drošības atslēgu! -u2f_unsupported_browser=Jūsu pārlūks neatbalsta U2F atslēgas. Izmantojiet citu pārlūku. -u2f_error_1=Notikusi nezināma kļūda. Atkārtojiet darbību vēlreiz. -u2f_error_2=Pārliecinieties, ka izmantojat šifrētu savienojumu (https://) un apmeklējat pareizo URL. -u2f_error_3=Serveris nevar apstrādāt Jūsu pieprasījumu. -u2f_error_4=Nav iespējams izmantot atslēgu šim pieprasījumam. Ja mēģināt to reģistrēt, pārliecinieties, ka atslēga jau nav reģistrēta. -u2f_error_5=Iestājusies noildze nolasot atslēgu. Pārlādējiet lapu, lai atkārtotu vēlreiz. u2f_reload=Pārlādēt repository=Repozitorijs @@ -130,7 +122,6 @@ federated_avatar_lookup=Iespējot apvienotās profila bildes federated_avatar_lookup_popup=Iespējot apvienoto profila bilžu meklētāju, lai izmantotu atvērtā koda apvienoto servisu balstītu uz libravatar. disable_registration=Atspējot lietotāju reģistrāciju disable_registration_popup=Atspējot iespēju reģistrēties. Tikai administratori varēs izveidot jaunus kontus. -allow_only_external_registration_popup=Ļaut reģistrēties tikai izmantojot ārējos pakalpojumus. openid_signin=Iespējot OpenID autorizāciju openid_signin_popup=Iespējot lietotāju autorizāciju ar OpenID. openid_signup=Iespējot reģistrāciju, izmantojot OpenID @@ -463,13 +454,10 @@ then_enter_passcode=Ievadiet piekļuves kodu no lietojumprogrammas: passcode_invalid=Nederīgs piekļuves kods. Mēģiniet ievadīt atkārtoti. twofa_enrolled=Kontam tagad ir ieslēgta divu faktoru autentifikācija. Saglabājiet savu vienreizējo kodu (%s), jo tas vairāk netiks parādīts! -u2f_desc=Drošības atslēgas ir aparatūras ierīces, kas satur kriptogrāfiskās atslēgas. Tās var tikt izmantotas, lai nodrošinātu divu faktoru autentifikāciju. Drošības atslēgām ir jāatbalsta FIDO U2F standarts. -u2f_require_twofa=Jābūt iespējotai divu faktoru autentifikācija, lai varētu izmantot drošības atslēgas. u2f_register_key=Pievienot drošības atslēgu u2f_nickname=Segvārds u2f_press_button=Nospiediet pogu uz Jūsu drošības atslēgas, lai to reģistrētu. u2f_delete_key=Noņemt drošības atslēgu -u2f_delete_key_desc=Noņemot drošības atslēgu ar to vairs nebūs iespējams autorizēties. Vai turpināt? manage_account_links=Pārvaldīt saistītos kontus manage_account_links_desc=Šādi ārējie konti ir piesaistīti Jūsu Gitea kontam. @@ -646,7 +634,6 @@ issues.new.open_milestone=Atvērtie atskaites punktus issues.new.closed_milestone=Aizvērtie atskaites punkti issues.new.assignees=Atbildīgie issues.new.clear_assignees=Noņemt atbildīgo -issues.new.no_assignees=Nav atbildīgā issues.no_ref=Nav norādīts atzars/tags issues.create=Pieteikt problēmu issues.new_label=Jauna etiķete @@ -1163,8 +1150,6 @@ branch.protected_deletion_failed=Atzars '%s' ir aizsargāts. To nevar izdzēst. topic.manage_topics=Pārvaldīt tēmas topic.done=Gatavs -topic.count_prompt=Nevar pievienot vairāk kā 25 tēmas -topic.format_prompt=Tēmas nosaukumam ir jāsākas ar burtu vai ciparu, tas var saturēt defisi(-), kā arī tas nevar būt garāks par 35 simboliem [org] org_name_holder=Organizācijas nosaukums @@ -1269,8 +1254,6 @@ dashboard.operation_switch=Pārslēgt dashboard.operation_run=Palaist dashboard.clean_unbind_oauth=Notīrīt nepiesaistītos OAuth savienojumus dashboard.clean_unbind_oauth_success=Visi nepiesaistītie OAuth savienojumu tika izdzēsti. -dashboard.delete_inactivate_accounts=Dzēst visus neaktivizētos kontus -dashboard.delete_inactivate_accounts_success=Visi neaktivizētie konti tika izdzēsti. dashboard.delete_repo_archives=Dzēst visu repozitoriju arhīvus dashboard.delete_repo_archives_success=Visu repozitoriju arhīvi tika izdzēsti. dashboard.delete_missing_repos=Dzēst visus repozitorijus, kam trūkst Git failu @@ -1478,7 +1461,6 @@ config.db_path=Ceļš config.service_config=Pakalpojuma konfigurācija config.register_email_confirm=Reģistrējoties pieprasīt apstiprināt e-pasta adresi config.disable_register=Atspējot lietotāju reģistrāciju -config.allow_only_external_registration=Ļaut reģistrēties tikai izmantojot ārējos pakalpojumus config.enable_openid_signup=Iespējot reģistrāciju, izmantojot OpenID config.enable_openid_signin=Iespējot OpenID autorizāciju config.show_registration_button=Rādīt reģistrēšanās pogu diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini index 82b323077..c5898a999 100644 --- a/options/locale/locale_nl-NL.ini +++ b/options/locale/locale_nl-NL.ini @@ -32,14 +32,8 @@ twofa_scratch=Eenmalige twee factor authenticatie code passcode=PIN u2f_insert_key=Uw beveiligingssleutel invoegen -u2f_sign_in=Druk op de knop op uw beveiligingssleutel. Als u een knop niet kunt vinden, deze opnieuw invoegen. u2f_press_button=Druk op de knop op uw beveiligingssleutel… u2f_use_twofa=Gebruik een twee-factor code van uw telefoon -u2f_error=Wij kunnen niet uw beveiligingssleutel lezen! -u2f_unsupported_browser=Uw browser geen ondersteund U2F keys. Probeer een andere browser. -u2f_error_1=Er is een onbekende fout opgetreden. Probeer het opnieuw. -u2f_error_2=Zorg voor een versleutelde verbinding (https://) en een bezoek aan de juiste URL. -u2f_error_3=De server kan uw aanvraag niet verhandelen. u2f_reload=Herladen repository=Repository diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index 055ba994f..4590c7cf5 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -32,16 +32,16 @@ twofa_scratch=Código de backup da autenticação de dois fatores passcode=Senha u2f_insert_key=Insira sua chave de segurança -u2f_sign_in=Pressione o botão na sua chave de segurança. Se você não encontrar um botão, insira-o novamente. +u2f_sign_in=Pressione o botão na sua chave de segurança. Se a sua chave de segurança não tiver um botão, insira-a novamente. u2f_press_button=Por favor, pressione o botão na sua chave de segurança... u2f_use_twofa=Use um código de dois fatores no seu telefone -u2f_error=Não conseguimos ler sua chave de segurança! -u2f_unsupported_browser=Seu navegador não suporta chaves U2F. Por favor, tente outro navegador. +u2f_error=Não foi possível ler sua chave de segurança. +u2f_unsupported_browser=Seu navegador não suporta chaves de segurança U2F. u2f_error_1=Ocorreu um erro desconhecido. Por favor, tente novamente. -u2f_error_2=Por favor, certifique-se de que você está usando uma conexão criptografada (https://) e visite a URL correta. -u2f_error_3=O servidor não pôde prosseguir com sua solicitação. -u2f_error_4=A chave apresentada não é elegível para esta solicitação. Se você tentar registrá-la, certifique-se de que a chave já não é registrada. -u2f_error_5=Tempo limite atingido antes de sua chave poder ser lida. Por favor, recarregue para tentar novamente. +u2f_error_2=Por favor, certifique-se de usar a URL correto, criptografado (https://). +u2f_error_3=O servidor não pôde processar sua solicitação. +u2f_error_4=A chave de segurança não é permitida para esta solicitação. Por favor, certifique-se que a chave já não está registrada. +u2f_error_5=Tempo limite atingido antes de sua chave poder ser lida. Por favor, recarregue esta página e tente novamente. u2f_reload=Recarregar repository=Repositório @@ -130,7 +130,7 @@ federated_avatar_lookup=Habilitar avatares federativos federated_avatar_lookup_popup=Habilitar a busca federativa de avatares a usar o serviço federativo de código aberto baseado no libravatar. disable_registration=Desabilitar auto-cadastro disable_registration_popup=Desabilitar auto-cadastro de usuário. Somente os administradores serão capazes de criar novas contas de usuário. -allow_only_external_registration_popup=Habilitar o cadastro apenas por meio de serviços externos. +allow_only_external_registration_popup=Permitir cadastro somente por meio de serviços externos openid_signin=Habilitar acesso via OpenID openid_signin_popup=Habilitar o acesso de usuários via OpenID. openid_signup=Habilitar o auto-cadastro via OpenID @@ -463,13 +463,13 @@ then_enter_passcode=E insira a senha mostrada no aplicativo: passcode_invalid=Esse código de acesso é inválido. Tente novamente. twofa_enrolled=Sua conta foi inscrita na autenticação de dois fatores. Armazene seu token de backup (%s) em um local seguro, pois ele é exibido apenas uma vez! -u2f_desc=Chaves de segurança são dispositivos de hardware que contém chaves de criptografia. Elas podem ser usadas para autenticação de dois fatores. A chave de segurança deve suportar o padrão FIDO U2F. -u2f_require_twofa=Autenticação de dois fatores deve estar inscrita para usar chaves de segurança. +u2f_desc=Chaves de segurança são dispositivos de hardware contendo chaves criptográficas. Eles podem ser usados para autenticação de dois fatores. As chaves de segurança devem suportar o padrão FIDO U2F. +u2f_require_twofa=Sua conta deve estar inscrita na autenticação de dois fatores para usar as chaves de segurança. u2f_register_key=Adicionar chave de segurança u2f_nickname=Apelido u2f_press_button=Pressione o botão na sua chave de segurança para registrá-la. u2f_delete_key=Remover chave de segurança -u2f_delete_key_desc=Se você remover uma chave de segurança você não poderá mais acessar com ela. Tem certeza? +u2f_delete_key_desc=Se você remover uma chave de segurança, não poderá mais entrar com ela. Continuar? manage_account_links=Gerenciar contas vinculadas manage_account_links_desc=Estas contas externas estão vinculadas a sua conta de Gitea. @@ -650,7 +650,7 @@ issues.new.open_milestone=Marcos abertos issues.new.closed_milestone=Marcos fechados issues.new.assignees=Responsáveis issues.new.clear_assignees=Limpar responsáveis -issues.new.no_assignees=Nenhum responsável +issues.new.no_assignees=Sem responsável issues.no_ref=Nenhum branch/tag especificado issues.create=Criar issue issues.new_label=Nova etiqueta @@ -781,34 +781,33 @@ issues.due_date_added=adicionou a data limite %s %s issues.due_date_modified=modificou a data limite para %s ao invés de %s %s issues.due_date_remove=removeu a data limite %s %s issues.due_date_overdue=Em atraso -issues.due_date_invalid=A data limite é inválida ou está fora do intervalo. Por favor, use o formato dd/mm/aaaa. +issues.due_date_invalid=A data limite é inválida ou está fora do intervalo. Por favor, use o formato 'dd/mm/aaaa'. issues.dependency.title=Dependências issues.dependency.issue_no_dependencies=Esta issue atualmente não tem dependências. issues.dependency.pr_no_dependencies=Este pull request atualmente não tem dependências. issues.dependency.add=Adicione... issues.dependency.cancel=Cancelar issues.dependency.remove=Remover -issues.dependency.issue_number=Número da issue issues.dependency.added_dependency=`%[2]s adicionou uma nova dependência %[3]s` issues.dependency.removed_dependency=`%[2]s removeu uma dependência %[3]s` issues.dependency.issue_closing_blockedby=Fechamento deste pull request está bloqueado pelas seguintes issues issues.dependency.pr_closing_blockedby=Fechamento desta issue está bloqueado pelas seguintes issues issues.dependency.issue_close_blocks=Esta issue bloqueia o fechamento das seguintes issues issues.dependency.pr_close_blocks=Este pull request bloqueia o fechamento das seguintes issues -issues.dependency.issue_close_blocked=Você precisa fechar todas as issues que bloqueiam esta issue antes de poder fechá-la! -issues.dependency.pr_close_blocked=Você precisa fechar todas issues que bloqueiam este pull request antes de poder fazer o merge! +issues.dependency.issue_close_blocked=Você precisa fechar todas as issues que bloqueiam esta issue antes de poder fechá-la. +issues.dependency.pr_close_blocked=Você precisa fechar todas issues que bloqueiam este pull request antes de poder fazer o merge. issues.dependency.blocks_short=Bloqueia issues.dependency.blocked_by_short=Depende de issues.dependency.remove_header=Remover dependência -issues.dependency.issue_remove_text=Isto irá remover a dependência desta issue. Tem certeza? Você não pode desfazer isso! -issues.dependency.pr_remove_text=Isto irá remover a dependência deste pull request. Tem certeza? Você não pode desfazer isso! -issues.dependency.setting=Issues & PRs podem ter dependências -issues.dependency.add_error_same_issue=Você não pode fazer uma issue depender dela mesma! -issues.dependency.add_error_dep_issue_not_exist=Issue dependente não existe! -issues.dependency.add_error_dep_not_exist=Dependência não existe! -issues.dependency.add_error_dep_exists=Dependência já existe! -issues.dependency.add_error_cannot_create_circular=Você não pode criar uma dependência entre duas issues bloqueando uma a outra! -issues.dependency.add_error_dep_not_same_repo=Ambas as issues devem estar no mesmo repositório! +issues.dependency.issue_remove_text=Isto removerá a dependência desta issue. Continuar? +issues.dependency.pr_remove_text=Isto removerá a dependência deste pull request. Continuar? +issues.dependency.setting=Habilitar dependências para issues e pull requests +issues.dependency.add_error_same_issue=Você não pode fazer uma issue depender de si mesma. +issues.dependency.add_error_dep_issue_not_exist=Issue dependente não existe. +issues.dependency.add_error_dep_not_exist=Dependência não existe. +issues.dependency.add_error_dep_exists=Dependência já existe. +issues.dependency.add_error_cannot_create_circular=Você não pode criar uma dependência com duas issues bloqueando uma a outra. +issues.dependency.add_error_dep_not_same_repo=Ambas as issues devem estar no mesmo repositório. pulls.desc=Habilitar solicitações de merge e revisões de código. pulls.new=Novo pull request @@ -1197,7 +1196,7 @@ branch.protected_deletion_failed=A branch '%s' está protegida. Ela não pode se topic.manage_topics=Gerenciar Tópicos topic.done=Feito topic.count_prompt=Você não pode selecionar mais de 25 tópicos -topic.format_prompt=Tópicos devem começar com uma letra ou um número, podem incluir hífens (-) e não devem ter mais de 35 caracteres +topic.format_prompt=Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres. [org] org_name_holder=Nome da organização @@ -1511,7 +1510,7 @@ config.db_path=Caminho config.service_config=Configuração do serviço config.register_email_confirm=Exigir confirmação de e-mail para se cadastrar config.disable_register=Desabilitar auto-cadastro -config.allow_only_external_registration=Habilitar o cadastro apenas por meio de serviços externos +config.allow_only_external_registration=Permitir cadastro somente por meio de serviços externos config.enable_openid_signup=Habilitar o auto-cadastro via OpenID config.enable_openid_signin=Habilitar acesso via OpenID config.show_registration_button=Mostrar botão de cadastro diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 73a929759..5b932f327 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -32,16 +32,8 @@ twofa_scratch=Двухфакторный scratch-код passcode=Пароль u2f_insert_key=Вставьте ключ безопасности -u2f_sign_in=Нажмите кнопку на ключе безопасности. Если вы не можете найти кнопку, вставьте его снова. u2f_press_button=Пожалуйста нажмите кнопку на вашем ключе безопасности… u2f_use_twofa=Используйте двухфакторный код с телефона -u2f_error=Мы не можем прочитать ваш ключ безопасности! -u2f_unsupported_browser=Ваш браузер не поддерживает U2F ключи. Попробуйте другой браузер. -u2f_error_1=Произошла неизвестная ошибка. Повторите попытку. -u2f_error_2=Пожалуйста, убедитесь, что вы используете зашифрованное соединение (https://) и используете правильный URL. -u2f_error_3=Серверу не удалось обработать ваш запрос. -u2f_error_4=Представленный ключ не подходит для этого запроса. Если вы пытаетесь зарегистрировать его, убедитесь, что ключ еще не зарегистрирован. -u2f_error_5=Таймаут достигнут до того, как ваш ключ был прочитан. Перезагрузите, чтобы повторить попытку. u2f_reload=Обновить repository=Репозиторий @@ -130,7 +122,6 @@ federated_avatar_lookup=Включить федеративные аватары federated_avatar_lookup_popup=Включите поиск федеративного аватара для использования службы с открытым исходным кодом на основе libravatar. disable_registration=Отключить самостоятельную регистрацию disable_registration_popup=Запретить самостоятельную регистрацию. Только администраторы смогут создавать новые учетные записи пользователей. -allow_only_external_registration_popup=Включить регистрацию только через сторонние сервисы. openid_signin=Включение входа через OpenID openid_signin_popup=Включение входа через OpenID. openid_signup=Включить саморегистрацию OpenID @@ -463,13 +454,10 @@ then_enter_passcode=И введите пароль, показанный в пр passcode_invalid=Неверный пароль. попробуйте снова. twofa_enrolled=Для вашего аккаунта была включена двухфакторная аутентификация. Сохраните ваш scratch-токен (%s), он не сохраняется на сервере! -u2f_desc=Ключами безопасности являются аппаратные устройства, содержащие криптографические ключи. Они могут использоваться для двухфакторной аутентификации. Ключ безопасности должен поддерживать стандарт FIDO U2F. -u2f_require_twofa=Для использования ключей безопасности необходимо включить двухфакторную аутентификацию. u2f_register_key=Добавить ключ безопасности u2f_nickname=Имя пользователя u2f_press_button=Нажмите кнопку на ключе безопасности, чтобы зарегистрировать его. u2f_delete_key=Удалить ключ безопасности -u2f_delete_key_desc=Если вы удалите ключ безопасности, вы не сможете использовать его для входа. Вы уверены? manage_account_links=Управление привязанными аккаунтами manage_account_links_desc=Эти внешние аккаунты привязаны к вашему аккаунту Gitea. @@ -650,7 +638,6 @@ issues.new.open_milestone=Открыть этап issues.new.closed_milestone=Завершенные этапы issues.new.assignees=Назначенные issues.new.clear_assignees=Убрать ответственных -issues.new.no_assignees=Никто не назначен issues.no_ref=Не указана ветка или тэг issues.create=Добавить задачу issues.new_label=Новая метка @@ -1168,8 +1155,6 @@ branch.protected_deletion_failed=Ветка '%s' защищена. Её нель topic.manage_topics=Редактировать тематические метки topic.done=Сохранить -topic.count_prompt=Вы не можете выбрать более 25 тем -topic.format_prompt=Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов [org] org_name_holder=Название организации @@ -1274,8 +1259,6 @@ dashboard.operation_switch=Переключить dashboard.operation_run=Запуск dashboard.clean_unbind_oauth=Очистить список незавершённых авторизаций OAuth dashboard.clean_unbind_oauth_success=Все незавершённые связи OAuth были удалены. -dashboard.delete_inactivate_accounts=Удалить все неактивированные учетные записи -dashboard.delete_inactivate_accounts_success=Все не активированные учетные записи были удалены. dashboard.delete_repo_archives=Удаление всех архивов репозиториев dashboard.delete_repo_archives_success=Все архивы репозиториев удалены. dashboard.delete_missing_repos=Удалить все записи о репозиториях с отсутствующими файлами Git @@ -1483,7 +1466,6 @@ config.db_path=Путь config.service_config=Сервисная конфигурация config.register_email_confirm=Требуется подтверждение по электронной почте config.disable_register=Отключить самостоятельную регистрацию -config.allow_only_external_registration=Включить регистрацию только через сторонние сервисы config.enable_openid_signup=Включить cамостоятельную регистрацию OpenID config.enable_openid_signin=Включение входа через OpenID config.show_registration_button=Показать кнопку регистрации diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index b6b0d2e91..7146f0219 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -32,16 +32,8 @@ twofa_scratch=Tvåfaktorsskrapkod passcode=Kod u2f_insert_key=Sätt i din säkerhetsnyckel -u2f_sign_in=Tryck på knappen på din säkerhetsnyckel. Om du inte kan hitta en knapp, dra ur och sätt i nyckeln igen. u2f_press_button=Vänligen tryck på knappen på din säkerhetsnyckel… u2f_use_twofa=Använd en tvåfaktorskod från din telefon -u2f_error=Vi kan inte läsa din säkerhetsnyckel! -u2f_unsupported_browser=Din webbläsare stödjer inte U2F-nycklar. Vänligen prova en annan webbläsare. -u2f_error_1=Ett okänt fel uppstod. Vänligen försök igen. -u2f_error_2=Kontrollera att du använder en krypterad anslutning (https://) och besöker korrekt länk. -u2f_error_3=Servern kunde inte hantera din förfrågan. -u2f_error_4=Den givna nyckeln är inte behörig för denna förfrågan. Om du försöker registrera den, se till att den inte redan är registrerad. -u2f_error_5=Timeout uppnådd innan nyckeln kunde bli läst. Vänligen ladda om sidan och för att försök igen. u2f_reload=Ladda om repository=Utvecklingskatalog @@ -129,7 +121,6 @@ disable_gravatar_popup=Inaktivera Gravatar- och avatarskällor från tredjepart. federated_avatar_lookup_popup=Använd libravatar vid förenad uppslagning av avatarer. disable_registration=Inaktivera Självregistrering disable_registration_popup=Inaktivera självregistrering av användare. Endast administratörer kommer kunna skapa nya konton. -allow_only_external_registration_popup=Aktivera registrering enbart via externa tjänster. openid_signin=Aktivera OpenID-inloggning openid_signin_popup=Aktivera användarinloggning via OpenID. openid_signup=Aktivera självregistrering genom OpenID @@ -462,13 +453,10 @@ then_enter_passcode=Och ange den lösenkod som visas i programmet: passcode_invalid=Koden är ogiltig. Försök igen. twofa_enrolled=Tvåfaktorsautentisering har aktiverats för ditt konto. Förvara din skrapkod (%s) på en säker plats eftersom den bara visas en gång! -u2f_desc=Säkerhetsnycklar är maskinvaruenheter som innehåller kryptografiska nycklar. De kan användas för tvåfaktorautentisering. Säkerhetsnyckeln måste dock stödja FIDO U2F standarden. -u2f_require_twofa=Tvåfaktorautentisering måste aktiveras för att kunna använda säkerhetsnycklar. u2f_register_key=Lägg till säkerhetsnyckel u2f_nickname=Smeknamn u2f_press_button=Tryck på knappen på din säkerhetsnyckel för att registrera den. u2f_delete_key=Ta Bort Säkerhetsnyckel -u2f_delete_key_desc=Om du tar bort en säkerhetsnyckel kommer du inte kunna logga in med den längre. Är du säker? manage_account_links=Hantera Länkade Konton manage_account_links_desc=Dessa externa konton är länkade till ditt Gitea-konto. @@ -646,7 +634,6 @@ issues.new.open_milestone=Öppna Milstenar issues.new.closed_milestone=Stängda Milstenar issues.new.assignees=Tilldelade issues.new.clear_assignees=Rensa tilldelade -issues.new.no_assignees=Ingen tilldelad issues.no_ref=Ingen branch/Tag specificerad issues.create=Skapa Ärende issues.new_label=Ny etikett @@ -1127,8 +1114,6 @@ branch.protected_deletion_failed=Branch '%s' är skyddad. Den kan inte bli bortt topic.manage_topics=Hantera ämnen topic.done=Klar -topic.count_prompt=Du kan inte markera mer än 25 ämnen -topic.format_prompt=Ämnen måste starta med en bokstav eller nummer, kan inkludera bindestreck(-) och får inte vara längre än 35 tecken långt [org] org_name_holder=Organisationsnamn @@ -1229,8 +1214,6 @@ dashboard.operation_switch=Byt till dashboard.operation_run=Kör dashboard.clean_unbind_oauth=Rena obundna OAuth anslutningar dashboard.clean_unbind_oauth_success=Alla obundna OAuth anslutningar har raderats. -dashboard.delete_inactivate_accounts=Ta bort alla inaktiva konton -dashboard.delete_inactivate_accounts_success=Alla inaktiva konton har tagits bort. dashboard.delete_repo_archives=Ta bort alla utvecklingskatalogers arkiv dashboard.delete_missing_repos=Ta bort alla utvecklingskataloger som saknar filer specifika för Git dashboard.delete_missing_repos_success=Alla utvecklingskataloger som saknade sina Git-filer har tagits bort. @@ -1417,7 +1400,6 @@ config.db_path=Sökväg config.service_config=Tjänstkonfiguration config.register_email_confirm=Kräv mejlbekräftelse för att registrera config.disable_register=Inaktivera självregistrering -config.allow_only_external_registration=Aktivera registrering enbart genom externa tjänster config.enable_openid_signup=Aktivera självregistrering genom OpenID config.enable_openid_signin=Aktivera OpenID-inloggning config.show_registration_button=Visa registreringsknapp diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 8efcc4c15..e32a4ecb1 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -32,16 +32,8 @@ twofa_scratch=Двофакторний одноразовий пароль passcode=Код доступу u2f_insert_key=Вставте ключ безпеки -u2f_sign_in=Натисніть кнопку на ключі безпеки. Якщо не вдається знайти кнопки, повторно вставте ключ. u2f_press_button=Будь ласка, натисніть кнопку на ключі захисту... u2f_use_twofa=Використовуйте дво-факторний код з вашого телефону -u2f_error=Неможливо прочитати ваш ключ безпеки! -u2f_unsupported_browser=Ваш браузер не підтримує U2F ключі. Будь ласка, спробуйте інший браузер. -u2f_error_1=Сталася невідома помилка. Спробуйте ще раз. -u2f_error_2=Переконайтеся, що ви використовуєте зашифроване з'єднання (https://) та відвідуєте правильну URL-адресу. -u2f_error_3=Сервер не може обробити, ваш запит. -u2f_error_4=Представлений ключ не дає право на цей запит. Якщо спробуєте зареєструвати його, переконайтеся, що ключ ще не зареєстровано. -u2f_error_5=Таймаут досягнуто до того, як ваш ключ можна буде прочитати. Перезавантажте, щоб повторити спробу. u2f_reload=Оновити repository=Репозиторій @@ -130,7 +122,6 @@ federated_avatar_lookup=Увімкнути федеративні аватари federated_avatar_lookup_popup=Увімкнути зовнішний Аватар за допомогою Libravatar. disable_registration=Вимкнути самостійну реєстрацію disable_registration_popup=Вимкнути самостійну реєстрацію користувачів, тільки адміністратор може створювати нові облікові записи. -allow_only_external_registration_popup=Включити реєстрацію тільки через зовнішні сервіси. openid_signin=Увімкнути реєстрацію за допомогою OpenID openid_signin_popup=Увімкнути вхід за допомогою OpenID. openid_signup=Увімкнути самостійну реєстрацію за допомогою OpenID @@ -463,13 +454,10 @@ then_enter_passcode=І введіть пароль, який відобража passcode_invalid=Некоректний пароль. Спробуй ще раз. twofa_enrolled=Для вашого облікового запису було включена двофакторна автентифікація. Зберігайте свій scratch-токен (%s) у безпечному місці, оскільки він показується лише один раз! -u2f_desc=Ключами безпеки є апаратні пристрої, що містять криптографічні ключі. Вони можуть використовуватися для двофакторної автентифікації. Ключ безпеки повинен підтримувати стандарт FIDO U2F. -u2f_require_twofa=Для використання ключів безпеки необхідно зареєструвати двофакторну аутентифікацію. u2f_register_key=Додати ключ безпеки u2f_nickname=Псевдонім u2f_press_button=Натисніть кнопку на ключі безпеки, щоб зареєструвати його. u2f_delete_key=Видалити ключ безпеки -u2f_delete_key_desc=Якщо ви видалите ключ безпеки, ви не зможете використати його для входу. Ти впевнені? manage_account_links=Керування обліковими записами manage_account_links_desc=Ці зовнішні акаунти прив'язані до вашого аккаунту Gitea. @@ -650,7 +638,6 @@ issues.new.open_milestone=Активні етапи issues.new.closed_milestone=Закриті етапи issues.new.assignees=Виконавеці issues.new.clear_assignees=Прибрати виконавеців -issues.new.no_assignees=Ніхто не призначений issues.no_ref=Не вказана гілка або тег issues.create=Створити проблему issues.new_label=Нова мітка @@ -781,14 +768,11 @@ issues.due_date_added=додав(ла) дату завершення %s %s issues.due_date_modified=термін змінено з %s %s на %s issues.due_date_remove=видалив(ла) дату завершення %s %s issues.due_date_overdue=Прострочено -issues.due_date_invalid=Термін дії не дійсний або не відповідає дійсності. Будь ласка, використовуйте формат yyyy-mm-dd. issues.dependency.title=Залежності issues.dependency.issue_no_dependencies=Ця проблема в даний час не має залежностей. issues.dependency.pr_no_dependencies=Цей запит на злиття в даний час не має залежностей. -issues.dependency.add=Додати нову залежність... issues.dependency.cancel=Відмінити issues.dependency.remove=Видалити -issues.dependency.issue_number=Номер проблеми issues.dependency.added_dependency=
0%
[2]s додано нову залежність %[3]s' issues.dependency.removed_dependency=
0%
[2]s видалено залежність %[3]s' issues.dependency.blocks_short=Блоки @@ -1179,8 +1163,6 @@ branch.protected_deletion_failed=Гілка '%s' захищена. Її не м topic.manage_topics=Керувати тематичними мітками topic.done=Готово -topic.count_prompt=Ви не можете вибрати більше 25 тем -topic.format_prompt=Теми мають починатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів [org] org_name_holder=Назва організації @@ -1285,8 +1267,6 @@ dashboard.operation_switch=Перемкнути dashboard.operation_run=Запустити dashboard.clean_unbind_oauth=Очистити список незавершених авторизацій OAuth dashboard.clean_unbind_oauth_success=Всі незавершені зв'язки OAuth були видалені. -dashboard.delete_inactivate_accounts=Видалити всі неактивовані облікові записи -dashboard.delete_inactivate_accounts_success=Усі неактивовані облікові записи успішно видалено. dashboard.delete_repo_archives=Видалити всі архіви репозиторіїв dashboard.delete_repo_archives_success=Всі архіви репозиторіїв були видалені. dashboard.delete_missing_repos=Видалити всі записи про репозиторії з відсутніми файлами Git @@ -1494,7 +1474,6 @@ config.db_path=Шлях config.service_config=Конфігурація сервісу config.register_email_confirm=Потрібно підтвердити електронну пошту для реєстрації config.disable_register=Вимкнути самостійну реєстрацію -config.allow_only_external_registration=Включити реєстрацію тільки через сторонні сервіси config.enable_openid_signup=Увімкнути самостійну реєстрацію за допомогою OpenID config.enable_openid_signin=Увімкнути реєстрацію за допомогою OpenID config.show_registration_button=Показувати кнопку "Реєстрація diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 53a4a0426..1c9565580 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -32,16 +32,8 @@ twofa_scratch=两步验证口令 passcode=验证码 u2f_insert_key=插入安全密钥 -u2f_sign_in=按下安全密钥上的按钮。如果找不到按钮, 请重新插入。 u2f_press_button=请按下安全密钥上的按钮。 u2f_use_twofa=使用来自你手机中的两步验证码 -u2f_error=没有找到你的安全密钥! -u2f_unsupported_browser=您的浏览器不支持 U2F 密钥。请尝试其他浏览器。 -u2f_error_1=发生未知错误。请重试。 -u2f_error_2=请确保您使用的是加密连接 (https://) 并访问正确的 URL。 -u2f_error_3=服务器无法执行您的请求。 -u2f_error_4=所提交的密钥不符合此请求。如果您尝试注册它, 请确保该密钥尚未注册。 -u2f_error_5=在读取到密钥之前超时。请重新加载以重试。 u2f_reload=重新加载 repository=仓库 @@ -130,7 +122,6 @@ federated_avatar_lookup=启用 Federated 头像 federated_avatar_lookup_popup=启用 Federated Avatars 查找以使用开源的 Libravatar 服务。 disable_registration=禁止用户自助注册 disable_registration_popup=禁用用户自助注册。只有管理员才能创建新的用户帐户。 -allow_only_external_registration_popup=仅允许通过外部服务注册。 openid_signin=启用 OpenID 登录 openid_signin_popup=启用通过 OpenID 登录 openid_signup=启用 OpenID 自助注册 @@ -463,13 +454,10 @@ then_enter_passcode=并输入应用程序中显示的密码: passcode_invalid=密码不正确。再试一次。 twofa_enrolled=你的账号已经启用了两步验证。请保存初始令牌(%s)到一个安全的地方,此令牌仅当前显示一次。 -u2f_desc=安全密钥是包含加密算法的硬件设备。它们可以用于两步验证。安全密钥必须支持 FIDO U2F 标准。 -u2f_require_twofa=必须开启两步验证才能使用安全密钥。 u2f_register_key=添加安全密钥 u2f_nickname=昵称 u2f_press_button=按安全密钥上的按钮进行注册。 u2f_delete_key=移除安全密钥 -u2f_delete_key_desc=如果移除安全密钥, 则无法再使用它登录。是否确定? manage_account_links=管理绑定过的账号 manage_account_links_desc=这些外部帐户已经绑定到您的 Gitea 帐户。 @@ -650,7 +638,6 @@ issues.new.open_milestone=开启中的里程碑 issues.new.closed_milestone=已关闭的里程碑 issues.new.assignees=指派成员 issues.new.clear_assignees=取消指派成员 -issues.new.no_assignees=未指派成员 issues.no_ref=分支/标记未指定 issues.create=创建工单 issues.new_label=创建标签 @@ -1167,8 +1154,6 @@ branch.protected_deletion_failed=分支 '%s' 已被保护,不可删除。 topic.manage_topics=管理主题 topic.done=保存 -topic.count_prompt=您最多选择25个主题 -topic.format_prompt=主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符 [org] org_name_holder=组织名称 @@ -1273,8 +1258,6 @@ dashboard.operation_switch=开关 dashboard.operation_run=执行 dashboard.clean_unbind_oauth=清理未绑定的 OAuth 连接 dashboard.clean_unbind_oauth_success=所有未绑定的 OAuth 连接已被删除。 -dashboard.delete_inactivate_accounts=删除所有未激活的帐户 -dashboard.delete_inactivate_accounts_success=所有未激活的帐户都已删除。 dashboard.delete_repo_archives=删除所有仓库存档 dashboard.delete_repo_archives_success=所有仓库存档清除成功! dashboard.delete_missing_repos=删除所有丢失 Git 文件的仓库 @@ -1482,7 +1465,6 @@ config.db_path=数据库路径 config.service_config=服务配置 config.register_email_confirm=需要电子邮件确认注册 config.disable_register=禁止用户注册 -config.allow_only_external_registration=仅允许通过外部服务注册 config.enable_openid_signup=启用 OpenID 自注册 config.enable_openid_signin=启用 OpenID 登录 config.show_registration_button=显示注册按钮 diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index 7c0242f70..f26a4a6c8 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -32,16 +32,8 @@ twofa_scratch=兩步驟驗證備用碼 passcode=驗證碼 u2f_insert_key=插入安全金鑰 -u2f_sign_in=按下安全金鑰上的按鈕。如果找不到按鈕, 請重新插入。 u2f_press_button=請按下安全金鑰上的按鈕… u2f_use_twofa=使用來自手機的兩步驟驗證碼 -u2f_error=找不到您的安全金鑰! -u2f_unsupported_browser=您的瀏覽器不支援 U2F 二步驟驗證技術。請嘗試其他瀏覽器。 -u2f_error_1=發生未知的錯誤,請重試。 -u2f_error_2=請確保您使用的是加密連接 (https://) 並且 URL 是正確的。 -u2f_error_3=伺服器無法執行您的請求。 -u2f_error_4=所提交的金鑰不符合此請求。如果您嘗試註冊它, 請確保該金鑰尚未註冊。 -u2f_error_5=在讀取金鑰之前已逾時,請重新載入以重試。 u2f_reload=重新載入 repository=儲存庫 @@ -129,7 +121,6 @@ federated_avatar_lookup=開啟聯合大頭貼 federated_avatar_lookup_popup=開啟聯合頭像查詢並使用基於開放源碼的 libravatar 服務 disable_registration=關閉註冊功能 disable_registration_popup=關閉註冊功能,只有管理員可以新增帳號。 -allow_only_external_registration_popup=僅允許通過外部服務註冊。 openid_signin=啟用 OpenID 登入 openid_signin_popup=啟用 OpenID 登入 openid_signup=啟用 OpenID 註冊 @@ -432,13 +423,10 @@ or_enter_secret=或者輸入密碼: %s then_enter_passcode=然後輸入應用程序中顯示的驗證碼: passcode_invalid=無效的驗證碼,請重試。 -u2f_desc=安全密鑰是包含加密密鑰的硬體設備。 它們可以用於兩步驟認證。 安全密鑰必須符合 FIDO U2F 標準。 -u2f_require_twofa=必須先開啟兩步驟驗證才能使用安全密鑰。 u2f_register_key=新增安全密鑰 u2f_nickname=暱稱 u2f_press_button=按下安全密鑰上的密碼進行註冊。 u2f_delete_key=移除安全密鑰 -u2f_delete_key_desc=如果您移除安全密鑰,則無法再使用它登錄。 確定嗎? manage_account_links=管理已連結的帳號 manage_account_links_desc=這些外部帳號與您的 Gitea 帳號相關聯。 @@ -591,7 +579,6 @@ issues.new.open_milestone=開啟中的里程碑 issues.new.closed_milestone=已關閉的里程碑 issues.new.assignees=指派成員 issues.new.clear_assignees=取消指派成員 -issues.new.no_assignees=未指派成員 issues.no_ref=未指定分支或標籤 issues.create=建立問題 issues.new_label=建立標籤 @@ -1260,7 +1247,6 @@ config.db_path=資料庫路徑 config.service_config=服務設定 config.register_email_confirm=要求註冊時確認電子郵件 config.disable_register=關閉註冊功能 -config.allow_only_external_registration=僅允許通過外部服務註冊 config.enable_openid_signup=啟用 OpenID 註冊 config.enable_openid_signin=啟用 OpenID 登入 config.show_registration_button=顯示註冊按鈕 From bed623600d18dac84d17e41a47a8119098dc1d47 Mon Sep 17 00:00:00 2001 From: Kjell Kvinge Date: Sat, 21 Jul 2018 20:17:10 +0200 Subject: [PATCH 123/124] Accept 'Data:' in commit graph (#4487) --- models/graph.go | 2 +- models/graph_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/models/graph.go b/models/graph.go index cfd583ca8..8ecea9c09 100644 --- a/models/graph.go +++ b/models/graph.go @@ -66,7 +66,7 @@ func graphItemFromString(s string, r *git.Repository) (GraphItem, error) { var ascii string var data = "|||||||" - lines := strings.Split(s, "DATA:") + lines := strings.SplitN(s, "DATA:", 2) switch len(lines) { case 1: diff --git a/models/graph_test.go b/models/graph_test.go index 47c9dbb08..0f6e33879 100644 --- a/models/graph_test.go +++ b/models/graph_test.go @@ -5,6 +5,7 @@ package models import ( + "fmt" "testing" "code.gitea.io/git" @@ -43,3 +44,32 @@ func BenchmarkParseCommitString(b *testing.B) { } } } + +func TestCommitStringParsing(t *testing.T) { + dataFirstPart := "* DATA:||4e61bacab44e9b4730e44a6615d04098dd3a8eaf|2016-12-20 21:10:41 +0100|Author|user@mail.something|4e61bac|" + tests := []struct { + shouldPass bool + testName string + commitMessage string + }{ + {true, "normal", "not a fancy message"}, + {true, "extra pipe", "An extra pipe: |"}, + {true, "extra 'Data:'", "DATA: might be trouble"}, + } + + for _, test := range tests { + + t.Run(test.testName, func(t *testing.T) { + testString := fmt.Sprintf("%s%s", dataFirstPart, test.commitMessage) + graphItem, err := graphItemFromString(testString, nil) + if err != nil && test.shouldPass { + t.Errorf("Could not parse %s", testString) + return + } + + if test.commitMessage != graphItem.Subject { + t.Errorf("%s does not match %s", test.commitMessage, graphItem.Subject) + } + }) + } +} From ec43e5619b70e09750accc05ef8eac720f284f24 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Sat, 21 Jul 2018 18:18:18 +0000 Subject: [PATCH 124/124] [skip ci] Updated translations via Crowdin --- options/locale/locale_es-ES.ini | 2 +- options/locale/locale_nl-NL.ini | 60 +++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_es-ES.ini b/options/locale/locale_es-ES.ini index a69aad09a..cc2c17dce 100644 --- a/options/locale/locale_es-ES.ini +++ b/options/locale/locale_es-ES.ini @@ -27,7 +27,7 @@ email=Correo electrónico password=Contraseña re_type=Vuelva a escribir la contraseña captcha=CAPTCHA -twofa=Autenticación de dos factores +twofa=Autenticación en dos pasos passcode=Contraseña u2f_insert_key=Inserte su clave de seguridad diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini index c5898a999..404ce41ac 100644 --- a/options/locale/locale_nl-NL.ini +++ b/options/locale/locale_nl-NL.ini @@ -32,8 +32,16 @@ twofa_scratch=Eenmalige twee factor authenticatie code passcode=PIN u2f_insert_key=Uw beveiligingssleutel invoegen +u2f_sign_in=Druk op de knop op uw beveiligingssleutel. Als u geen knop kunt vinden, voeg deze opnieuw in. u2f_press_button=Druk op de knop op uw beveiligingssleutel… u2f_use_twofa=Gebruik een twee-factor code van uw telefoon +u2f_error=Wij kunnen uw beveiligingssleutel niet lezen. +u2f_unsupported_browser=Uw browser ondersteunt geen U2F beveiligingssleutels. +u2f_error_1=Er is een onbekende fout opgetreden. Probeer het opnieuw. +u2f_error_2=Zorg ervoor dat u de juiste URL (https://) gebruikt. +u2f_error_3=De server kan uw aanvraag niet verwerken. +u2f_error_4=De beveiligingssleutel is niet toegestaan voor dit verzoek. Gelieve ervoor te zorgen dat de sleutel niet al is geregistreerd. +u2f_error_5=Timeout bereikt voordat uw sleutel kon worden gelezen. Gelieve deze pagina opnieuw laden en probeer opnieuw. u2f_reload=Herladen repository=Repository @@ -45,9 +53,11 @@ new_mirror=Nieuwe kopie new_fork=Nieuwe Repository Fork new_org=Nieuwe organisatie manage_org=Beheer organisaties +admin_panel=Website Administratie account_settings=Accountinstellingen settings=Instellingen your_profile=Profiel +your_starred=Favoriet your_settings=Instellingen all=Alles @@ -65,6 +75,7 @@ cancel=Annuleren [install] install=Installatie title=Initiële configuratie +docker_helper=Als je gitea draait in Docker, Lees eerst de documentatie voordat je een instelling aanpast. requite_db_desc=Gitea vereist MySQL, PostgreSQL, MSSQL, SQLite3 of TiDB. db_title=Database-instellingen db_type=Database-type @@ -72,25 +83,53 @@ host=Server user=Gebruikersnaam password=Wachtwoord db_name=Database naam +db_helper=Opmerking voor MySQL-gebruikers: gebruik het InnoDB opslagsysteem en de "utf8_general_ci" tekenset. ssl_mode=SSL path=Pad +sqlite_helper=Bestandspad voor de SQLite3 of TiDB database.
Vul een volledig pad in als je Gitea als een service runt. err_empty_db_path=Het SQLite3 of TiDB database pad mag niet leeg zijn. +err_invalid_tidb_name=De naam van de database van de TiDB mag geen '.' en '-' tekens bevatten. +no_admin_and_disable_registration=U kunt zelf-registratie van de gebruiker niet uitschakelen zonder het maken van een administrator-account. err_empty_admin_password=Het administrator-wachtwoord mag niet leeg zijn. general_title=Algemene Instellingen app_name=Naam site +app_name_helper=U kan de naam van uw bedrijf hier invullen. repo_path=Repositories basis map +repo_path_helper=Externe git repositories worden opgeslagen in deze map. lfs_path=Git LFS root pad +lfs_path_helper=Bestanden bijgehouden door Git LFS zullenworden opgeslagen in deze map. Laat leeg om uit te schakelen. +run_user=Uitvoeren als gebruiker +run_user_helper=Geef de gebruikersnaam van het besturingssysteem waarop Gitea wordt uitgevoerd. Realiseer u dat deze gebruiker toegang tot het pad van de hoofdmap moet hebben. +domain=SSH server-domein +domain_helper=Domein of ip-adres voor SSH kloon URLs. +ssh_port=SSH server-poort +ssh_port_helper=Nummer van de poort die uw SSH-server gebruikt. Laat dit veld leeg om de SSH functie uit te schakelen. +http_port=Gitea HTTP-poort +http_port_helper=De poort waar de web server van Gitea naar gaat luisteren. app_url=Gitea base URL +app_url_helper=Basisadres voor HTTP(S) kloon URL's en e-mailmeldingen. log_root_path=Log-pad +log_root_path_helper=Logboekbestanden worden geschreven naar deze map. optional_title=Optionele instellingen email_title=E-mail instellingen smtp_host=SMTP host smtp_from=E-mails versturen als +smtp_from_helper=E-mailadres dat Gitea gaat gebruiken. Voer een gewoon e-mailadres in of gebruik de "Naam" -indeling. mailer_user=SMTP gebruikersnaam mailer_password=SMTP wachtwoord +register_confirm=E-mailbevestiging vereist bij registreren +mail_notify=Activeer e-mailnotificaties +server_service_title=Server en Third-Party Service-instellingen +offline_mode=Lokale modus inschakelen +offline_mode_popup=Schakel third-party content uit en gebruik alleen lokale middelen. +disable_gravatar=Gravatar uitschakelen +disable_gravatar_popup=Gravatar en derden avatar bronnen uitschakelen. Een standaard avatar zal worden gebruikt, tenzij een gebruiker een lokale avatar uploadt. +federated_avatar_lookup=Federated Avatars toestaan federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. +disable_registration=Schakel zelf registratie uit +disable_registration_popup=Schakel zelfregistratie uit, alleen admins kunnen accounts maken. openid_signin=OpenID-inloggen inschakelen enable_captcha_popup=Vereis captcha validatie voor zelf-registratie van gebruiker. admin_name=Admin gebruikersnaam @@ -99,8 +138,10 @@ confirm_password=Verifieer wachtwoord admin_email=E-mail adres install_btn_confirm=Installeer Gitea test_git_failed=Git test niet gelukt: 'git' commando %v +invalid_db_setting=De database instelling zijn niet correct: %v save_config_failed=Kan de configuratie niet opslaan: %v invalid_log_root_path=Ongeldig log-pad: %v +default_keep_email_private=Verberg standaard alle e-mailadressen [home] password_holder=Wachtwoord @@ -198,6 +239,7 @@ auth_failed=Verificatie mislukt: %v target_branch_not_exist=Doel branch bestaat niet [user] +change_avatar=Wijzig je profielfoto… join_on=Aangemeld op repositories=repositories activity=Openbare activiteit @@ -216,6 +258,7 @@ security=Beveiliging avatar=Profielfoto ssh_gpg_keys=SSH / GPG sleutels social=Sociale netwerk-accounts +orgs=Beheer organisaties repos=Repositories delete=Verwijder account twofa=Twee factor authenticatie @@ -242,12 +285,16 @@ delete_current_avatar=Verwijder huidige avatar change_password=Wachtwoord bijwerken old_password=Huidige wachtwoord new_password=Nieuw wachtwoord +retype_new_password=Herhaal Nieuw Wachtwoord emails=E-mailadressen email_desc=Uw primaire e-mailadres zal worden gebruikt voor meldingen en andere administratieve taken. primary=Primair delete_email=Verwijder +email_deletion=Verwijder e-mailadres +add_new_email=Nieuw e-mailadres toevoegen add_openid=Voeg OpenID URL toe +keep_email_private=Verberg e-mailadres manage_ssh_keys=Beheer SSH sleutels manage_gpg_keys=Beheer GPG sleutels @@ -294,6 +341,7 @@ repos_none=U bezit geen repositories delete_account=Verwijder uw account confirm_delete_account=Bevestig verwijdering +delete_account_title=Verwijder gebruikers account [repo] owner=Eigenaar @@ -331,6 +379,7 @@ watch=Volgen unstar=Ontster star=Ster fork=Vork +download_archive=Download repository no_desc=Geen omschrijving quick_guide=Snelstart gids @@ -454,6 +503,7 @@ issues.delete_comment_confirm=Weet u zeker dat u deze reactie wilt verwijderen? issues.no_content=Er is nog geen inhoud. issues.close_issue=Sluit issues.reopen_issue=Heropen +issues.reopen_comment_issue=Heropen en geef commentaar issues.create_comment=Reageer issues.closed_at=`gesloten om %[2]s` issues.reopened_at=`heropend om %[2]s` @@ -600,6 +650,7 @@ settings.tracker_issue_style.numeric=Nummeriek settings.tracker_issue_style.alphanumeric=Alfanummeriek settings.danger_zone=Gevaren zone settings.new_owner_has_same_repo=De nieuwe eigenaar heeft al een repository met deze naam +settings.convert_confirm=Converteer Repository settings.transfer=Eigendom overdragen settings.delete=Verwijder deze repository settings.delete_notices_1=- Deze bewerking kan NIET ongedaan gemaakt worden. @@ -629,6 +680,7 @@ settings.event_send_everything=Alle gebeurtenissen settings.event_create=Creëer settings.event_delete=Verwijder settings.event_fork=Fork +settings.event_fork_desc=Repository geforked settings.event_release=Release settings.event_pull_request=Pull request settings.event_push=Push @@ -641,6 +693,7 @@ settings.slack_domain=Slack domein settings.slack_channel=Slack kanaal settings.deploy_keys=Installeer sleutels settings.add_deploy_key=Toevoegen deploy sleutel +settings.is_writable=Schrijf toegang inschakelen settings.title=Titel settings.deploy_key_content=Inhoud settings.branches=Branches @@ -689,6 +742,7 @@ release.downloads=Downloads branch.name=Branch naam branch.search=Zoek branches branch.delete_head=Verwijder +branch.delete=Verwijder branch '%s' branch.delete_html=Verwijder branch branch.create_branch=Maak branch %s branch.create_from=van '%s' @@ -724,6 +778,7 @@ settings.update_setting_success=Organisatie instellingen zijn succesvol bijgewer settings.delete=Verwijder organisatie settings.delete_account=Verwijder deze organisatie settings.confirm_delete_account=Bevestig verwijdering +settings.delete_org_title=Verwijder organisatie members.membership_visibility=Zichtbaarheid lidmaatschap: members.public=Zichtbaar @@ -801,6 +856,7 @@ dashboard.total_gc_pause=Totaal GC verwerkingstijd dashboard.last_gc_pause=Laatste GC verwerkingstijd dashboard.gc_times=GC verwerkingen +users.new_account=Nieuw account aanmaken users.name=Gebruikersnaam users.activated=Geactiveerd users.admin=Beheerder @@ -810,6 +866,8 @@ users.last_login=Laatste keer ingelogd users.edit=Bewerken users.auth_source=Authenticatiebron users.local=Lokaal +users.update_profile=Update gebruikers account +users.delete_account=Verwijder gebruikers account orgs.org_manage_panel=Organisaties beheren orgs.name=Naam @@ -838,6 +896,7 @@ auths.host=Host auths.port=Poort auths.bind_dn=Binden DN auths.bind_password=Bind wachtwoord +auths.attribute_username=Gebruikersnaam attribuut auths.search_page_size=Paginagrootte auths.filter=Gebruikersfilter auths.admin_filter=Beheerdersfilter @@ -903,6 +962,7 @@ config.mailer_host=Host config.mailer_user=Gebruiker config.mailer_use_sendmail=Gebruik Sendmail config.mailer_sendmail_path=Sendmail pad +config.send_test_mail=Test e-mail verzenden config.oauth_config=OAuth-configuratie config.oauth_enabled=Ingeschakeld